diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 433ab8b78b7a9..aea151baae3a1 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -246,6 +246,7 @@ enabled: - x-pack/test/fleet_api_integration/config.epm.ts - x-pack/test/fleet_api_integration/config.fleet.ts - x-pack/test/fleet_api_integration/config.package_policy.ts + - x-pack/test/fleet_api_integration/config.space_awareness.ts - x-pack/test/fleet_functional/config.ts - x-pack/test/ftr_apis/security_and_spaces/config.ts - x-pack/test/functional_basic/apps/ml/permissions/config.ts @@ -442,7 +443,8 @@ enabled: - x-pack/test_serverless/functional/test_suites/search/common_configs/config.group6.ts - x-pack/test_serverless/functional/test_suites/security/config.ts - x-pack/test_serverless/functional/test_suites/security/config.examples.ts - - x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts + - x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts + - x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.essentials.ts - x-pack/test_serverless/functional/test_suites/security/config.saved_objects_management.ts - x-pack/test_serverless/functional/test_suites/security/common_configs/config.group1.ts - x-pack/test_serverless/functional/test_suites/security/common_configs/config.group2.ts @@ -572,4 +574,3 @@ enabled: - x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint/configs/serverless.integrations.config.ts - x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint/configs/serverless.integrations_feature_flag.config.ts - x-pack/test/security_solution_api_integration/test_suites/security_solution_endpoint/configs/integrations_feature_flag.config.ts - diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 02011690a13c3..38ae590f18e0b 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -145,15 +145,14 @@ const getPipeline = (filename: string, removeSteps = true) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/fips.yml')); } - if (GITHUB_PR_LABELS.includes('ci:build-serverless-image')) { - pipeline.push(getPipeline('.buildkite/pipelines/pull_request/build_project.yml')); - } if ( GITHUB_PR_LABELS.includes('ci:project-deploy-elasticsearch') || GITHUB_PR_LABELS.includes('ci:project-deploy-observability') || GITHUB_PR_LABELS.includes('ci:project-deploy-security') ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/deploy_project.yml')); + } else if (GITHUB_PR_LABELS.includes('ci:build-serverless-image')) { + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/build_project.yml')); } if ( diff --git a/.eslintrc.js b/.eslintrc.js index 4e6c367970c02..09c7428599ca2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1004,6 +1004,29 @@ module.exports = { }, }, + /** + * Integration assistant overrides + */ + { + // front end and common typescript and javascript files only + files: [ + 'x-pack/plugins/integration_assistant/public/**/*.{js,mjs,ts,tsx}', + 'x-pack/plugins/integration_assistant/common/**/*.{js,mjs,ts,tsx}', + ], + rules: { + 'import/no-nodejs-modules': 'error', + 'no-duplicate-imports': 'off', + '@typescript-eslint/no-duplicate-imports': 'error', + 'no-restricted-imports': [ + 'error', + { + // prevents UI code from importing server side code and then webpack including it when doing builds + patterns: ['**/server/*'], + }, + ], + }, + }, + /** * ML overrides */ @@ -1068,6 +1091,7 @@ module.exports = { files: [ 'x-pack/plugins/ecs_data_quality_dashboard/**/*.{ts,tsx}', 'x-pack/plugins/elastic_assistant/**/*.{ts,tsx}', + 'x-pack/plugins/integration_assistant/**/*.{ts,tsx}', 'x-pack/packages/kbn-elastic-assistant/**/*.{ts,tsx}', 'x-pack/packages/kbn-elastic-assistant-common/**/*.{ts,tsx}', 'x-pack/packages/kbn-langchain/**/*.{ts,tsx}', @@ -1082,6 +1106,7 @@ module.exports = { excludedFiles: [ 'x-pack/plugins/ecs_data_quality_dashboard/**/*.{test,mock,test_helper}.{ts,tsx}', 'x-pack/plugins/elastic_assistant/**/*.{test,mock,test_helper}.{ts,tsx}', + 'x-pack/plugins/integration_assistant/**/*.{test,mock,test_helper}.{ts,tsx}', 'x-pack/packages/kbn-elastic-assistant/**/*.{test,mock,test_helper}.{ts,tsx}', 'x-pack/packages/kbn-elastic-assistant-common/**/*.{test,mock,test_helper}.{ts,tsx}', 'x-pack/packages/kbn-langchain/**/*.{test,mock,test_helper}.{ts,tsx}', @@ -1102,6 +1127,7 @@ module.exports = { files: [ 'x-pack/plugins/ecs_data_quality_dashboard/**/*.{ts,tsx}', 'x-pack/plugins/elastic_assistant/**/*.{ts,tsx}', + 'x-pack/plugins/integration_assistant/**/*.{ts,tsx}', 'x-pack/packages/kbn-elastic-assistant/**/*.{ts,tsx}', 'x-pack/packages/kbn-elastic-assistant-common/**/*.{ts,tsx}', 'x-pack/packages/kbn-langchain/**/*.{ts,tsx}', @@ -1141,6 +1167,7 @@ module.exports = { files: [ 'x-pack/plugins/ecs_data_quality_dashboard/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/elastic_assistant/**/*.{js,mjs,ts,tsx}', + 'x-pack/plugins/integration_assistant/**/*.{js,mjs,ts,tsx}', 'x-pack/packages/kbn-elastic-assistant/**/*.{js,mjs,ts,tsx}', 'x-pack/packages/kbn-elastic-assistant-common/**/*.{js,mjs,ts,tsx}', 'x-pack/packages/kbn-langchain/**/*.{js,mjs,ts,tsx}', diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e8e33cfec9a8f..dad6ef851a117 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -503,6 +503,7 @@ x-pack/plugins/observability_solution/infra @elastic/obs-ux-logs-team @elastic/o x-pack/plugins/ingest_pipelines @elastic/kibana-management src/plugins/input_control_vis @elastic/kibana-presentation src/plugins/inspector @elastic/kibana-presentation +x-pack/plugins/integration_assistant @elastic/security-solution src/plugins/interactive_setup @elastic/kibana-security test/interactive_setup_api_integration/plugins/test_endpoints @elastic/kibana-security packages/kbn-interpreter @elastic/kibana-visualizations @@ -1650,7 +1651,8 @@ x-pack/test/security_solution_api_integration/test_suites/genai @elastic/securit /x-pack/test/cloud_security_posture_functional/ @elastic/kibana-cloud-security-posture /x-pack/test/cloud_security_posture_api/ @elastic/kibana-cloud-security-posture /x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/ @elastic/kibana-cloud-security-posture -/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts @elastic/kibana-cloud-security-posture +/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts @elastic/kibana-cloud-security-posture +/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.essentials.ts @elastic/kibana-cloud-security-posture /x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/ @elastic/kibana-cloud-security-posture /x-pack/plugins/fleet/public/components/cloud_security_posture @elastic/fleet @elastic/kibana-cloud-security-posture /x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/cloud_security_posture @elastic/fleet @elastic/kibana-cloud-security-posture diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index dffb93a2bf3cd..e669f6344efe4 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 42923c45d8a0d..e4ce3d3d809f4 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-06-13 +date: 2024-06-17 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 117479f104195..ad899d5b30fa7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.devdocs.json b/api_docs/aiops.devdocs.json index b0444a67e7314..0f81782c4ed41 100644 --- a/api_docs/aiops.devdocs.json +++ b/api_docs/aiops.devdocs.json @@ -1068,22 +1068,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "aiops", - "id": "def-public.LogRateAnalysisAppStateProps.stickyHistogram", - "type": "CompoundType", - "tags": [], - "label": "stickyHistogram", - "description": [ - "Option to make main histogram sticky" - ], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "aiops", "id": "def-public.LogRateAnalysisAppStateProps.showFrozenDataTierChoice", @@ -1138,22 +1122,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "aiops", - "id": "def-public.LogRateAnalysisContentWrapperProps.stickyHistogram", - "type": "CompoundType", - "tags": [], - "label": "stickyHistogram", - "description": [ - "Option to make main histogram sticky" - ], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "aiops", "id": "def-public.LogRateAnalysisContentWrapperProps.appDependencies", diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 85a345ba3635d..9fef5c6dbd430 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.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 | |-------------------|-----------|------------------------|-----------------| -| 74 | 0 | 9 | 2 | +| 72 | 0 | 9 | 2 | ## Client diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 40a9d764c2632..5e1523e0a3842 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-06-13 +date: 2024-06-17 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 d23a0f1c870d9..d6b614ee1d744 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-06-13 +date: 2024-06-17 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 b210b7de31046..5fe9a4777bcc7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 30a0aa39ecf93..51ec9eba5b862 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 4a0080a80cb70..50feaddd919fb 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index d8ffb05329d0d..1535f0fdb0549 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 1509b210289c9..00bee7c4b9bc5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 87e3d1c49c9fa..de7aca323a1b1 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 723b52fb3cc64..0748b61b123c8 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 46949e1d3d910..634b1e16398dc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 3ffb7b9019b43..1b1693299fe3d 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-06-13 +date: 2024-06-17 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 4848067feeed1..36756a7e7d23d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index b9e8e7489a1f4..88223862d4f6d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 2f350f151098d..df95c8ca9604f 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index cb370e53689d5..d6421a40ce532 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 01a13562ca5a8..996aa6c999ae8 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index c8f471227cced..6d69b349cc2ca 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 89f718326e5c7..aac1852d986db 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 89906e523cec9..fe8a893b471de 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index c10977633ec4b..1a30d17f3db46 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 009a4774a35f4..61c87fd0e0286 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index a6eee74b2a73d..b8539d3b9a861 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3199 | 31 | 2590 | 24 | +| 3194 | 31 | 2585 | 24 | ## Client diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 19e297e8f1cb1..9f7fe6b7fba4e 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-06-13 +date: 2024-06-17 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 8067cd9a37a93..ea9672a7a2ef7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3199 | 31 | 2590 | 24 | +| 3194 | 31 | 2585 | 24 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 3e3047831b93f..a9e4a675758c1 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -16864,134 +16864,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-common.queryToFields", - "type": "Function", - "tags": [], - "label": "queryToFields", - "description": [], - "signature": [ - "({\n dataView,\n sort,\n request,\n}: { dataView: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewLazy", - "text": "DataViewLazy" - }, - "; sort?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.EsQuerySortValue", - "text": "EsQuerySortValue" - }, - " | ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.EsQuerySortValue", - "text": "EsQuerySortValue" - }, - "[] | undefined; request: ", - "SearchRequest", - "; }) => Promise>" - ], - "path": "src/plugins/data/common/search/search_source/query_to_fields.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "data", - "id": "def-common.queryToFields.$1", - "type": "Object", - "tags": [], - "label": "{\n dataView,\n sort,\n request,\n}", - "description": [], - "path": "src/plugins/data/common/search/search_source/query_to_fields.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "data", - "id": "def-common.queryToFields.$1.dataView", - "type": "Object", - "tags": [], - "label": "dataView", - "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewLazy", - "text": "DataViewLazy" - } - ], - "path": "src/plugins/data/common/search/search_source/query_to_fields.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "data", - "id": "def-common.queryToFields.$1.sort", - "type": "CompoundType", - "tags": [], - "label": "sort", - "description": [], - "signature": [ - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.EsQuerySortValue", - "text": "EsQuerySortValue" - }, - " | ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.EsQuerySortValue", - "text": "EsQuerySortValue" - }, - "[] | undefined" - ], - "path": "src/plugins/data/common/search/search_source/query_to_fields.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "data", - "id": "def-common.queryToFields.$1.request", - "type": "Object", - "tags": [], - "label": "request", - "description": [], - "signature": [ - "{ [x: string]: any; }" - ], - "path": "src/plugins/data/common/search/search_source/query_to_fields.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-common.splitStringInterval", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index dc1b16c1bea02..e49d31bb27213 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3199 | 31 | 2590 | 24 | +| 3194 | 31 | 2585 | 24 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 47460cdd7160a..9658b11938c7b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 7a0739abfd196..14345fff79b2c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index adff8bee8fb79..3c47bb01bfdcf 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index f1fc2955eefaa..8dad9a0ac323d 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -12941,10 +12941,6 @@ "deprecated": true, "trackAdoption": false, "references": [ - { - "plugin": "data", - "path": "src/plugins/data/public/query/filter_manager/lib/get_display_value.ts" - }, { "plugin": "data", "path": "src/plugins/data/common/search/search_source/inspect/inspector_stats.ts" @@ -12954,12 +12950,16 @@ "path": "src/plugins/data/common/search/tabify/response_writer.ts" }, { - "plugin": "@kbn/search-errors", - "path": "packages/kbn-search-errors/src/painless_error.tsx" + "plugin": "data", + "path": "src/plugins/data/common/search/aggs/param_types/field.ts" }, { "plugin": "data", - "path": "src/plugins/data/common/search/aggs/param_types/field.ts" + "path": "src/plugins/data/public/query/filter_manager/lib/get_display_value.ts" + }, + { + "plugin": "@kbn/search-errors", + "path": "packages/kbn-search-errors/src/painless_error.tsx" }, { "plugin": "savedObjectsManagement", @@ -13225,10 +13225,6 @@ "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/public/pages/logs/settings/validation_errors.ts" }, - { - "plugin": "timelines", - "path": "x-pack/plugins/timelines/server/search_strategy/index_fields/index.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/sourcerer/containers/create_sourcerer_data_view.ts" @@ -13245,6 +13241,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.ts" }, + { + "plugin": "timelines", + "path": "x-pack/plugins/timelines/server/search_strategy/index_fields/index.ts" + }, { "plugin": "transform", "path": "x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index b86d49443d74e..6d9cc8fbb6606 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index cfe7b4ce9456e..7555c40986953 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.devdocs.json b/api_docs/dataset_quality.devdocs.json index 14df933533652..48297e463fbda 100644 --- a/api_docs/dataset_quality.devdocs.json +++ b/api_docs/dataset_quality.devdocs.json @@ -185,7 +185,7 @@ "Type", "; }>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { path: { dataStream: string; }; query: { start: number; end: number; }; }; }) => Promise<{ lastActivity?: number | undefined; degradedDocsCount?: number | undefined; docsCount?: number | undefined; sizeBytes?: number | null | undefined; services?: { [x: string]: string[]; } | undefined; hosts?: { [x: string]: string[]; } | undefined; }>; } & ", + " & { params: { path: { dataStream: string; }; query: { start: number; end: number; }; }; }) => Promise<{ lastActivity?: number | undefined; degradedDocsCount?: number | undefined; docsCount?: number | undefined; sizeBytes?: number | null | undefined; services?: { [x: string]: string[]; } | undefined; hosts?: { [x: string]: string[]; } | undefined; userPrivileges?: { canMonitor: boolean; } | undefined; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/{dataStream}/degraded_fields\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/degraded_fields\"; params?: ", "TypeC", @@ -261,7 +261,7 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ datasetUserPrivileges: { canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }; dataStreamsStats: ({ name: string; userPrivileges: { canMonitor: boolean; }; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: infer TRouteParamsRT extends ", { @@ -340,7 +340,7 @@ "Type", "; }>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { path: { dataStream: string; }; query: { start: number; end: number; }; }; }) => Promise<{ lastActivity?: number | undefined; degradedDocsCount?: number | undefined; docsCount?: number | undefined; sizeBytes?: number | null | undefined; services?: { [x: string]: string[]; } | undefined; hosts?: { [x: string]: string[]; } | undefined; }>; } & ", + " & { params: { path: { dataStream: string; }; query: { start: number; end: number; }; }; }) => Promise<{ lastActivity?: number | undefined; degradedDocsCount?: number | undefined; docsCount?: number | undefined; sizeBytes?: number | null | undefined; services?: { [x: string]: string[]; } | undefined; hosts?: { [x: string]: string[]; } | undefined; userPrivileges?: { canMonitor: boolean; } | undefined; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/{dataStream}/degraded_fields\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/degraded_fields\"; params?: ", "TypeC", @@ -416,7 +416,7 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ datasetUserPrivileges: { canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }; dataStreamsStats: ({ name: string; userPrivileges: { canMonitor: boolean; }; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", "ServerRouteCreateOptions", diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 653728a71010a..8ed0ba095ef18 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-06-13 +date: 2024-06-17 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 e1b813866cf69..2b7977e2526ae 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -17,7 +17,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Referencing plugin(s) | Remove By | | ---------------|-----------|-----------| | | ml, stackAlerts | - | -| | data, @kbn/search-errors, savedObjectsManagement, unifiedSearch, @kbn/unified-field-list, lens, controls, triggersActionsUi, dataVisualizer, canvas, presentationUtil, logsShared, fleet, ml, @kbn/lens-embeddable-utils, @kbn/ml-data-view-utils, enterpriseSearch, graph, visTypeTimeseries, exploratoryView, stackAlerts, infra, timelines, securitySolution, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega | - | +| | data, @kbn/search-errors, savedObjectsManagement, unifiedSearch, @kbn/unified-field-list, lens, controls, triggersActionsUi, dataVisualizer, canvas, presentationUtil, logsShared, fleet, ml, @kbn/lens-embeddable-utils, @kbn/ml-data-view-utils, enterpriseSearch, graph, visTypeTimeseries, exploratoryView, stackAlerts, infra, securitySolution, timelines, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega | - | | | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | | | actions, savedObjectsTagging, ml, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, dataVisualizer, ml, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | @@ -50,7 +50,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | @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 | - | -| | dataViews, security, maps, imageEmbeddable, enterpriseSearch, securitySolution, serverlessSearch, cloudLinks, observabilityAIAssistantApp, cases, apm | - | +| | dataViews, security, maps, imageEmbeddable, securitySolution, serverlessSearch, cloudLinks, observabilityAIAssistantApp, cases, apm | - | | | security, cases, searchPlayground, securitySolution | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | @@ -67,14 +67,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/monaco, securitySolution | - | | | fleet, cloudSecurityPosture, exploratoryView, osquery, synthetics | - | | | actions, alerting | - | -| | visualizations, lens, controls, dashboard, maps, discover, profiling, links | - | +| | visualizations, lens, controls, dashboard, discover, links | - | | | discover, @kbn/reporting-public | - | | | data, discover, imageEmbeddable, embeddable | - | | | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, home, savedObjects, unifiedSearch, visualizations, fileUpload, dashboardEnhanced, transform, dashboard, discover, dataVisualizer | - | | | @kbn/core-saved-objects-browser-mocks, discover, @kbn/core-saved-objects-browser-internal | - | | | discover, @kbn/management-settings-field-definition | - | | | monitoring | - | -| | @kbn/core-saved-objects-api-browser, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, eventAnnotation, lens, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, data, embeddable, uiActionsEnhanced, controls, canvas, maps, dashboardEnhanced, globalSearchProviders | - | +| | @kbn/core-saved-objects-api-browser, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, eventAnnotation, lens, maps, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, data, embeddable, uiActionsEnhanced, controls, canvas, dashboardEnhanced, globalSearchProviders | - | | | @kbn/core-saved-objects-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, home, savedObjects, visualizations, lens, visTypeTimeseries, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, savedObjects, dashboard | - | | | @kbn/core-saved-objects-browser-mocks, home, @kbn/core-saved-objects-browser-internal | - | @@ -113,7 +113,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | kubernetesSecurity, osquery, threatIntelligence | - | | | @kbn/core, lens, savedObjects | - | | | lens, dashboard, canvas | - | -| | lens, controls, dashboard, observabilityShared | - | +| | lens, controls, dashboard | - | | | dashboard, canvas | - | | | dashboard | - | | | embeddable, dashboard | - | @@ -125,12 +125,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dataViews, dataViewManagement | - | | | dataViews, dataViewManagement | - | | | maps | - | -| | savedSearch, visualizations, lens, maps | - | | | dataViewManagement | - | | | dataViewManagement | - | | | spaces, savedObjectsManagement | - | | | unifiedSearch | - | | | unifiedSearch | - | +| | savedSearch, visualizations, lens | - | | | canvas | - | | | canvas | - | | | canvas | - | @@ -146,11 +146,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | embeddableEnhanced | - | | | embeddableEnhanced | - | | | uiActionsEnhanced | - | -| | observabilityShared | - | | | visTypeGauge | - | | | visTypePie | - | | | visTypePie | - | | | @kbn/core-logging-server-internal, security | - | +| | observabilityShared | - | | | @kbn/react-kibana-context-styled, kibanaReact | - | | | encryptedSavedObjects | - | | | reporting | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 954cef7403e64..e7ee880cdf970 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -657,7 +657,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [get_display_value.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts#:~:text=title), [inspector_stats.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/inspect/inspector_stats.ts#:~:text=title), [response_writer.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/tabify/response_writer.ts#:~:text=title), [field.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/param_types/field.ts#:~:text=title), [agg_config.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.test.ts#:~:text=title), [_terms_other_bucket_helper.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/_terms_other_bucket_helper.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [rare_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/rare_terms.test.ts#:~:text=title), [terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/terms.test.ts#:~:text=title)+ 2 more | - | +| | [inspector_stats.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/inspect/inspector_stats.ts#:~:text=title), [response_writer.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/tabify/response_writer.ts#:~:text=title), [field.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/param_types/field.ts#:~:text=title), [get_display_value.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/query/filter_manager/lib/get_display_value.ts#:~:text=title), [agg_config.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.test.ts#:~:text=title), [_terms_other_bucket_helper.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/_terms_other_bucket_helper.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [multi_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts#:~:text=title), [rare_terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/rare_terms.test.ts#:~:text=title), [terms.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/terms.test.ts#:~:text=title)+ 2 more | - | | | [session_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/server/search/session/session_service.ts#:~:text=authc) | - | | | [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions), [data_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data/public/utils/table_inspector_view/components/data_table.tsx#:~:text=executeTriggerActions) | - | | | [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/filters/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference), [persistable_state.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data/common/query/persistable_state.ts#:~:text=SavedObjectReference) | - | @@ -775,10 +775,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [find_or_create_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.ts#:~:text=title), [analytics_collection_explore_table_formulas.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_explore_table_formulas.ts#:~:text=title), [find_or_create_data_view.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.test.ts#:~:text=title) | - | | | [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi) | - | | | [check_access.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz) | - | -| | [create_api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/indices/create_api_key.ts#:~:text=authc), [api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts#:~:text=authc), [api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts#:~:text=authc), [create_api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/indices/create_api_key.ts#:~:text=authc), [api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts#:~:text=authc), [api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts#:~:text=authc) | - | +| | [create_api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/indices/create_api_key.ts#:~:text=authc), [api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts#:~:text=authc), [create_api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/indices/create_api_key.ts#:~:text=authc), [api_keys.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts#:~:text=authc) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/plugin.ts#:~:text=legacy) | - | | | [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes) | - | -| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/index.tsx#:~:text=authc), [roles_empty_prompt.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/shared/role_mapping/roles_empty_prompt.tsx#:~:text=authc), [roles_empty_prompt.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/shared/role_mapping/roles_empty_prompt.tsx#:~:text=authc), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=authc), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=authc) | - | @@ -1069,10 +1068,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [es_search_source.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx#:~:text=flattenHit), [es_search_source.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx#:~:text=flattenHit), [es_search_source.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx#:~:text=flattenHit), [es_search_source.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx#:~:text=flattenHit) | - | | | [es_search_source.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx#:~:text=flattenHit), [es_search_source.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx#:~:text=flattenHit) | - | | | [es_tooltip_property.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/tooltips/es_tooltip_property.test.ts#:~:text=title) | - | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/plugin.ts#:~:text=registerSavedObjectToPanelMethod) | - | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/plugin.ts#:~:text=registerEmbeddableFactory) | - | -| | [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=ResolvedSimpleSavedObject) | - | -| | [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=SavedObjectReference), [map_attribute_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/map_attribute_service.ts#:~:text=SavedObjectReference) | - | +| | [load_from_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts#:~:text=ResolvedSimpleSavedObject), [load_from_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts#:~:text=ResolvedSimpleSavedObject), [load_from_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts#:~:text=ResolvedSimpleSavedObject), [load_from_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts#:~:text=ResolvedSimpleSavedObject) | - | +| | [load_from_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts#:~:text=SavedObjectReference), [load_from_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts#:~:text=SavedObjectReference), [save_to_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/save_to_library.ts#:~:text=SavedObjectReference), [save_to_library.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/routes/map_page/saved_map/save_to_library.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference), [references.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/common/migrations/references.ts#:~:text=SavedObjectReference) | - | | | [setup_saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/server/saved_objects/setup_saved_objects.ts#:~:text=migrations) | - | | | [setup_saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/server/saved_objects/setup_saved_objects.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | | | [es_search_source.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx#:~:text=authc) | - | @@ -1140,7 +1137,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [profiling_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_shared/public/components/profiling/embeddables/profiling_embeddable.tsx#:~:text=getEmbeddableFactory), [embeddable_profiling_search_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_shared/public/components/profiling/embeddables/embeddable_profiling_search_bar.tsx#:~:text=getEmbeddableFactory) | - | | | [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_shared/public/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_shared/public/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint) | - | @@ -1182,7 +1178,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [register_embeddables.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts#:~:text=registerEmbeddableFactory), [register_embeddables.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts#:~:text=registerEmbeddableFactory), [register_embeddables.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts#:~:text=registerEmbeddableFactory), [register_embeddables.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts#:~:text=registerEmbeddableFactory) | - | | | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/components/contexts/license/license_context.tsx#:~:text=license%24) | 8.8.0 | @@ -1377,16 +1372,16 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [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) | - | | | [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) | - | -| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 25 more | - | +| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [trusted_app_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 25 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION) | - | -| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [event_filter_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [event_filter_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID)+ 24 more | - | +| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID), [form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/form.tsx#:~:text=ENDPOINT_EVENT_FILTERS_LIST_ID)+ 24 more | - | | | [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_NAME) | - | | | [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [create_event_filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/event_filters/index.ts#:~:text=ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION) | - | -| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID)+ 8 more | - | +| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [host_isolation_exceptions_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID), [exceptions_list_item_generator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/endpoint/data_generators/exceptions_list_item_generator.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_ID)+ 8 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/host_isolation_exceptions/index.ts#:~:text=ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION) | - | -| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklist_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklist_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID)+ 8 more | - | +| | [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklists_api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID), [blocklist_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_ID)+ 8 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION) | - | | | [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode) | - | @@ -1397,7 +1392,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [api_key_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/api_key_routes.ts#:~:text=authc), [api_key_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/api_key_routes.ts#:~:text=authc), [indices_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/indices_routes.ts#:~:text=authc), [api_key_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/api_key_routes.ts#:~:text=authc), [api_key_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/api_key_routes.ts#:~:text=authc), [indices_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/indices_routes.ts#:~:text=authc) | - | +| | [api_key_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/api_key_routes.ts#:~:text=authc), [api_key_routes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/server/routes/api_key_routes.ts#:~:text=authc) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/serverless_search/public/plugin.ts#:~:text=authc) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 3774f5404b350..e2a11bb37fbee 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -127,9 +127,9 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| -| profiling | | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/components/contexts/license/license_context.tsx#:~:text=license%24), [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/context/license/license_context.tsx#:~:text=license%24) | 8.8.0 | | apm | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/plugin.ts#:~:text=environment) | 8.8.0 | | apm | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | +| apm | | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/context/license/license_context.tsx#:~:text=license%24), [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/profiling/public/components/contexts/license/license_context.tsx#:~:text=license%24) | 8.8.0 | | apm | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 7ed5dceda3de1..b1acedbda0788 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-06-13 +date: 2024-06-17 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 58d201b1bb64b..8d22aab285ac8 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-06-13 +date: 2024-06-17 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 275ecf096f4de..b47659da336f7 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-06-13 +date: 2024-06-17 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 0e06f4f8257a2..21118b394b1f0 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-06-13 +date: 2024-06-17 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 c2523acbddaf5..b5a2b4407a973 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index 73d9cc8d736fc..e543e43a16801 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -1469,6 +1469,21 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.AssistantToolParams.kbDataClient", + "type": "Object", + "tags": [], + "label": "kbDataClient", + "description": [], + "signature": [ + "AIAssistantKnowledgeBaseDataClient", + " | undefined" + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.AssistantToolParams.langChainTimeout", @@ -1502,6 +1517,26 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.AssistantToolParams.logger", + "type": "Object", + "tags": [], + "label": "logger", + "description": [], + "signature": [ + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + } + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.AssistantToolParams.modelExists", diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index be0826c71b5ac..ddefb78f3f8ca 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 46 | 0 | 32 | 0 | +| 48 | 0 | 34 | 1 | ## Server diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index 01c91c22b075e..8c823689d0bd2 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -14041,10 +14041,6 @@ { "plugin": "lens", "path": "x-pack/plugins/lens/public/plugin.ts" - }, - { - "plugin": "maps", - "path": "x-pack/plugins/maps/public/plugin.ts" } ], "returnComment": [], @@ -14294,30 +14290,10 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/plugin.tsx" }, - { - "plugin": "maps", - "path": "x-pack/plugins/maps/public/plugin.ts" - }, { "plugin": "discover", "path": "src/plugins/discover/public/plugin.tsx" }, - { - "plugin": "profiling", - "path": "x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts" - }, - { - "plugin": "profiling", - "path": "x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts" - }, - { - "plugin": "profiling", - "path": "x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts" - }, - { - "plugin": "profiling", - "path": "x-pack/plugins/observability_solution/profiling/public/embeddables/register_embeddables.ts" - }, { "plugin": "links", "path": "src/plugins/links/public/plugin.ts" @@ -14712,14 +14688,6 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx" }, - { - "plugin": "observabilityShared", - "path": "x-pack/plugins/observability_solution/observability_shared/public/components/profiling/embeddables/profiling_embeddable.tsx" - }, - { - "plugin": "observabilityShared", - "path": "x-pack/plugins/observability_solution/observability_shared/public/components/profiling/embeddables/embeddable_profiling_search_bar.tsx" - }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts" diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 2a67af24b5a25..78357e670b1d3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index a2abd8e797bd2..d379600205003 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index f1ebb293e319c..6dc6fa126e5cb 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 700cd27fbaf52..7b9bc0486ac5a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 6d81a453f783f..085d9250db7d2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 25916c3f8496e..72031c874283e 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-06-13 +date: 2024-06-17 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 e6fbd21d3b57c..18f08b3836801 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-06-13 +date: 2024-06-17 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 b9fbb4635a5e2..8f278710bd260 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-06-13 +date: 2024-06-17 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 0be6f12bfe334..f80eb5d14ca36 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-06-13 +date: 2024-06-17 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 16784d6151298..9fb1c4a93b73d 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-06-13 +date: 2024-06-17 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 1a4d098a5ac83..46b2d052a25ee 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index a822b99e82acf..2f6494cdace31 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 758c59a1cdac2..c299a0d3d34ab 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 328b4dbc98023..c0b7995afcb51 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 3add5c4ffbe5a..b3e5312e8410c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 2a6320dfec652..4f2f34f6bbd6e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index eb8aab07505c1..ffa7aae0cf672 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index a76454f966b19..b11b0ba0073d4 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 27b2028b60612..4670ef58d76c5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 03f1674a7fad7..90563de6cee2e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 9494433256d9f..ac420ce8974ed 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 66fbb4e901aa9..6ab9a7d1674ce 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 09c9ad0b7bb3e..39aa22a1e86b9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 3f7a927291981..3a884971b1b90 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 9704358823408..0b4da5be483d7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 04e79322fa00d..cbad887301cc2 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-06-13 +date: 2024-06-17 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 a57347ee66e19..4154fe2cd85f1 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-06-13 +date: 2024-06-17 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 b5268b507d9dd..ace9a985bc18b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 0e697287451f5..5c0bee1ea0c59 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 701caf7d83d9f..2356f96b7cd32 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 738d4bb839fbf..85574cf7f3c98 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 5e896d61a06b3..76624d27343ab 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 2f28848f92f06..8f8c66cf87d7d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index dca2a5d58cfa5..b4abbc90b216f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index e200b545217e7..d23eecf1080b7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index b0a441f339cf0..d07eb6950d5b4 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 12a6e63d42fa2..313b2019871f5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index df0ae2f561d08..5e5e50c45f4ea 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-06-13 +date: 2024-06-17 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 1f0ff78581c21..fb90e61284459 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-06-13 +date: 2024-06-17 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 70e3232083ad6..b950ff6404005 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.devdocs.json b/api_docs/integration_assistant.devdocs.json new file mode 100644 index 0000000000000..d5c5221c93afa --- /dev/null +++ b/api_docs/integration_assistant.devdocs.json @@ -0,0 +1,1005 @@ +{ + "id": "integrationAssistant", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "integrationAssistant", + "id": "def-server.IntegrationAssistantPluginSetup", + "type": "Interface", + "tags": [], + "label": "IntegrationAssistantPluginSetup", + "description": [], + "path": "x-pack/plugins/integration_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "integrationAssistant", + "id": "def-server.IntegrationAssistantPluginStart", + "type": "Interface", + "tags": [], + "label": "IntegrationAssistantPluginStart", + "description": [], + "path": "x-pack/plugins/integration_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.BuildIntegrationApiRequest", + "type": "Interface", + "tags": [], + "label": "BuildIntegrationApiRequest", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.BuildIntegrationApiRequest.integration", + "type": "Object", + "tags": [], + "label": "integration", + "description": [], + "signature": [ + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.Integration", + "text": "Integration" + } + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CategorizationApiRequest", + "type": "Interface", + "tags": [], + "label": "CategorizationApiRequest", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CategorizationApiRequest.packageName", + "type": "string", + "tags": [], + "label": "packageName", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CategorizationApiRequest.dataStreamName", + "type": "string", + "tags": [], + "label": "dataStreamName", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CategorizationApiRequest.rawSamples", + "type": "Array", + "tags": [], + "label": "rawSamples", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CategorizationApiRequest.currentPipeline", + "type": "Uncategorized", + "tags": [], + "label": "currentPipeline", + "description": [], + "signature": [ + "object" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CategorizationApiResponse", + "type": "Interface", + "tags": [], + "label": "CategorizationApiResponse", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CategorizationApiResponse.results", + "type": "Object", + "tags": [], + "label": "results", + "description": [], + "signature": [ + "{ pipeline: object; docs: object[]; }" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream", + "type": "Interface", + "tags": [], + "label": "DataStream", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream.inputTypes", + "type": "Array", + "tags": [], + "label": "inputTypes", + "description": [], + "signature": [ + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.InputTypes", + "text": "InputTypes" + }, + "[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream.rawSamples", + "type": "Array", + "tags": [], + "label": "rawSamples", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream.pipeline", + "type": "Uncategorized", + "tags": [], + "label": "pipeline", + "description": [], + "signature": [ + "object" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.DataStream.docs", + "type": "Array", + "tags": [], + "label": "docs", + "description": [], + "signature": [ + "object[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.EcsMappingApiRequest", + "type": "Interface", + "tags": [], + "label": "EcsMappingApiRequest", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.EcsMappingApiRequest.packageName", + "type": "string", + "tags": [], + "label": "packageName", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.EcsMappingApiRequest.dataStreamName", + "type": "string", + "tags": [], + "label": "dataStreamName", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.EcsMappingApiRequest.rawSamples", + "type": "Array", + "tags": [], + "label": "rawSamples", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.EcsMappingApiRequest.mapping", + "type": "Uncategorized", + "tags": [], + "label": "mapping", + "description": [], + "signature": [ + "object | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.EcsMappingApiResponse", + "type": "Interface", + "tags": [], + "label": "EcsMappingApiResponse", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.EcsMappingApiResponse.results", + "type": "Object", + "tags": [], + "label": "results", + "description": [], + "signature": [ + "{ mapping: object; pipeline: object; }" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorItem", + "type": "Interface", + "tags": [], + "label": "ESProcessorItem", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorItem.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[processorName: string]: ESProcessorOptions", + "description": [], + "signature": [ + "[processorName: string]: ", + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorOptions", + "text": "ESProcessorOptions" + } + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorOptions", + "type": "Interface", + "tags": [], + "label": "ESProcessorOptions", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorOptions.on_failure", + "type": "Array", + "tags": [], + "label": "on_failure", + "description": [], + "signature": [ + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorOptions.ignore_failure", + "type": "CompoundType", + "tags": [], + "label": "ignore_failure", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorOptions.ignore_missing", + "type": "CompoundType", + "tags": [], + "label": "ignore_missing", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorOptions.if", + "type": "string", + "tags": [], + "label": "if", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorOptions.tag", + "type": "string", + "tags": [], + "label": "tag", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ESProcessorOptions.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[key: string]: unknown", + "description": [], + "signature": [ + "[key: string]: unknown" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Integration", + "type": "Interface", + "tags": [], + "label": "Integration", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Integration.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Integration.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Integration.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Integration.dataStreams", + "type": "Array", + "tags": [], + "label": "dataStreams", + "description": [], + "signature": [ + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.DataStream", + "text": "DataStream" + }, + "[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Integration.logo", + "type": "string", + "tags": [], + "label": "logo", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Pipeline", + "type": "Interface", + "tags": [], + "label": "Pipeline", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Pipeline.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Pipeline.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Pipeline.version", + "type": "number", + "tags": [], + "label": "version", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Pipeline.processors", + "type": "Array", + "tags": [], + "label": "processors", + "description": [], + "signature": [ + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.Pipeline.on_failure", + "type": "Array", + "tags": [], + "label": "on_failure", + "description": [], + "signature": [ + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.ESProcessorItem", + "text": "ESProcessorItem" + }, + "[] | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RelatedApiRequest", + "type": "Interface", + "tags": [], + "label": "RelatedApiRequest", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RelatedApiRequest.packageName", + "type": "string", + "tags": [], + "label": "packageName", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RelatedApiRequest.dataStreamName", + "type": "string", + "tags": [], + "label": "dataStreamName", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RelatedApiRequest.rawSamples", + "type": "Array", + "tags": [], + "label": "rawSamples", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RelatedApiRequest.currentPipeline", + "type": "Uncategorized", + "tags": [], + "label": "currentPipeline", + "description": [], + "signature": [ + "object" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RelatedApiResponse", + "type": "Interface", + "tags": [], + "label": "RelatedApiResponse", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RelatedApiResponse.results", + "type": "Object", + "tags": [], + "label": "results", + "description": [], + "signature": [ + "{ pipeline: object; docs: object[]; }" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.TestPipelineApiRequest", + "type": "Interface", + "tags": [], + "label": "TestPipelineApiRequest", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.TestPipelineApiRequest.rawSamples", + "type": "Array", + "tags": [], + "label": "rawSamples", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.TestPipelineApiRequest.currentPipeline", + "type": "Object", + "tags": [], + "label": "currentPipeline", + "description": [], + "signature": [ + { + "pluginId": "integrationAssistant", + "scope": "common", + "docId": "kibIntegrationAssistantPluginApi", + "section": "def-common.Pipeline", + "text": "Pipeline" + } + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.TestPipelineApiResponse", + "type": "Interface", + "tags": [], + "label": "TestPipelineApiResponse", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.TestPipelineApiResponse.pipelineResults", + "type": "Array", + "tags": [], + "label": "pipelineResults", + "description": [], + "signature": [ + "object[]" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.TestPipelineApiResponse.errors", + "type": "Array", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + "object[] | undefined" + ], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.InputTypes", + "type": "Enum", + "tags": [], + "label": "InputTypes", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.CATEGORIZATION_GRAPH_PATH", + "type": "string", + "tags": [], + "label": "CATEGORIZATION_GRAPH_PATH", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ECS_GRAPH_PATH", + "type": "string", + "tags": [], + "label": "ECS_GRAPH_PATH", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.INTEGRATION_ASSISTANT_APP_ROUTE", + "type": "string", + "tags": [], + "label": "INTEGRATION_ASSISTANT_APP_ROUTE", + "description": [], + "signature": [ + "\"/app/integration_assistant\"" + ], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.INTEGRATION_ASSISTANT_BASE_PATH", + "type": "string", + "tags": [], + "label": "INTEGRATION_ASSISTANT_BASE_PATH", + "description": [], + "signature": [ + "\"/api/integration_assistant\"" + ], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.INTEGRATION_BUILDER_PATH", + "type": "string", + "tags": [], + "label": "INTEGRATION_BUILDER_PATH", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.PLUGIN_ID", + "type": "string", + "tags": [], + "label": "PLUGIN_ID", + "description": [], + "signature": [ + "\"integrationAssistant\"" + ], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.RELATED_GRAPH_PATH", + "type": "string", + "tags": [], + "label": "RELATED_GRAPH_PATH", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.TEST_PIPELINE_PATH", + "type": "string", + "tags": [], + "label": "TEST_PIPELINE_PATH", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx new file mode 100644 index 0000000000000..bb862840a8d1d --- /dev/null +++ b/api_docs/integration_assistant.mdx @@ -0,0 +1,44 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibIntegrationAssistantPluginApi +slug: /kibana-dev-docs/api/integrationAssistant +title: "integrationAssistant" +image: https://source.unsplash.com/400x175/?github +description: API docs for the integrationAssistant plugin +date: 2024-06-17 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] +--- +import integrationAssistantObj from './integration_assistant.devdocs.json'; + +A simple example of how to use core's routing services test + +Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 69 | 0 | 69 | 0 | + +## Server + +### Setup + + +### Start + + +## Common + +### Interfaces + + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index f7884d8f14574..ec0a89a966912 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.devdocs.json b/api_docs/investigate.devdocs.json index aef706f884292..62e0f33e3181e 100644 --- a/api_docs/investigate.devdocs.json +++ b/api_docs/investigate.devdocs.json @@ -942,7 +942,13 @@ "description": [], "signature": [ ">(definition: Omit & { schema: TSchema; }, generateCallback: GenerateCallback, renderCallback: (options: WidgetRenderOptions<", { "pluginId": "investigate", @@ -981,7 +987,13 @@ "description": [], "signature": [ "(options: { parameters: (TSchema extends ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, " ? ", "node_modules/ts-algebra/lib/meta-types/resolve", "$Resolve<", @@ -8350,7 +8362,13 @@ "description": [], "signature": [ "{ parameters: (TSchema extends ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, " ? any : {}) & ", "GlobalWidgetParameters", "; signal: AbortSignal; }" diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index aa8a8d7e0c2cc..4d93088efa878 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index be45c74bb51c3..7ce881579a5a7 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-06-13 +date: 2024-06-17 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 2f22b98287ceb..b02a2a9d21a6a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.devdocs.json b/api_docs/kbn_aiops_components.devdocs.json index 17ce5708ee83a..419bdbb09aee1 100644 --- a/api_docs/kbn_aiops_components.devdocs.json +++ b/api_docs/kbn_aiops_components.devdocs.json @@ -76,31 +76,26 @@ }, { "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartWithAutoAnalysisStart", + "id": "def-common.DocumentCountChartRedux", "type": "Function", "tags": [], - "label": "DocumentCountChartWithAutoAnalysisStart", + "label": "DocumentCountChartRedux", "description": [ - "\nFunctional component that renders a `DocumentCountChart` with additional properties\nmanaged by the log rate analysis state. It leverages the `useLogRateAnalysisStateContext`\nto acquire state variables like `initialAnalysisStart` and functions such as\n`setAutoRunAnalysis`. These values are then passed as props to the `DocumentCountChart`.\n" + "\nFunctional component that renders a `DocumentCountChart` with additional properties\nmanaged by the log rate analysis state. It leverages the `LogRateAnalysisReduxProvider`\nto acquire state variables like `initialAnalysisStart` and functions such as\n`setAutoRunAnalysis`. These values are then passed as props to the `DocumentCountChart`.\nThis wrapper component is necessary since the `DocumentCountChart` component is\nalso used for log pattern analysis which doesn't use redux.\n" ], "signature": [ - "(props: React.PropsWithChildren<", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.DocumentCountChartProps", - "text": "DocumentCountChartProps" - }, - ">) => JSX.Element" + "React.FunctionComponent" ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart_redux.tsx", "deprecated": false, "trackAdoption": false, + "returnComment": [ + "The DocumentCountChart component enhanced with automatic analysis start capabilities." + ], "children": [ { "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartWithAutoAnalysisStart.$1", + "id": "def-common.DocumentCountChartRedux.$1", "type": "CompoundType", "tags": [], "label": "props", @@ -108,25 +103,27 @@ "- The properties passed to the DocumentCountChart component." ], "signature": [ - "React.PropsWithChildren<", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.DocumentCountChartProps", - "text": "DocumentCountChartProps" - }, - ">" + "P & { children?: React.ReactNode; }" ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "path": "node_modules/@types/react/index.d.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.DocumentCountChartRedux.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false } ], - "returnComment": [ - "The DocumentCountChart component enhanced with automatic analysis start capabilities." - ], "initialIsOpen": false }, { @@ -207,45 +204,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.LogRateAnalysisStateProvider", - "type": "Function", - "tags": [], - "label": "LogRateAnalysisStateProvider", - "description": [ - "\nContext provider component that manages and provides global state for Log Rate Analysis.\nThis provider handles several pieces of state important for controlling and displaying\nlog rate analysis data, such as the control of automatic analysis runs, and the management\nof both pinned and selected significant items and groups.\n\nThe state includes mechanisms for setting initial analysis parameters, toggling analysis,\nand managing the current selection and pinned state of significant items and groups.\n" - ], - "signature": [ - "(props: React.PropsWithChildren>) => JSX.Element" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.LogRateAnalysisStateProvider.$1", - "type": "CompoundType", - "tags": [], - "label": "props", - "description": [ - "- Props object containing initial settings for the analysis,\nincluding children components to be wrapped by the Provider." - ], - "signature": [ - "React.PropsWithChildren>" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [ - "A context provider wrapping children with access to log rate analysis state." - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/aiops-components", "id": "def-common.ProgressControls", @@ -253,7 +211,7 @@ "tags": [], "label": "ProgressControls", "description": [ - "\nProgressControls React Component\nComponent with ability to Run & cancel analysis\nby default uses `Baseline` and `Deviation` for the badge name\n" + "\nProgressControls React Component\nComponent with ability to run & cancel analysis\nby default uses `Baseline` and `Deviation` for the badge name\n" ], "signature": [ "(props: React.PropsWithChildren>) => JSX.Element" @@ -284,29 +242,6 @@ "The ProgressControls component." ], "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.useLogRateAnalysisStateContext", - "type": "Function", - "tags": [ - "throws" - ], - "label": "useLogRateAnalysisStateContext", - "description": [ - "\nCustom hook for accessing the state of log rate analysis from the LogRateAnalysisStateContext.\nThis hook must be used within a component that is a descendant of the LogRateAnalysisStateContext provider.\n" - ], - "signature": [ - "() => LogRateAnalysisState" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/log_rate_analysis_state_provider.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [ - "The current state of the log rate analysis." - ], - "initialIsOpen": false } ], "interfaces": [ @@ -448,14 +383,7 @@ "Optional callback for handling brush selection updates" ], "signature": [ - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.BrushSelectionUpdateHandler", - "text": "BrushSelectionUpdateHandler" - }, - " | undefined" + "BrushSelectionUpdateHandler | undefined" ], "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", "deprecated": false, @@ -606,10 +534,10 @@ }, { "parentPluginId": "@kbn/aiops-components", - "id": "def-common.DocumentCountChartProps.setAutoRunAnalysis", + "id": "def-common.DocumentCountChartProps.setAutoRunAnalysisFn", "type": "Function", "tags": [], - "label": "setAutoRunAnalysis", + "label": "setAutoRunAnalysisFn", "description": [ "Callback to set the autoRunAnalysis flag" ], @@ -780,387 +708,10 @@ } ], "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItem", - "type": "Interface", - "tags": [], - "label": "GroupTableItem", - "description": [ - "\nRepresents a single item in the group table." - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItem.id", - "type": "string", - "tags": [], - "label": "id", - "description": [ - "Unique identifier for the group table item." - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItem.docCount", - "type": "number", - "tags": [], - "label": "docCount", - "description": [ - "Document count associated with the item." - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItem.pValue", - "type": "CompoundType", - "tags": [], - "label": "pValue", - "description": [ - "Statistical p-value indicating the significance of the item, nullable." - ], - "signature": [ - "number | null" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItem.uniqueItemsCount", - "type": "number", - "tags": [], - "label": "uniqueItemsCount", - "description": [ - "Count of unique items within the group." - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItem.groupItemsSortedByUniqueness", - "type": "Array", - "tags": [], - "label": "groupItemsSortedByUniqueness", - "description": [ - "Array of items within the group, sorted by uniqueness." - ], - "signature": [ - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItemGroup", - "text": "GroupTableItemGroup" - }, - "[]" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItem.histogram", - "type": "Array", - "tags": [], - "label": "histogram", - "description": [ - "Histogram data for the significant item." - ], - "signature": [ - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItemHistogramItem", - "text": "SignificantItemHistogramItem" - }, - "[] | undefined" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false } ], "enums": [], - "misc": [ - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.BrushSelectionUpdateHandler", - "type": "Type", - "tags": [], - "label": "BrushSelectionUpdateHandler", - "description": [ - "\nCallback function which gets called when the brush selection has changed\n" - ], - "signature": [ - "(windowParameters: ", - { - "pluginId": "@kbn/aiops-log-rate-analysis", - "scope": "common", - "docId": "kibKbnAiopsLogRateAnalysisPluginApi", - "section": "def-common.WindowParameters", - "text": "WindowParameters" - }, - ", force: boolean, logRateAnalysisType: ", - { - "pluginId": "@kbn/aiops-log-rate-analysis", - "scope": "common", - "docId": "kibKbnAiopsLogRateAnalysisPluginApi", - "section": "def-common.LogRateAnalysisType", - "text": "LogRateAnalysisType" - }, - ") => void" - ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.BrushSelectionUpdateHandler.$1", - "type": "Object", - "tags": [], - "label": "windowParameters", - "description": [ - "Baseline and deviation time ranges." - ], - "signature": [ - { - "pluginId": "@kbn/aiops-log-rate-analysis", - "scope": "common", - "docId": "kibKbnAiopsLogRateAnalysisPluginApi", - "section": "def-common.WindowParameters", - "text": "WindowParameters" - } - ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.BrushSelectionUpdateHandler.$2", - "type": "boolean", - "tags": [], - "label": "force", - "description": [ - "Force update" - ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.BrushSelectionUpdateHandler.$3", - "type": "CompoundType", - "tags": [], - "label": "logRateAnalysisType", - "description": [ - "`spike` or `dip` based on median log rate bucket size" - ], - "signature": [ - "\"spike\" | \"dip\"" - ], - "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.GroupTableItemGroup", - "type": "Type", - "tags": [], - "label": "GroupTableItemGroup", - "description": [ - "\nType for defining attributes picked from\nSignificantItemGroupItem used in the grouped table." - ], - "signature": [ - "{ key: string; type: ", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItemType", - "text": "SignificantItemType" - }, - "; fieldName: string; fieldValue: string | number; docCount: number; pValue: number | null; duplicate?: number | undefined; }" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/aiops-components", - "id": "def-common.TableItemAction", - "type": "Type", - "tags": [], - "label": "TableItemAction", - "description": [ - "\nType for action columns in a table that involves SignificantItem or GroupTableItem." - ], - "signature": [ - "(", - "DisambiguateSet", - "<", - "DefaultItemEmptyButtonAction", - "<", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItem", - "text": "SignificantItem" - }, - " | ", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItem", - "text": "GroupTableItem" - }, - ">, ", - "DefaultItemIconButtonAction", - "<", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItem", - "text": "SignificantItem" - }, - " | ", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItem", - "text": "GroupTableItem" - }, - ">> & ", - "DefaultItemIconButtonAction", - "<", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItem", - "text": "SignificantItem" - }, - " | ", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItem", - "text": "GroupTableItem" - }, - ">) | (", - "DisambiguateSet", - "<", - "DefaultItemIconButtonAction", - "<", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItem", - "text": "SignificantItem" - }, - " | ", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItem", - "text": "GroupTableItem" - }, - ">, ", - "DefaultItemEmptyButtonAction", - "<", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItem", - "text": "SignificantItem" - }, - " | ", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItem", - "text": "GroupTableItem" - }, - ">> & ", - "DefaultItemEmptyButtonAction", - "<", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItem", - "text": "SignificantItem" - }, - " | ", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItem", - "text": "GroupTableItem" - }, - ">) | ", - "CustomItemAction", - "<", - { - "pluginId": "@kbn/ml-agg-utils", - "scope": "common", - "docId": "kibKbnMlAggUtilsPluginApi", - "section": "def-common.SignificantItem", - "text": "SignificantItem" - }, - " | ", - { - "pluginId": "@kbn/aiops-components", - "scope": "common", - "docId": "kibKbnAiopsComponentsPluginApi", - "section": "def-common.GroupTableItem", - "text": "GroupTableItem" - }, - ">" - ], - "path": "x-pack/packages/ml/aiops_components/src/log_rate_analysis_state_provider/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "misc": [], "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 95373fb6e2cda..e1a8e798f160c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.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 | |-------------------|-----------|------------------------|-----------------| -| 51 | 0 | 0 | 0 | +| 36 | 0 | 0 | 0 | ## Common @@ -31,6 +31,3 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi ### Interfaces -### Consts, variables and types - - diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index c888f895cbe1f..72eede9d9fd82 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-06-13 +date: 2024-06-17 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.devdocs.json b/api_docs/kbn_aiops_log_rate_analysis.devdocs.json index 65a592c44fd56..011aa430f7194 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.devdocs.json +++ b/api_docs/kbn_aiops_log_rate_analysis.devdocs.json @@ -577,6 +577,138 @@ } ], "interfaces": [ + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats", + "type": "Interface", + "tags": [], + "label": "DocumentCountStats", + "description": [ + "\nRepresents the document count statistics for a given time range." + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats.interval", + "type": "number", + "tags": [], + "label": "interval", + "description": [ + "The time interval in milliseconds." + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats.buckets", + "type": "Object", + "tags": [], + "label": "buckets", + "description": [ + "The document count per time bucket." + ], + "signature": [ + "{ [key: string]: number; } | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats.changePoint", + "type": "Object", + "tags": [], + "label": "changePoint", + "description": [ + "The change point in the document count statistics." + ], + "signature": [ + { + "pluginId": "@kbn/aiops-log-rate-analysis", + "scope": "common", + "docId": "kibKbnAiopsLogRateAnalysisPluginApi", + "section": "def-common.DocumentCountStatsChangePoint", + "text": "DocumentCountStatsChangePoint" + }, + " | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats.timeRangeEarliest", + "type": "number", + "tags": [], + "label": "timeRangeEarliest", + "description": [ + "The earliest timestamp in the time range." + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats.timeRangeLatest", + "type": "number", + "tags": [], + "label": "timeRangeLatest", + "description": [ + "The latest timestamp in the time range." + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats.totalCount", + "type": "number", + "tags": [], + "label": "totalCount", + "description": [ + "The total document count." + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentCountStats.lastDocTimeStampMs", + "type": "number", + "tags": [], + "label": "lastDocTimeStampMs", + "description": [ + "The timestamp of the last document in the time range." + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/aiops-log-rate-analysis", "id": "def-common.DocumentCountStatsChangePoint", @@ -645,6 +777,94 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentStats", + "type": "Interface", + "tags": [], + "label": "DocumentStats", + "description": [ + "\nRepresents the overall document stats." + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentStats.sampleProbability", + "type": "number", + "tags": [], + "label": "sampleProbability", + "description": [ + "The probability of sampling." + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentStats.totalCount", + "type": "number", + "tags": [], + "label": "totalCount", + "description": [ + "The total document count." + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentStats.documentCountStats", + "type": "Object", + "tags": [], + "label": "documentCountStats", + "description": [ + "The document count statistics." + ], + "signature": [ + { + "pluginId": "@kbn/aiops-log-rate-analysis", + "scope": "common", + "docId": "kibKbnAiopsLogRateAnalysisPluginApi", + "section": "def-common.DocumentCountStats", + "text": "DocumentCountStats" + }, + " | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-log-rate-analysis", + "id": "def-common.DocumentStats.documentCountStatsCompare", + "type": "Object", + "tags": [], + "label": "documentCountStatsCompare", + "description": [ + "The document count statistics for comparison." + ], + "signature": [ + { + "pluginId": "@kbn/aiops-log-rate-analysis", + "scope": "common", + "docId": "kibKbnAiopsLogRateAnalysisPluginApi", + "section": "def-common.DocumentCountStats", + "text": "DocumentCountStats" + }, + " | undefined" + ], + "path": "x-pack/packages/ml/aiops_log_rate_analysis/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/aiops-log-rate-analysis", "id": "def-common.LogRateHistogramItem", diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index ba450f4178b78..b6589e7e5c8a6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.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 | |-------------------|-----------|------------------------|-----------------| -| 41 | 0 | 0 | 0 | +| 54 | 0 | 0 | 0 | ## Common diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 6ed1da810eaac..b30d9b247986a 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-06-13 +date: 2024-06-17 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 d62a975f99c9a..3ff7cd7b524ea 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-06-13 +date: 2024-06-17 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 985991a25399f..59f71bb7d06a4 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-06-13 +date: 2024-06-17 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 217cce556434f..1fa5967e92c76 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-06-13 +date: 2024-06-17 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 9a51a104d90cc..0f54660851da3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 573c2513a5a96..6a8ace9a32049 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index e9a3b077b68cc..f61a72c328c9f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 44ac84f58b11d..d5245aeb10e6b 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -756,7 +756,7 @@ }, { "plugin": "observabilityAIAssistant", - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts" + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/recall_and_score.ts" }, { "plugin": "observabilityAIAssistant", @@ -860,19 +860,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upload_csv.ts" + "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upload_csv.ts" - }, - { - "plugin": "reporting", - "path": "x-pack/plugins/reporting/server/usage/event_tracker.ts" - }, - { - "plugin": "searchPlayground", - "path": "x-pack/plugins/search_playground/server/routes.ts" + "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_client.ts" }, { "plugin": "securitySolution", @@ -980,11 +972,19 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_client.ts" + "path": "x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upload_csv.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/lib/telemetry/telemetry_client.ts" + "path": "x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upload_csv.ts" + }, + { + "plugin": "reporting", + "path": "x-pack/plugins/reporting/server/usage/event_tracker.ts" + }, + { + "plugin": "searchPlayground", + "path": "x-pack/plugins/search_playground/server/routes.ts" }, { "plugin": "securitySolutionServerless", diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 6fb2b3530f44c..f9e06eed6bb64 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 6f9d8ee621f45..fc3bb389ac23d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 9d8807bc8e2e0..8a10802899033 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 44ffe7ea94782..555450cec3ae8 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 3b85acfc972ea..64e8755f22ef9 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index d3af81f5e13a1..7ff9f68c236d5 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index d557dd1b070bf..bfdfd2f4f74c5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index b86e9b7d37c07..42348387533e9 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-06-13 +date: 2024-06-17 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 efa693a33755f..27d6759bd2561 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index e3bb01a20c729..9f40bdce1dbdc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index b5f3dd755d16b..4763291740a71 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index f1ba0580f3601..2f3bee6b0080b 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-06-13 +date: 2024-06-17 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 8e5534d0bb36a..c616928926410 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-06-13 +date: 2024-06-17 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 49732f40aeca3..92dc69482554b 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-06-13 +date: 2024-06-17 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 cc85b1eb4a50c..4f2c217badd05 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-06-13 +date: 2024-06-17 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 46f7badba301a..113c5038fcdd3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index c085c830410c7..23dab4eb264dd 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 403df8061b0ea..e4b859e84188f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index b1498a2e75b4a..36c62cf75e461 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index f8bafd953494f..af73a6f2672b0 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 8625d491db5cd..4aa785c60d7f2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 332f2acba2e81..5e7638dad0389 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 40e5a40187f17..a47825df146d7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 9b086c8e12bc2..f0f1803d1d9fc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 86afe0a9a8545..2c0792fd28f0f 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-06-13 +date: 2024-06-17 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 865a41447d44b..3517204bd45b1 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-06-13 +date: 2024-06-17 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 174d74dca7b49..3b1af9d2a8170 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index ce4648a0f44fc..6502279e9947e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index b3278c7a8a76a..dcaaa854f0382 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 88add940c27da..3d675e06d2fcc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 5480a0a053182..f60a3981386a2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index d73dbffa6b18b..8a4e4c5955ef6 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-06-13 +date: 2024-06-17 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 70e85ac6a0fb0..36028ba05cfa8 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-06-13 +date: 2024-06-17 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 88e3de085f45f..805f07c38bf79 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-06-13 +date: 2024-06-17 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 b90cd82658cef..ee635383e39cd 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index c73947a87184d..20536a7d3bad8 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 44c5e006c33c2..54ae0bad6081e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 7bd0251b44371..edfc4a38ef36f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 08baa19549814..1118dc0bff1c0 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 389a03f16c86e..8b08b6e8f6004 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index cb6e1c0444d43..4afef1d927b97 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 47c123ff87639..eccfc56adb329 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 0bc8e97f68397..60950431b91bf 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index b69644e2f15ff..65de855ca3ee7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 3e1e324e7d17e..a8da82ee1bef5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 2585fa227499f..24f0cfed4a457 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 89cbfa83bb000..6028c3344a776 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 1dee349936dfe..a56db7522934e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 0928f1ae445ad..4ff38183b9eac 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 4fee734abf2ec..aaef90a451f78 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index b9f365074c7a8..bfdd1e2df9b27 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index a86782b2a01e9..8e7da7d8d609e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 6229b56eb8cd5..d8c8bba1ba479 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 73930b917208c..b838e24edeea9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index a6dffd50b26f4..20fc610aa4381 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index c52ca1548df46..4d5af3e83a817 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index f381caf67c0e6..5cba8debee929 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index 0cc31110a2fb6..3972f64135013 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3716,7 +3716,7 @@ "label": "AppDeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"metrics\" | \"management\" | \"synthetics\" | \"ux\" | \"apm\" | \"logs\" | \"profiling\" | \"dashboards\" | \"observabilityAIAssistant\" | \"home\" | \"canvas\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"searchPlayground\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"observability-logs-explorer\" | \"observabilityOnboarding\" | \"slo\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:services\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"profiling:functions\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\" | \"fleet:agents\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"metrics\" | \"management\" | \"synthetics\" | \"ux\" | \"apm\" | \"logs\" | \"profiling\" | \"dashboards\" | \"observabilityAIAssistant\" | \"home\" | \"canvas\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"observability-logs-explorer\" | \"observabilityOnboarding\" | \"slo\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:services\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"profiling:functions\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\" | \"fleet:agents\"" ], "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", "deprecated": false, diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 319eb15868e7d..687bbc4fe712e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index 2083bbbe09be1..c25ff5885aa26 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 34b5fae4bd912..f774814ff20f3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index f8978dda69265..0a3ed60dd03cf 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 6481c7766a6fb..e272909a893d1 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 8e3b02c4af1e1..67938b5aa490c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index db9112685591f..545d7ac729623 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 6ded0d35030d9..bc6a970b2a23c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 0f815f37424a7..c786d9af3f46e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index b41408e9376eb..d6598828b3dad 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index ec500a57f8647..b105bd2524d97 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index d25522315c4d2..6acaff9e71065 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 10d5f9dde4d87..fb76520008b47 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 3e5d8ca6e1542..5474924b12a23 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 1769e5c0e70f8..bfaac5d4c2911 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index 4a9623c304d25..d9897bcbb6457 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 2c04e6c8d6f49..6ee40f9d97e54 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 2b0ddd69f48e4..634e3f9e13374 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index 722103b6b2818..24926823d958b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 16cf3e0c0d18b..487937b9b0f28 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index c48933074df7a..588c1dda6a075 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index 757981490d5be..0714d977d7c3a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json b/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json index 28d341d687694..bbbd204ac49d6 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json @@ -3689,6 +3689,1133 @@ "path": "packages/core/elasticsearch/core-elasticsearch-client-server-mocks/src/mocks.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-elasticsearch-client-server-mocks", + "id": "def-common.ScopedClusterClientMock.asSecondaryAuthUser", + "type": "CompoundType", + "tags": [], + "label": "asSecondaryAuthUser", + "description": [], + "signature": [ + "{ create: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "CreateRequest", + " | ", + "CreateRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; update: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params: ", + "UpdateRequest", + " | ", + "UpdateRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; get: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params: ", + "GetRequest", + " | ", + "GetRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; delete: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "DeleteRequest", + " | ", + "DeleteRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; helpers: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; search: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; child: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + "<", + "default", + ", [opts: ", + "ClientOptions", + "]>; asyncSearch: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; autoscaling: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; bulk: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "BulkRequest", + " | ", + "BulkRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; cat: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; ccr: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; clearScroll: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "ClearScrollRequest", + " | ", + "ClearScrollRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; closePointInTime: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "ClosePointInTimeRequest", + " | ", + "ClosePointInTimeRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; cluster: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; count: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "CountRequest", + " | ", + "CountRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; danglingIndices: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; deleteByQuery: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "DeleteByQueryRequest", + " | ", + "DeleteByQueryRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; deleteByQueryRethrottle: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "DeleteByQueryRethrottleRequest", + " | ", + "DeleteByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; deleteScript: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "DeleteScriptRequest", + " | ", + "DeleteScriptRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; enrich: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; eql: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; esql: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; exists: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "ExistsRequest", + " | ", + "ExistsRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; existsSource: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "ExistsSourceRequest", + " | ", + "ExistsSourceRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; explain: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params: ", + "ExplainRequest", + " | ", + "ExplainRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; features: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; fieldCaps: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "FieldCapsRequest", + " | ", + "FieldCapsRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; fleet: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; getScript: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "GetScriptRequest", + " | ", + "GetScriptRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; getScriptContext: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "GetScriptContextRequest", + " | ", + "GetScriptContextRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; getScriptLanguages: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "GetScriptLanguagesRequest", + " | ", + "GetScriptLanguagesRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; getSource: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "GetSourceRequest", + " | ", + "GetSourceRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; graph: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; healthReport: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "HealthReportRequest", + " | ", + "HealthReportRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; ilm: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; index: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "IndexRequest", + " | ", + "IndexRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; indices: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; inference: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; info: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "InfoRequest", + " | ", + "InfoRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; ingest: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; knnSearch: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params: ", + "KnnSearchRequest", + " | ", + "KnnSearchRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; license: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; logstash: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; mget: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "MgetRequest", + " | ", + "MgetRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; migration: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; ml: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; monitoring: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; msearch: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params: ", + "MsearchRequest", + " | ", + "MsearchRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; msearchTemplate: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params: ", + "MsearchTemplateRequest", + " | ", + "MsearchTemplateRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; mtermvectors: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "MtermvectorsRequest", + " | ", + "MtermvectorsRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; nodes: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; openPointInTime: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "OpenPointInTimeRequest", + " | ", + "OpenPointInTimeRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; ping: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "PingRequest", + " | ", + "PingRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; putScript: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "PutScriptRequest", + " | ", + "PutScriptRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; queryRuleset: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; rankEval: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "RankEvalRequest", + " | ", + "RankEvalRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; reindex: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "ReindexRequest", + " | ", + "ReindexRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; reindexRethrottle: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "ReindexRethrottleRequest", + " | ", + "ReindexRethrottleRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; renderSearchTemplate: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "RenderSearchTemplateRequest", + " | ", + "RenderSearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; rollup: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; scriptsPainlessExecute: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "ScriptsPainlessExecuteRequest", + " | ", + "ScriptsPainlessExecuteRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; scroll: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params: ", + "ScrollRequest", + " | ", + "ScrollRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; searchApplication: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; searchMvt: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "SearchMvtRequest", + " | ", + "SearchMvtRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; searchShards: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params?: ", + "SearchShardsRequest", + " | ", + "SearchShardsRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; searchTemplate: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "SearchTemplateRequest", + " | ", + "SearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; searchableSnapshots: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; security: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; shutdown: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; slm: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; snapshot: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; sql: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; ssl: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; synonyms: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; tasks: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; termsEnum: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "TermsEnumRequest", + " | ", + "TermsEnumRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; termvectors: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "TermvectorsRequest", + " | ", + "TermvectorsRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; textStructure: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; transform: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; updateByQuery: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "UpdateByQueryRequest", + " | ", + "UpdateByQueryRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; updateByQueryRethrottle: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ", [params: ", + "UpdateByQueryRethrottleRequest", + " | ", + "UpdateByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined]>; watcher: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; xpack: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; } & ", + { + "pluginId": "@kbn/core-elasticsearch-server", + "scope": "common", + "docId": "kibKbnCoreElasticsearchServerPluginApi", + "section": "def-common.ElasticsearchClient", + "text": "ElasticsearchClient" + } + ], + "path": "packages/core/elasticsearch/core-elasticsearch-client-server-mocks/src/mocks.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index f71ecf63b24f4..0b86a9c512fde 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 37 | 1 | 33 | 0 | +| 38 | 1 | 34 | 0 | ## Common diff --git a/api_docs/kbn_core_elasticsearch_server.devdocs.json b/api_docs/kbn_core_elasticsearch_server.devdocs.json index 64ddba82e0850..7f68422b77181 100644 --- a/api_docs/kbn_core_elasticsearch_server.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server.devdocs.json @@ -4044,6 +4044,1244 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-elasticsearch-server", + "id": "def-common.IScopedClusterClient.asSecondaryAuthUser", + "type": "Object", + "tags": [], + "label": "asSecondaryAuthUser", + "description": [ + "\nA {@link ElasticsearchClient | client} to be used to query the elasticsearch cluster\nwith the internal Kibana user as primary auth and the current user as secondary auth\n(using the `es-secondary-authorization` header).\n\nNote that only a subset of Elasticsearch APIs support secondary authentication, and that only those endpoints\nshould be called with this client." + ], + "signature": [ + "{ create: { (this: That, params: ", + "CreateRequest", + " | ", + "CreateRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "WriteResponseBase", + ">; (this: That, params: ", + "CreateRequest", + " | ", + "CreateRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "WriteResponseBase", + ", unknown>>; (this: That, params: ", + "CreateRequest", + " | ", + "CreateRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "WriteResponseBase", + ">; }; update: { (this: That, params: ", + "UpdateRequest", + " | ", + "UpdateRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "UpdateResponse", + ">; (this: That, params: ", + "UpdateRequest", + " | ", + "UpdateRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "UpdateResponse", + ", unknown>>; (this: That, params: ", + "UpdateRequest", + " | ", + "UpdateRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "UpdateResponse", + ">; }; get: { (this: That, params: ", + "GetRequest", + " | ", + "GetRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "GetResponse", + ">; (this: That, params: ", + "GetRequest", + " | ", + "GetRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "GetResponse", + ", unknown>>; (this: That, params: ", + "GetRequest", + " | ", + "GetRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "GetResponse", + ">; }; delete: { (this: That, params: ", + "DeleteRequest", + " | ", + "DeleteRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "WriteResponseBase", + ">; (this: That, params: ", + "DeleteRequest", + " | ", + "DeleteRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "WriteResponseBase", + ", unknown>>; (this: That, params: ", + "DeleteRequest", + " | ", + "DeleteRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "WriteResponseBase", + ">; }; helpers: ", + "default", + "; search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", + "default", + "; child: (opts: ", + "ClientOptions", + ") => ", + "default", + "; asyncSearch: ", + "default", + "; autoscaling: ", + "default", + "; bulk: { (this: That, params: ", + "BulkRequest", + " | ", + "BulkRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "BulkResponse", + ">; (this: That, params: ", + "BulkRequest", + " | ", + "BulkRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "BulkResponse", + ", unknown>>; (this: That, params: ", + "BulkRequest", + " | ", + "BulkRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "BulkResponse", + ">; }; cat: ", + "default", + "; ccr: ", + "default", + "; clearScroll: { (this: That, params?: ", + "ClearScrollRequest", + " | ", + "ClearScrollRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "ClearScrollResponse", + ">; (this: That, params?: ", + "ClearScrollRequest", + " | ", + "ClearScrollRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "ClearScrollResponse", + ", unknown>>; (this: That, params?: ", + "ClearScrollRequest", + " | ", + "ClearScrollRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "ClearScrollResponse", + ">; }; closePointInTime: { (this: That, params: ", + "ClosePointInTimeRequest", + " | ", + "ClosePointInTimeRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "ClosePointInTimeResponse", + ">; (this: That, params: ", + "ClosePointInTimeRequest", + " | ", + "ClosePointInTimeRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "ClosePointInTimeResponse", + ", unknown>>; (this: That, params: ", + "ClosePointInTimeRequest", + " | ", + "ClosePointInTimeRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "ClosePointInTimeResponse", + ">; }; cluster: ", + "default", + "; count: { (this: That, params?: ", + "CountRequest", + " | ", + "CountRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "CountResponse", + ">; (this: That, params?: ", + "CountRequest", + " | ", + "CountRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "CountResponse", + ", unknown>>; (this: That, params?: ", + "CountRequest", + " | ", + "CountRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "CountResponse", + ">; }; danglingIndices: ", + "default", + "; deleteByQuery: { (this: That, params: ", + "DeleteByQueryRequest", + " | ", + "DeleteByQueryRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "DeleteByQueryResponse", + ">; (this: That, params: ", + "DeleteByQueryRequest", + " | ", + "DeleteByQueryRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "DeleteByQueryResponse", + ", unknown>>; (this: That, params: ", + "DeleteByQueryRequest", + " | ", + "DeleteByQueryRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "DeleteByQueryResponse", + ">; }; deleteByQueryRethrottle: { (this: That, params: ", + "DeleteByQueryRethrottleRequest", + " | ", + "DeleteByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "TasksTaskListResponseBase", + ">; (this: That, params: ", + "DeleteByQueryRethrottleRequest", + " | ", + "DeleteByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "TasksTaskListResponseBase", + ", unknown>>; (this: That, params: ", + "DeleteByQueryRethrottleRequest", + " | ", + "DeleteByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "TasksTaskListResponseBase", + ">; }; deleteScript: { (this: That, params: ", + "DeleteScriptRequest", + " | ", + "DeleteScriptRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "AcknowledgedResponseBase", + ">; (this: That, params: ", + "DeleteScriptRequest", + " | ", + "DeleteScriptRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "AcknowledgedResponseBase", + ", unknown>>; (this: That, params: ", + "DeleteScriptRequest", + " | ", + "DeleteScriptRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "AcknowledgedResponseBase", + ">; }; enrich: ", + "default", + "; eql: ", + "default", + "; esql: ", + "default", + "; exists: { (this: That, params: ", + "ExistsRequest", + " | ", + "ExistsRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise; (this: That, params: ", + "ExistsRequest", + " | ", + "ExistsRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + ">; (this: That, params: ", + "ExistsRequest", + " | ", + "ExistsRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise; }; existsSource: { (this: That, params: ", + "ExistsSourceRequest", + " | ", + "ExistsSourceRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise; (this: That, params: ", + "ExistsSourceRequest", + " | ", + "ExistsSourceRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + ">; (this: That, params: ", + "ExistsSourceRequest", + " | ", + "ExistsSourceRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise; }; explain: { (this: That, params: ", + "ExplainRequest", + " | ", + "ExplainRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "ExplainResponse", + ">; (this: That, params: ", + "ExplainRequest", + " | ", + "ExplainRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "ExplainResponse", + ", unknown>>; (this: That, params: ", + "ExplainRequest", + " | ", + "ExplainRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "ExplainResponse", + ">; }; features: ", + "default", + "; fieldCaps: { (this: That, params?: ", + "FieldCapsRequest", + " | ", + "FieldCapsRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "FieldCapsResponse", + ">; (this: That, params?: ", + "FieldCapsRequest", + " | ", + "FieldCapsRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "FieldCapsResponse", + ", unknown>>; (this: That, params?: ", + "FieldCapsRequest", + " | ", + "FieldCapsRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "FieldCapsResponse", + ">; }; fleet: ", + "default", + "; getScript: { (this: That, params: ", + "GetScriptRequest", + " | ", + "GetScriptRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "GetScriptResponse", + ">; (this: That, params: ", + "GetScriptRequest", + " | ", + "GetScriptRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "GetScriptResponse", + ", unknown>>; (this: That, params: ", + "GetScriptRequest", + " | ", + "GetScriptRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "GetScriptResponse", + ">; }; getScriptContext: { (this: That, params?: ", + "GetScriptContextRequest", + " | ", + "GetScriptContextRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "GetScriptContextResponse", + ">; (this: That, params?: ", + "GetScriptContextRequest", + " | ", + "GetScriptContextRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "GetScriptContextResponse", + ", unknown>>; (this: That, params?: ", + "GetScriptContextRequest", + " | ", + "GetScriptContextRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "GetScriptContextResponse", + ">; }; getScriptLanguages: { (this: That, params?: ", + "GetScriptLanguagesRequest", + " | ", + "GetScriptLanguagesRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "GetScriptLanguagesResponse", + ">; (this: That, params?: ", + "GetScriptLanguagesRequest", + " | ", + "GetScriptLanguagesRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "GetScriptLanguagesResponse", + ", unknown>>; (this: That, params?: ", + "GetScriptLanguagesRequest", + " | ", + "GetScriptLanguagesRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "GetScriptLanguagesResponse", + ">; }; getSource: { (this: That, params: ", + "GetSourceRequest", + " | ", + "GetSourceRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise; (this: That, params: ", + "GetSourceRequest", + " | ", + "GetSourceRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + ">; (this: That, params: ", + "GetSourceRequest", + " | ", + "GetSourceRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise; }; graph: ", + "default", + "; healthReport: { (this: That, params?: ", + "HealthReportRequest", + " | ", + "HealthReportRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "HealthReportResponse", + ">; (this: That, params?: ", + "HealthReportRequest", + " | ", + "HealthReportRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "HealthReportResponse", + ", unknown>>; (this: That, params?: ", + "HealthReportRequest", + " | ", + "HealthReportRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "HealthReportResponse", + ">; }; ilm: ", + "default", + "; index: { (this: That, params: ", + "IndexRequest", + " | ", + "IndexRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "WriteResponseBase", + ">; (this: That, params: ", + "IndexRequest", + " | ", + "IndexRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "WriteResponseBase", + ", unknown>>; (this: That, params: ", + "IndexRequest", + " | ", + "IndexRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "WriteResponseBase", + ">; }; indices: ", + "default", + "; inference: ", + "default", + "; info: { (this: That, params?: ", + "InfoRequest", + " | ", + "InfoRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "InfoResponse", + ">; (this: That, params?: ", + "InfoRequest", + " | ", + "InfoRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "InfoResponse", + ", unknown>>; (this: That, params?: ", + "InfoRequest", + " | ", + "InfoRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "InfoResponse", + ">; }; ingest: ", + "default", + "; knnSearch: { (this: That, params: ", + "KnnSearchRequest", + " | ", + "KnnSearchRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "KnnSearchResponse", + ">; (this: That, params: ", + "KnnSearchRequest", + " | ", + "KnnSearchRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "KnnSearchResponse", + ", unknown>>; (this: That, params: ", + "KnnSearchRequest", + " | ", + "KnnSearchRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "KnnSearchResponse", + ">; }; license: ", + "default", + "; logstash: ", + "default", + "; mget: { (this: That, params?: ", + "MgetRequest", + " | ", + "MgetRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "MgetResponse", + ">; (this: That, params?: ", + "MgetRequest", + " | ", + "MgetRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "MgetResponse", + ", unknown>>; (this: That, params?: ", + "MgetRequest", + " | ", + "MgetRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "MgetResponse", + ">; }; migration: ", + "default", + "; ml: ", + "default", + "; monitoring: ", + "default", + "; msearch: { >(this: That, params: ", + "MsearchRequest", + " | ", + "MsearchRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "MsearchResponse", + ">; >(this: That, params: ", + "MsearchRequest", + " | ", + "MsearchRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "MsearchResponse", + ", unknown>>; >(this: That, params: ", + "MsearchRequest", + " | ", + "MsearchRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "MsearchResponse", + ">; }; msearchTemplate: { >(this: That, params: ", + "MsearchTemplateRequest", + " | ", + "MsearchTemplateRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "MsearchTemplateResponse", + ">; >(this: That, params: ", + "MsearchTemplateRequest", + " | ", + "MsearchTemplateRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "MsearchTemplateResponse", + ", unknown>>; >(this: That, params: ", + "MsearchTemplateRequest", + " | ", + "MsearchTemplateRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "MsearchTemplateResponse", + ">; }; mtermvectors: { (this: That, params?: ", + "MtermvectorsRequest", + " | ", + "MtermvectorsRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "MtermvectorsResponse", + ">; (this: That, params?: ", + "MtermvectorsRequest", + " | ", + "MtermvectorsRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "MtermvectorsResponse", + ", unknown>>; (this: That, params?: ", + "MtermvectorsRequest", + " | ", + "MtermvectorsRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "MtermvectorsResponse", + ">; }; nodes: ", + "default", + "; openPointInTime: { (this: That, params: ", + "OpenPointInTimeRequest", + " | ", + "OpenPointInTimeRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "OpenPointInTimeResponse", + ">; (this: That, params: ", + "OpenPointInTimeRequest", + " | ", + "OpenPointInTimeRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "OpenPointInTimeResponse", + ", unknown>>; (this: That, params: ", + "OpenPointInTimeRequest", + " | ", + "OpenPointInTimeRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "OpenPointInTimeResponse", + ">; }; ping: { (this: That, params?: ", + "PingRequest", + " | ", + "PingRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise; (this: That, params?: ", + "PingRequest", + " | ", + "PingRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + ">; (this: That, params?: ", + "PingRequest", + " | ", + "PingRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise; }; putScript: { (this: That, params: ", + "PutScriptRequest", + " | ", + "PutScriptRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "AcknowledgedResponseBase", + ">; (this: That, params: ", + "PutScriptRequest", + " | ", + "PutScriptRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "AcknowledgedResponseBase", + ", unknown>>; (this: That, params: ", + "PutScriptRequest", + " | ", + "PutScriptRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "AcknowledgedResponseBase", + ">; }; queryRuleset: ", + "default", + "; rankEval: { (this: That, params: ", + "RankEvalRequest", + " | ", + "RankEvalRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "RankEvalResponse", + ">; (this: That, params: ", + "RankEvalRequest", + " | ", + "RankEvalRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "RankEvalResponse", + ", unknown>>; (this: That, params: ", + "RankEvalRequest", + " | ", + "RankEvalRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "RankEvalResponse", + ">; }; reindex: { (this: That, params: ", + "ReindexRequest", + " | ", + "ReindexRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "ReindexResponse", + ">; (this: That, params: ", + "ReindexRequest", + " | ", + "ReindexRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "ReindexResponse", + ", unknown>>; (this: That, params: ", + "ReindexRequest", + " | ", + "ReindexRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "ReindexResponse", + ">; }; reindexRethrottle: { (this: That, params: ", + "ReindexRethrottleRequest", + " | ", + "ReindexRethrottleRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "ReindexRethrottleResponse", + ">; (this: That, params: ", + "ReindexRethrottleRequest", + " | ", + "ReindexRethrottleRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "ReindexRethrottleResponse", + ", unknown>>; (this: That, params: ", + "ReindexRethrottleRequest", + " | ", + "ReindexRethrottleRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "ReindexRethrottleResponse", + ">; }; renderSearchTemplate: { (this: That, params?: ", + "RenderSearchTemplateRequest", + " | ", + "RenderSearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "RenderSearchTemplateResponse", + ">; (this: That, params?: ", + "RenderSearchTemplateRequest", + " | ", + "RenderSearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "RenderSearchTemplateResponse", + ", unknown>>; (this: That, params?: ", + "RenderSearchTemplateRequest", + " | ", + "RenderSearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "RenderSearchTemplateResponse", + ">; }; rollup: ", + "default", + "; scriptsPainlessExecute: { (this: That, params?: ", + "ScriptsPainlessExecuteRequest", + " | ", + "ScriptsPainlessExecuteRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "ScriptsPainlessExecuteResponse", + ">; (this: That, params?: ", + "ScriptsPainlessExecuteRequest", + " | ", + "ScriptsPainlessExecuteRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "ScriptsPainlessExecuteResponse", + ", unknown>>; (this: That, params?: ", + "ScriptsPainlessExecuteRequest", + " | ", + "ScriptsPainlessExecuteRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "ScriptsPainlessExecuteResponse", + ">; }; scroll: { >(this: That, params: ", + "ScrollRequest", + " | ", + "ScrollRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "ScrollResponse", + ">; >(this: That, params: ", + "ScrollRequest", + " | ", + "ScrollRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "ScrollResponse", + ", unknown>>; >(this: That, params: ", + "ScrollRequest", + " | ", + "ScrollRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "ScrollResponse", + ">; }; searchApplication: ", + "default", + "; searchMvt: { (this: That, params: ", + "SearchMvtRequest", + " | ", + "SearchMvtRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise; (this: That, params: ", + "SearchMvtRequest", + " | ", + "SearchMvtRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + ">; (this: That, params: ", + "SearchMvtRequest", + " | ", + "SearchMvtRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise; }; searchShards: { (this: That, params?: ", + "SearchShardsRequest", + " | ", + "SearchShardsRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchShardsResponse", + ">; (this: That, params?: ", + "SearchShardsRequest", + " | ", + "SearchShardsRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchShardsResponse", + ", unknown>>; (this: That, params?: ", + "SearchShardsRequest", + " | ", + "SearchShardsRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchShardsResponse", + ">; }; searchTemplate: { (this: That, params?: ", + "SearchTemplateRequest", + " | ", + "SearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchTemplateResponse", + ">; (this: That, params?: ", + "SearchTemplateRequest", + " | ", + "SearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchTemplateResponse", + ", unknown>>; (this: That, params?: ", + "SearchTemplateRequest", + " | ", + "SearchTemplateRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchTemplateResponse", + ">; }; searchableSnapshots: ", + "default", + "; security: ", + "default", + "; shutdown: ", + "default", + "; slm: ", + "default", + "; snapshot: ", + "default", + "; sql: ", + "default", + "; ssl: ", + "default", + "; synonyms: ", + "default", + "; tasks: ", + "default", + "; termsEnum: { (this: That, params: ", + "TermsEnumRequest", + " | ", + "TermsEnumRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "TermsEnumResponse", + ">; (this: That, params: ", + "TermsEnumRequest", + " | ", + "TermsEnumRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "TermsEnumResponse", + ", unknown>>; (this: That, params: ", + "TermsEnumRequest", + " | ", + "TermsEnumRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "TermsEnumResponse", + ">; }; termvectors: { (this: That, params: ", + "TermvectorsRequest", + " | ", + "TermvectorsRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "TermvectorsResponse", + ">; (this: That, params: ", + "TermvectorsRequest", + " | ", + "TermvectorsRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "TermvectorsResponse", + ", unknown>>; (this: That, params: ", + "TermvectorsRequest", + " | ", + "TermvectorsRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "TermvectorsResponse", + ">; }; textStructure: ", + "default", + "; transform: ", + "default", + "; updateByQuery: { (this: That, params: ", + "UpdateByQueryRequest", + " | ", + "UpdateByQueryRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "UpdateByQueryResponse", + ">; (this: That, params: ", + "UpdateByQueryRequest", + " | ", + "UpdateByQueryRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "UpdateByQueryResponse", + ", unknown>>; (this: That, params: ", + "UpdateByQueryRequest", + " | ", + "UpdateByQueryRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "UpdateByQueryResponse", + ">; }; updateByQueryRethrottle: { (this: That, params: ", + "UpdateByQueryRethrottleRequest", + " | ", + "UpdateByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "UpdateByQueryRethrottleResponse", + ">; (this: That, params: ", + "UpdateByQueryRethrottleRequest", + " | ", + "UpdateByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "UpdateByQueryRethrottleResponse", + ", unknown>>; (this: That, params: ", + "UpdateByQueryRethrottleRequest", + " | ", + "UpdateByQueryRethrottleRequest", + ", options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "UpdateByQueryRethrottleResponse", + ">; }; watcher: ", + "default", + "; xpack: ", + "default", + "; }" + ], + "path": "packages/core/elasticsearch/core-elasticsearch-server/src/client/scoped_cluster_client.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-elasticsearch-server", "id": "def-common.IScopedClusterClient.asCurrentUser", diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 780c7923c284f..3ba50b8dac16d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 114 | 0 | 55 | 0 | +| 115 | 0 | 55 | 0 | ## Common diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 931bfe3dd1ffa..da80cfb3311b5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 169d1c7420ecb..9ac7f069b22a1 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index bfa30d6b4711c..ca8f782cf8fdb 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 24fd217dc1545..7e658cb729e0e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 422e92f21ca68..f98419701821e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index 2f3fe1f7bb86c..6ea0c9944d1fa 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index d1b9ae9dd1133..2ee9ef3b28c0b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 3be4c5421b5ec..dce842b6af2bb 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index ed8fbfb54692d..bac03638177b9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 9a6ed7539a836..9644cfce33b38 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 96f03988466a4..cba891baf2822 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 532bd37441a43..fe9b84a3c3217 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index 21dad12e0258e..dc698f6bc28ab 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 1ad9fa75a3cce..b0e6c6e4c27c4 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index c79d102fba915..18144b1e9448b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 8d1e88aa66e85..ddd4fbfe4177a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 7456fb7be033c..018af3ce1b385 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index b10bb6404d276..01ffe71663370 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index 76915b3e87b76..d638b044dad2a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 4bd3eb4bb9f0a..cab6799bff0b3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index 476d026743f4e..4c12f16c2a8ea 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 321ccfbfd748e..71549eaf13b6f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 26e9d73a9e882..c3373fbd0c027 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 41977463d8bd5..132723544a715 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 39dfbfc17017c..afadd6b9e7134 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4526,6 +4526,10 @@ "plugin": "rollup", "path": "x-pack/plugins/rollup/server/routes/api/jobs/register_get_route.ts" }, + { + "plugin": "searchInferenceEndpoints", + "path": "x-pack/plugins/search_inference_endpoints/server/routes.ts" + }, { "plugin": "searchNotebooks", "path": "x-pack/plugins/search_notebooks/server/routes/index.ts" @@ -14135,6 +14139,10 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/data_frame_analytics.ts" @@ -15737,6 +15745,26 @@ "plugin": "fileUpload", "path": "x-pack/plugins/file_upload/server/routes.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts" + }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts" + }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts" + }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/routes/related_routes.ts" + }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/routes/pipeline_routes.ts" + }, { "plugin": "lists", "path": "x-pack/plugins/lists/server/routes/create_endpoint_list_item_route.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 91f3ad478a848..a02429ead643f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 803cc013e7431..54fc0400180d9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index f408a4ac9187c..a66c00bf85050 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 901c22347fb3f..308810c2f34db 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 1de092a6fc608..f3f58f1e598be 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index 0738a27ec783c..ad5674f53c4ae 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index 905265227c188..7d14a5df1cac9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index b14f605448362..940c59e35302f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 9f6432519ff2b..2cd31138fa05b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index ad4d1ec2a5ad1..a1fb8ddc8f01a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index a7ddf3393fe9d..984367351f0a0 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 4e04d4eca6335..7a21a00654041 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 4f8dc57247110..5a462ff9dd9b2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 6b274d6839440..cb87edb50dd30 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 7dd32103e4e21..13631df322a0c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 0f7b3f15eb32c..781c290efa830 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index b7a07acd63954..d01c51fedc371 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index a81c6c788de81..c803551f96ee7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 836447a3e73ba..911eca5d9eacf 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 6bccd3918d5e9..12d3f8850d6d3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index d8e16e1a43084..a3f43b920d875 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 7320c96712c48..7f3cf59bd5250 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 9e78d2d16b228..1588ea886fcd2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 7283882865d0f..1d3b030a44635 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index fff4a99d5b01f..45da69c906fc3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 8cc0a9ae43bb7..1827a3566ec82 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 75517a926783f..e921adbc4a2e3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 29c94fbfd1adc..f943b333f9792 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 2ed1d7727fe2f..80e3a0fbda28f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 082c66a4bf6e8..ca2ee8d57e1b0 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index a907ffe57b3a3..09b9d84416b03 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index c8c02270fe092..2bc91692e377f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 908b449717f48..37f8d8d8565fa 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index ab6c1109023bd..52a6975ec0339 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 4658f0b80acde..64617ce924172 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 482e042f334b5..b7af11e6f7f58 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index ae6416cd420de..b7309fd307623 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index 09d653b86fcac..b3f413fd8b804 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-06-13 +date: 2024-06-17 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 b2d4a0c86fd48..96c99c1dec097 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-06-13 +date: 2024-06-17 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 77cb8b0f86aa6..2819726083c7e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 54d1d9931cd02..9fe038fd41f71 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index a3296a4cefdc3..ce5a941529246 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 91af83f636690..c6b8a7cfcaef0 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 36b32f0c9c437..4e99f055d2e1d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index a150eb4a40b46..ada8d4c859f55 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 7914709e55e30..15ca4c2aad1a2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 0cc603aee9caf..0a43ac9803d0a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.devdocs.json b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json index 6686d9eec0265..80e7b392cbaae 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json @@ -139,19 +139,19 @@ }, { "plugin": "maps", - "path": "x-pack/plugins/maps/public/map_attribute_service.ts" + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts" }, { "plugin": "maps", - "path": "x-pack/plugins/maps/public/map_attribute_service.ts" + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts" }, { "plugin": "maps", - "path": "x-pack/plugins/maps/public/map_attribute_service.ts" + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts" }, { "plugin": "maps", - "path": "x-pack/plugins/maps/public/map_attribute_service.ts" + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts" }, { "plugin": "canvas", diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 60579b3366823..67b30a802e9b6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 36a5a5510785b..7dbb108d55d25 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index de1c5dbd53fc1..d1f83921f9988 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index dab194209576f..acf4f86f23f46 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 9a43bf46883bf..fc17a91ed817c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 8336c31e79417..803a3105865ab 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index d745258f1c644..88af27b56f3d2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index c62b5075e2e32..621a80d312fc2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.devdocs.json b/api_docs/kbn_core_saved_objects_common.devdocs.json index e072a4e7e6a2b..12f98a813006b 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -2146,6 +2146,22 @@ "plugin": "lens", "path": "x-pack/plugins/lens/public/types.ts" }, + { + "plugin": "maps", + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts" + }, + { + "plugin": "maps", + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/load_from_library.ts" + }, + { + "plugin": "maps", + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/save_to_library.ts" + }, + { + "plugin": "maps", + "path": "x-pack/plugins/maps/public/routes/map_page/saved_map/save_to_library.ts" + }, { "plugin": "graph", "path": "x-pack/plugins/graph/public/services/persistence/saved_workspace_references.ts" @@ -2542,14 +2558,6 @@ "plugin": "maps", "path": "x-pack/plugins/maps/common/migrations/references.ts" }, - { - "plugin": "maps", - "path": "x-pack/plugins/maps/public/map_attribute_service.ts" - }, - { - "plugin": "maps", - "path": "x-pack/plugins/maps/public/map_attribute_service.ts" - }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_map.ts" diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 0f95277830fa5..e56f6b4af841f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 82d135fd249b1..bad755357fef8 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 0a931f779b144..003b968a38306 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index a2d149ae5d7dc..6ab936bd508cd 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 2e306787ff486..a8e76cbb3f9ae 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index b78b35831d388..0908b45816b60 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index d78e726b50781..89c43629a3292 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index cb2987b3d3b63..894ac8196e237 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index e69601d75c329..6be3737457dbf 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 3e577bacde8e1..5217068338425 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-06-13 +date: 2024-06-17 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 a90583362d57b..d8714baa91808 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-06-13 +date: 2024-06-17 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 e6af25f1f3d75..5483add06f3aa 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-06-13 +date: 2024-06-17 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 dcd4674de0993..3160159c8d12e 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-06-13 +date: 2024-06-17 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 42cb316e6cfbb..84c08982385c4 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-06-13 +date: 2024-06-17 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 87ba7b8bd10ca..e107bb2d34ed8 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-06-13 +date: 2024-06-17 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 7bc944dcc251b..d086b678038a0 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-06-13 +date: 2024-06-17 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 3f2607303da95..39567b1b1bd64 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index d2d9e50f1e10a..d5bde0a90cbd5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index ef17151949b6b..644cf7f96a29f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 733eb2e0ce000..3774ed1d3e233 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 46ad707615503..7ddefdf2c43c0 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index c2f805505dd2b..d9dc4054aabef 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 7f5b2fcde3fea..ac9e10ddf7292 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index ad0e6c7e8a9e2..4aebf41ce691c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index f7733e153be24..e74db79812b59 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-06-13 +date: 2024-06-17 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 a82d3a8f6ded8..ac918665f42ac 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 85b2e5f4e0098..7172faff3f4bc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 94b4e1894c97a..3f8e46e816bf5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index b993fa16395ef..3a43a7c1f9a7f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index f190d1ffec132..35bea4f0951ca 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 5fde6b3162930..4a57fb3b80325 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 3432241c4bab4..b6cce92505cb9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 2540957f103e5..aa5258399d4de 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index d912d8c192b85..12af0f5b7e589 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 8a095601f2339..5c63ba00710a4 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index f922cded5f41d..07f69e99e154f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index bff4311e42155..73857d7c42f59 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index d8904f455060b..a3d229869e442 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index c13c3ce836e77..d1ecca5536282 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 0db2d14e9166d..56eac696e81a3 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-06-13 +date: 2024-06-17 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 3667e309f9ce2..f3bc401c4d717 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-06-13 +date: 2024-06-17 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 a3ee2882ddf6e..dae1988c059e9 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-06-13 +date: 2024-06-17 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 a5251dddec669..857870c56a06e 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-06-13 +date: 2024-06-17 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 ad26ea0a6594e..152119caae184 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-06-13 +date: 2024-06-17 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 7ebb26110a5b0..9b04678da2d5d 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-06-13 +date: 2024-06-17 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 472e1ec20b9ec..50c2b3f82f8eb 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-06-13 +date: 2024-06-17 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 1bbb0e91aa8a9..865370737cbaf 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-06-13 +date: 2024-06-17 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 93f4fe72658cf..7e6dccebc5564 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-06-13 +date: 2024-06-17 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 a1fbaf911aaff..f02b3fb496e02 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 0fbb42af79748..d8a7a6ecd269e 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-06-13 +date: 2024-06-17 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 c83824b236a28..f1832a8e4a3f8 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-06-13 +date: 2024-06-17 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 02c8e920087a3..609a64e4a9969 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-06-13 +date: 2024-06-17 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 45a5ea9b0768b..f6ffe6dea5543 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-06-13 +date: 2024-06-17 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 81837c91aaa83..c318399e873c8 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-06-13 +date: 2024-06-17 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 14653d875d7d1..1b7c35fd2325c 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-06-13 +date: 2024-06-17 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 bf637aa139647..fee26fa0f2e09 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-06-13 +date: 2024-06-17 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 cb73a1722bd5e..c72ac137a4376 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-06-13 +date: 2024-06-17 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 d6314c03178f2..d320f47f2bd5f 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-06-13 +date: 2024-06-17 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 a524f5acfded8..f436699b2259e 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-06-13 +date: 2024-06-17 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 dd4cfda8104cc..ca4ba92762b06 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-06-13 +date: 2024-06-17 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 85a0196392afa..32edbfb233579 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-06-13 +date: 2024-06-17 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 33e1e3e10d10e..7d93d245922a7 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-06-13 +date: 2024-06-17 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 c675fdd864e2a..30f6072ee703a 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-06-13 +date: 2024-06-17 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 fadc05c075570..6672a659c774b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.devdocs.json b/api_docs/kbn_deeplinks_search.devdocs.json index 6bb61ceeb91a7..d1c71948b3f00 100644 --- a/api_docs/kbn_deeplinks_search.devdocs.json +++ b/api_docs/kbn_deeplinks_search.devdocs.json @@ -30,7 +30,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"appSearch\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"searchPlayground\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\"" + "\"appSearch\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\"" ], "path": "packages/deeplinks/search/deep_links.ts", "deprecated": false, @@ -112,6 +112,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/deeplinks-search", + "id": "def-common.ENTERPRISE_SEARCH_INFERENCE_ENDPOINTS_APP_ID", + "type": "string", + "tags": [], + "label": "ENTERPRISE_SEARCH_INFERENCE_ENDPOINTS_APP_ID", + "description": [], + "signature": [ + "\"enterpriseSearchInferenceEndpoints\"" + ], + "path": "packages/deeplinks/search/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/deeplinks-search", "id": "def-common.ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID", diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 1bd3ff9004cef..9837a90838425 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-ki | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 16 | 0 | 16 | 0 | +| 17 | 0 | 17 | 0 | ## Common diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 330cbe65748b6..b4c29d128b7bc 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-06-13 +date: 2024-06-17 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 95f353c2580ff..17fb23756b2e9 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-06-13 +date: 2024-06-17 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 e5593ac50b3e6..c85c1c3dbc9d5 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-06-13 +date: 2024-06-17 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 d5b6bd641faf0..fa0d410971f6d 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-06-13 +date: 2024-06-17 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 7b8969a01721e..c40a95f8bb0d8 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-06-13 +date: 2024-06-17 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 8cb55811905cc..5bf4449370595 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-06-13 +date: 2024-06-17 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 6514b8b9e135c..c708bfe8d087b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 9217834957fef..6520201f20bb3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 9f3518fa94a3a..bf577bba438ee 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index cfa4d4e2245e8..3cb448a38ebfd 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-06-13 +date: 2024-06-17 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 a7627f4d5f578..6852b0a1a51c4 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-06-13 +date: 2024-06-17 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 40bf4b2be9d67..7b4148825dc72 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 5c603c8745e3a..1fd1f16843d71 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-06-13 +date: 2024-06-17 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 595af7faa768f..bfe12e9b85204 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-06-13 +date: 2024-06-17 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 6c6abc4a164fa..ec03051ac4e03 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-06-13 +date: 2024-06-17 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 657d39ed8a847..f607ea1d0be37 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 16f198b43fa1a..a0c780c5650b8 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-06-13 +date: 2024-06-17 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 420c282afb611..8d75bbb7811cf 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-06-13 +date: 2024-06-17 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 506ceff9a425d..54c80273b8443 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-06-13 +date: 2024-06-17 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 406ef47ec029e..25ff41cc02a9f 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-06-13 +date: 2024-06-17 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 81bbe042494b7..ed9ab2f18ade2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 31dac2496ac5c..f006c212d642f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 1e1832cc515c4..6fa3326745f80 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index db17acfc728f3..1176edac178e6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 66e547d9d24e2..7b7022d76d8ea 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 01f6d17ffe474..1ae572d5d6043 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index a2914c1eda59d..f1946f2103183 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index e5021a22c1daf..12ee66d88722b 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-06-13 +date: 2024-06-17 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 015226bdd8456..f05c67a45f383 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-06-13 +date: 2024-06-17 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 8b52373ff5d0a..841b09da57704 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-06-13 +date: 2024-06-17 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 5c8b537fcbd28..bf0774a4b872e 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-06-13 +date: 2024-06-17 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 03871337dff36..8334451525f44 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-06-13 +date: 2024-06-17 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 9616e1a43449c..4ff1ecb122add 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-06-13 +date: 2024-06-17 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 c673314f07e05..cfe2c88beeb8f 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-06-13 +date: 2024-06-17 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 403a2b20c96a6..898ea10b60d18 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 748b0dd2fbd73..f81e9144143c9 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-06-13 +date: 2024-06-17 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 03e671e85a3df..91f11d5537abc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 9ad88e84223cc..b05d6f283ebd1 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-06-13 +date: 2024-06-17 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 d75edc234347d..6baa9b9dfe1eb 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-06-13 +date: 2024-06-17 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 56328e386cd21..683d3c79b9dce 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-06-13 +date: 2024-06-17 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 b2da4c40df485..c8a49fdc38491 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index ced48faf18c07..3c198bd6da801 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-06-13 +date: 2024-06-17 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 a3c8143247c20..eaa0629e9bc62 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 446929b90ac97..1d2f299d4b79c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 1cbc161810700..61a0941c5a570 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 626d2300c52d5..3c5345798c4be 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index a4442a2343e48..1297af5fcf739 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 3d9af0e08b84b..81f2f00848881 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 5f7e6d7fdd3c3..9a818429802c8 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 5313ec69fe7be..3ece92db0599c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 95795b20b5a1d..eb37e77be049c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 1a289e433d7c8..ebd0afbce2dbc 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 6dc0890f9d7dd..04278a9368654 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-06-13 +date: 2024-06-17 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 419b19d416b9d..df458c4c1210e 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-06-13 +date: 2024-06-17 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 ad077d8f08950..79a9c6d210c07 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 21f01adf752d2..3c4303a5f9a79 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 9c4b534f1f1ac..d51b3917d6d96 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-06-13 +date: 2024-06-17 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 9cc0ccf40db39..47e552cffa184 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-06-13 +date: 2024-06-17 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 2bda480abdcf3..d8802796021ba 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-06-13 +date: 2024-06-17 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 7ac0f84ec2edb..8583d1fda3efa 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 772d75866b6f1..13e63c8d66a2f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 8d88199cffa25..f01e4d1748628 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 409293e6ffb7d..9d7934ba53dc1 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-06-13 +date: 2024-06-17 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 f25e6aad11aa5..e89d5d7cc9844 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-06-13 +date: 2024-06-17 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 b9271262a389c..ff90fecc0dd79 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 303c57991d1da..8178a1391b976 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-06-13 +date: 2024-06-17 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 3bf14b6d514a1..57cc3d3649869 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-06-13 +date: 2024-06-17 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 948bd22e8cc1a..91a8523bded27 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index ca1e74356ab7b..dc976309ee1df 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-06-13 +date: 2024-06-17 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 2ee01a6807529..6086490757512 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-06-13 +date: 2024-06-17 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 f7abffca9699b..da4190ad3046e 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-06-13 +date: 2024-06-17 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 6abeba45ad4a9..ca15e140f8660 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-06-13 +date: 2024-06-17 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 9db6d361f7db8..d819a114483b4 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-06-13 +date: 2024-06-17 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 9bd323faa0775..8b945e19d2f21 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-06-13 +date: 2024-06-17 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 045fce2967a22..eac3b3e3309a7 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-06-13 +date: 2024-06-17 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 1cf12fee4d254..401daabd88b3a 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-06-13 +date: 2024-06-17 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 a4e8f1b1421b0..26fcb53c1748e 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-06-13 +date: 2024-06-17 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 dbfebb0b28d43..c472d1f1bdb8e 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-06-13 +date: 2024-06-17 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 5101b0e49e6dd..0b792166ad21c 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-06-13 +date: 2024-06-17 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 02364b1a21ba2..2e46b1e309c71 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-06-13 +date: 2024-06-17 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 a7bc73b3bc24c..c843c94b810d6 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-06-13 +date: 2024-06-17 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 fc2be6f72b3b9..1e586ae70e6dc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 23ebd00acaa9f..98da1667f83fa 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 2a2ebe1191f20..a61d79d28324a 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-06-13 +date: 2024-06-17 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 481dd1e1bfff5..ecc3dad8006ec 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-06-13 +date: 2024-06-17 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 79bc57e53c021..a68a71c184587 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-06-13 +date: 2024-06-17 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 4856f23b38c9b..c94664fbafc4d 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-06-13 +date: 2024-06-17 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 95bcaba226147..fa07ca5a417ee 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-06-13 +date: 2024-06-17 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 715ae4de6e5b6..b10d3d0bb4784 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-06-13 +date: 2024-06-17 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 729b0edc1daf9..1a0d4f5d4a624 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 3af39c9fb9696..6c39004ba3176 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-06-13 +date: 2024-06-17 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 29517a0fa5653..1386e21d31145 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 298526bfef049..a69b15aa350ac 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-06-13 +date: 2024-06-17 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 760b9992b6468..8999d750385b2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index 0de1b25e5cf5b..8ce60cf630e63 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index a45a7303e2043..c6d06a9dee3f9 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-06-13 +date: 2024-06-17 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 13473883433d3..246c04e694349 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index cdbb272aa77f1..a9af04a4754f6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index b25b4fc368836..92bab8559e488 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 4a907cc1bb7d5..6a9d2d38db29f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 326478404fc79..12193ee482a7e 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-06-13 +date: 2024-06-17 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 31da6a2ad2cae..60ed40886ff08 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-06-13 +date: 2024-06-17 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 731d891299336..4734419d552ed 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-06-13 +date: 2024-06-17 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 7e0208059f496..463203ab23a43 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 7438eef64d4f5..35808f41675f5 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-06-13 +date: 2024-06-17 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 64a961937ad07..f2a33bf0de233 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-06-13 +date: 2024-06-17 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 d9d06282609f4..907bc0bd4f38e 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-06-13 +date: 2024-06-17 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 342a7529aa3c4..d8ab676dee534 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 3d663765c6650..f577f22db4f02 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-06-13 +date: 2024-06-17 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 9c26e887d4240..c987583cd4216 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-06-13 +date: 2024-06-17 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 77040f9fe6b23..3b8dc07950acd 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index c674324da2133..930f5e7a79d5c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index d6685da2147f3..26d0629c30563 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-06-13 +date: 2024-06-17 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 505bce4e8501f..046c132f8d36b 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-06-13 +date: 2024-06-17 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 89b718b59c42d..ca2efb80448eb 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-06-13 +date: 2024-06-17 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 a5f1219aed2ae..04804a93f6d14 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-06-13 +date: 2024-06-17 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 4c49a9adc06fb..46f985c62a3a7 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 4f5dcfcdd2d09..60f1a092e2990 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 180f1e9cfc0dc..f43913a1fbb35 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index ea0ba66083ff0..78af9b7fd0129 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-06-13 +date: 2024-06-17 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 30ce13a2a9851..14f653398b46f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index d72afb9e7adf1..bfba51d448dd5 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-06-13 +date: 2024-06-17 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 0b7d52ade79b7..aded1d2975df3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index dbc6574971c08..65aae400bcb52 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-06-13 +date: 2024-06-17 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 1c88800d0d4af..cef167f6bd96a 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-06-13 +date: 2024-06-17 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 736bd71ea87ee..fac38a2bf3261 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-06-13 +date: 2024-06-17 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 ccf7931cee5a3..8d8f2021a29a3 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-06-13 +date: 2024-06-17 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 f2d5a0a378c28..7f7798e358187 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-06-13 +date: 2024-06-17 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 0d60edfa080d4..8b3a084c45974 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-06-13 +date: 2024-06-17 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 46b54d9d81c30..86308b7fb03fc 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-06-13 +date: 2024-06-17 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 726e141944b20..6d272e28acc6b 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-06-13 +date: 2024-06-17 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 6e77490166254..83fb9ae258f82 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-06-13 +date: 2024-06-17 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 f184e770663a2..dce6bdeda2822 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-06-13 +date: 2024-06-17 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 fbfe19807943e..30ed94af5bdb6 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-06-13 +date: 2024-06-17 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 1d8539b27920f..769255847c894 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-06-13 +date: 2024-06-17 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 0a184bd56b32b..9dc3b1a44d26e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 81dd5fa0e9539..0ab37f0d32280 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 5a059a2f534d9..6c25f131a4518 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index b9956f5c5521a..9ee8a9b992cd6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 54a08ea4e1fbb..3c13cb01ec5d9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 7637e411b4a6c..02c8eb873e0c2 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-06-13 +date: 2024-06-17 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 849034b256b92..30cfd9d86286c 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-06-13 +date: 2024-06-17 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 7f6975b8ec16c..8a6e194435632 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-06-13 +date: 2024-06-17 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 aa8cffdc1acec..6a0532f7631db 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-06-13 +date: 2024-06-17 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 faf702ea28a47..4f568d36c7515 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-06-13 +date: 2024-06-17 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 2cbd240e0ff37..e0048f04e496e 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-06-13 +date: 2024-06-17 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 bb56035ed0e1c..da68c401e434a 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-06-13 +date: 2024-06-17 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 55c1001609f74..9118276f5d388 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-06-13 +date: 2024-06-17 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 d8105ac51ff77..b8419571d4b42 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-06-13 +date: 2024-06-17 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 518cff51ba70a..7422229fee6fc 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-06-13 +date: 2024-06-17 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 efa321e78a14e..8af5d2474d873 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-06-13 +date: 2024-06-17 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 ec691c37478aa..98d30c0e78bd2 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-06-13 +date: 2024-06-17 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.devdocs.json b/api_docs/kbn_response_ops_feature_flag_service.devdocs.json new file mode 100644 index 0000000000000..0f7b6e0c8a8a2 --- /dev/null +++ b/api_docs/kbn_response_ops_feature_flag_service.devdocs.json @@ -0,0 +1,77 @@ +{ + "id": "@kbn/response-ops-feature-flag-service", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/response-ops-feature-flag-service", + "id": "def-common.createFeatureFlagService", + "type": "Function", + "tags": [], + "label": "createFeatureFlagService", + "description": [], + "signature": [ + "(featureFlags: T[]) => FeatureFlag" + ], + "path": "packages/response-ops/feature_flag_service/feature_flag_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-feature-flag-service", + "id": "def-common.createFeatureFlagService.$1", + "type": "Array", + "tags": [], + "label": "featureFlags", + "description": [], + "signature": [ + "T[]" + ], + "path": "packages/response-ops/feature_flag_service/feature_flag_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/response-ops-feature-flag-service", + "id": "def-common.FeatureFlagService", + "type": "Type", + "tags": [], + "label": "FeatureFlagService", + "description": [], + "signature": [ + "FeatureFlag" + ], + "path": "packages/response-ops/feature_flag_service/feature_flag_service.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx new file mode 100644 index 0000000000000..a97ffa2d7f31c --- /dev/null +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnResponseOpsFeatureFlagServicePluginApi +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-06-17 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] +--- +import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; + + + +Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 3 | 0 | 3 | 0 | + +## Common + +### Functions + + +### Consts, variables and types + + diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 8609d7641b235..32b46c7cfce9b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index be0a991102b08..766dbc9de5469 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-06-13 +date: 2024-06-17 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 5b4a3b6b7338c..4e8dff0fd2163 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-06-13 +date: 2024-06-17 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 7ec7a7c0083c4..c0678bbb387e7 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-06-13 +date: 2024-06-17 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 593c6af558f3c..bf4b1a5e20ff2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 2ec29fe2415e4..2945765803a1e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 9f8282d388e90..d43d0f5f7950c 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-06-13 +date: 2024-06-17 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 eba762283e1c9..632f445a2e4cb 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-06-13 +date: 2024-06-17 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 2f6f67da9ac6a..90ad4394d37ad 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-06-13 +date: 2024-06-17 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 a527125a2faa9..1500bfe3ac9ca 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-06-13 +date: 2024-06-17 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 1f6788b1a847a..308e260525477 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-06-13 +date: 2024-06-17 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 2f49c006911ba..8e5c8573924ac 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index bc4e45f6f60d4..1232bf4143835 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-06-13 +date: 2024-06-17 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 b8f81de6aaeef..98c21f7f70ece 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-06-13 +date: 2024-06-17 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.devdocs.json b/api_docs/kbn_security_plugin_types_public.devdocs.json index 6c39e67266318..637e988957f0e 100644 --- a/api_docs/kbn_security_plugin_types_public.devdocs.json +++ b/api_docs/kbn_security_plugin_types_public.devdocs.json @@ -651,26 +651,6 @@ "plugin": "imageEmbeddable", "path": "src/plugins/image_embeddable/public/components/image_editor/open_image_editor.tsx" }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/index.tsx" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/shared/role_mapping/roles_empty_prompt.tsx" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/shared/role_mapping/roles_empty_prompt.tsx" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/links.ts" diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 90ae24fd87618..057fef5e5ef5d 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-06-13 +date: 2024-06-17 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.devdocs.json b/api_docs/kbn_security_plugin_types_server.devdocs.json index 3702b94894196..2100c7e7f1beb 100644 --- a/api_docs/kbn_security_plugin_types_server.devdocs.json +++ b/api_docs/kbn_security_plugin_types_server.devdocs.json @@ -110,7 +110,7 @@ "section": "def-common.Type", "text": "Type" }, - " | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>>; }>" + " | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>>; }>" ], "path": "x-pack/packages/security/plugin_types_server/src/authentication/api_keys/api_keys.ts", "deprecated": false, @@ -590,7 +590,7 @@ "section": "def-common.KibanaRequest", "text": "KibanaRequest" }, - ", createParams: Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>) => Promise<", + ", createParams: Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>) => Promise<", { "pluginId": "@kbn/security-plugin-types-server", "scope": "server", @@ -638,7 +638,7 @@ "Create operation parameters." ], "signature": [ - "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>" + "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>" ], "path": "x-pack/packages/security/plugin_types_server/src/authentication/api_keys/api_keys.ts", "deprecated": false, @@ -3291,10 +3291,6 @@ "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts" }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts" - }, { "plugin": "lists", "path": "x-pack/plugins/lists/server/get_user.ts" @@ -3355,14 +3351,6 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" }, - { - "plugin": "serverlessSearch", - "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" - }, - { - "plugin": "serverlessSearch", - "path": "x-pack/plugins/serverless_search/server/routes/indices_routes.ts" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/server/routes/api/reauthorize_transforms/route_handler_factory.ts" @@ -4240,7 +4228,7 @@ "label": "CreateAPIKeyParams", "description": [], "signature": [ - "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }> | Readonly<{ metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { type: \"cross_cluster\"; name: string; access: Readonly<{ search?: Readonly<{ query?: any; field_security?: any; allow_restricted_indices?: boolean | undefined; } & { names: string[]; }>[] | undefined; replication?: Readonly<{} & { names: string[]; }>[] | undefined; } & {}>; }>" + "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }> | Readonly<{ metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { type: \"cross_cluster\"; name: string; access: Readonly<{ search?: Readonly<{ query?: any; field_security?: any; allow_restricted_indices?: boolean | undefined; } & { names: string[]; }>[] | undefined; replication?: Readonly<{} & { names: string[]; }>[] | undefined; } & {}>; }>" ], "path": "x-pack/packages/security/plugin_types_server/src/authentication/api_keys/api_keys.ts", "deprecated": false, @@ -4302,7 +4290,7 @@ "label": "CreateRestAPIKeyWithKibanaPrivilegesParams", "description": [], "signature": [ - "{ readonly type?: \"rest\" | undefined; readonly metadata?: Readonly<{} & {}> | undefined; readonly expiration?: string | undefined; readonly name: string; readonly kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }" + "{ readonly type?: \"rest\" | undefined; readonly metadata?: Readonly<{} & {}> | undefined; readonly expiration?: string | undefined; readonly name: string; readonly kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }" ], "path": "x-pack/packages/security/plugin_types_server/src/authentication/api_keys/api_keys.ts", "deprecated": false, @@ -4317,7 +4305,7 @@ "label": "ElasticsearchPrivilegesType", "description": [], "signature": [ - "{ readonly cluster?: string[] | undefined; readonly indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; readonly remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; readonly remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; readonly run_as?: string[] | undefined; }" + "{ readonly cluster?: string[] | undefined; readonly indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; readonly remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; readonly remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; readonly run_as?: string[] | undefined; }" ], "path": "x-pack/packages/security/plugin_types_server/src/authorization/role_schema.ts", "deprecated": false, @@ -4514,7 +4502,7 @@ "section": "def-common.Type", "text": "Type" }, - " | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined>; remote_indices: ", + " | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined>; remote_indices: ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -4522,7 +4510,7 @@ "section": "def-common.Type", "text": "Type" }, - " | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined>; run_as: ", + " | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined>; run_as: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 557835ad7c780..c9087ea8023c5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index b89e24dd6a55a..3a1d5e7369cb2 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-06-13 +date: 2024-06-17 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 88f50935d4f31..e841ca2c8f0bd 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-06-13 +date: 2024-06-17 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 6e1397f63b01a..ba1039d1dfd6f 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-06-13 +date: 2024-06-17 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 4040cde86ed65..ae4b404ccef50 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 0d7c09bb5d7ac..10961d6963e23 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-06-13 +date: 2024-06-17 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 cdd55b3963e65..4814ce044f782 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-06-13 +date: 2024-06-17 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 f511065a1cad9..428eedbb2e807 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index d748d56e6528e..c79ea89803b9d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 504a7da6e5d39..aa2e7bccc0247 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index fae9a44b501ae..06c14f87a45ef 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 888388586d607..daeead88afc6e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index cf2a7cf189149..71b579c0a0d70 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index b0eaf2fa86d3d..4fae5675a8945 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index b6db957fd6029..fb3633c531750 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index a4d0dce433690..2d942f0a44056 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.devdocs.json b/api_docs/kbn_securitysolution_list_constants.devdocs.json index b58ba99b72179..889e28f5dc20c 100644 --- a/api_docs/kbn_securitysolution_list_constants.devdocs.json +++ b/api_docs/kbn_securitysolution_list_constants.devdocs.json @@ -77,39 +77,39 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/constants.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/blocklist/services/blocklists_api_client.ts" + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts" }, { "plugin": "securitySolution", @@ -247,22 +247,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/fleet_integration/handlers/create_event_filters.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" - }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/event_filters/constants.ts" @@ -315,6 +299,22 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/management/pages/event_filters/service/api_client.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts" @@ -461,19 +461,19 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/constants.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts" }, { "plugin": "securitySolution", @@ -481,11 +481,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts" + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/host_isolation_exceptions/host_isolation_exceptions_api_client.ts" + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts" }, { "plugin": "lists", @@ -762,39 +762,39 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" + "path": "x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts" + "path": "x-pack/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts" }, { "plugin": "lists", diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 33e21d817bcb5..bf16d9874b489 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 44ec21a252527..88975150d101f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 8b29641ce74d0..f2393772847ad 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index ab943c4c4767d..36f1312f61b59 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 5ee1384cd55c6..66b123bb07699 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 2eecc329501e6..ebda0f1aa6172 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index df5b3e63f7beb..b5d552e453360 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index 5719ff576b082..9309e3c61b357 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index d367f21fc54ac..3635ca2fe050a 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-06-13 +date: 2024-06-17 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 d415652d3802e..7af28b5703e55 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-06-13 +date: 2024-06-17 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 5c17d7c35b98e..58f50eb9b4a65 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-06-13 +date: 2024-06-17 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 3a6465d1508e5..95b1d08073596 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-06-13 +date: 2024-06-17 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 a67d6ac568946..4d68a8e795e2b 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-06-13 +date: 2024-06-17 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 d698e388bb6b2..22ee70fb1002b 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-06-13 +date: 2024-06-17 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 2cb7e9c37b8ac..c5e0727964851 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 97c62ebc19d5d..e6e7eaf2bd78d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 6181ef4537e18..3488a9ea6bcb6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index ab24a1983f2ad..9511099b23487 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 2307f0f27179a..46591e962fe0c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 10504f051c203..5b2499326c902 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 80b6afe59d7ab..c998ff4165ee6 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-06-13 +date: 2024-06-17 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 902b3dfab9af3..167e09ffee9e1 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-06-13 +date: 2024-06-17 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 6bdfb885edece..b7c756a0313e6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 927929147a840..f27479e18f11f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index ade27c6547768..b36b15944c3b6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 575e253466cbd..391ac024acb87 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index e439fdc0f9478..6c60d31e46ba6 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-06-13 +date: 2024-06-17 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 d49bcc1a12016..cc371e6820af4 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-06-13 +date: 2024-06-17 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 5e3803f2ecd99..039adb8ece3ba 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index c771bc6de9cad..61d3c1988aadc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index d8edd7024070e..0c6b6b8f51194 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index ab281407cea46..f6d2a25b7a603 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 275560068a03b..f958c0f56a69f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index 8cca4b74c1526..2579dadd0415d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 413d033cd9134..a1329fa0de838 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 38737f99e3220..2ecba86c2473c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 5ba9fc7ae1a89..421cf76e284ee 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 40353475303ab..3f64089023a61 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index a6f75f300b7c5..979dbc82c219e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index ce18e4e541ed8..a75d6664bc60e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 2a88cbdb4e667..3f20ea7801109 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index f8f2e3e18e0e5..df30092cd1a33 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 9a18db72a8bdc..e2d39ccd79c50 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 7c5efdb29f17d..729864ab7ab7f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 6e4960ca1326c..52ab086a5f40f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index e034396f208d6..248c645716584 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 11434d8691736..a4454b8ed220d 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index f419f25213c24..d1f2c0fe743e9 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index e009fd5b88e62..5e1d0141386a4 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index f1471ad77d531..f96409b7154f1 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index cbc92fe3981a2..52c275264fe93 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 3d98ad5ee473f..2a4c3c6400fe2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index ec8b9b7080563..7c34954ad71ea 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 4f6c251de8e57..6abe34b608bbe 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index b053d40c6d59d..01cd0aa5c092b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index d757df4209f15..cf7dd2955ee5c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index f46c19adea825..9f7e481a4e92f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 8fd362fadf801..c1e25e156c40c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 7da9d089267aa..c375dc911e6ad 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 9ee984f74d7d8..0b3d79c530c5e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 408c05861628d..6ddba8dc26974 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index c71cc839772cf..c37657a4c6b4f 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-06-13 +date: 2024-06-17 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 1794c0c0b8c17..ff3549b2dbfa7 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-06-13 +date: 2024-06-17 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 6eccfd2f1c73e..4e448d4eb1a64 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 826067d528b8d..571fa45648a6a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 2afe82623b695..a89e7fa45f8b4 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 5c2b4ab4614f9..461b70833eef4 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-06-13 +date: 2024-06-17 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 e2292e8ab7b33..3ebf1520252bb 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-06-13 +date: 2024-06-17 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 fac74e1c0beb3..78669fbf897c6 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-06-13 +date: 2024-06-17 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 945d5e77e217e..b49e4cd037a87 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-06-13 +date: 2024-06-17 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 051631865dc90..9efd9400402da 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index fe20c3f6f5254..fb9ad77c72eff 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index c7ca77b2bf6d7..8addb8d57ed80 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 96c987d7369fb..babfa755367fc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index b43eba934c6ae..cfe2d5adb12f6 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-06-13 +date: 2024-06-17 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 8aa009116d369..b25351326f188 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-06-13 +date: 2024-06-17 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 75427052229c3..e0d919234d3a6 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-06-13 +date: 2024-06-17 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 f63dfb29a7557..35516a91b7ec0 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-06-13 +date: 2024-06-17 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 d5450659dd1e3..3cde751797a54 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-06-13 +date: 2024-06-17 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 e91af306d5bb7..566058b20edcd 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-06-13 +date: 2024-06-17 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 8618ebc403604..3e3adc7521fb9 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-06-13 +date: 2024-06-17 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 51e5d3301b2e9..77b41c7eed6ab 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 1b7bb241e4f8e..d7b59ac3f14ea 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index f85516fd5a169..a5081ef999d42 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index db152c6b8ba6a..3f2a12356443f 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-06-13 +date: 2024-06-17 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 a091effa00a74..6a624e6e06f1c 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-06-13 +date: 2024-06-17 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 888da021ecd04..6e91f481911fe 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-06-13 +date: 2024-06-17 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 464715a176093..79644c810c284 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-06-13 +date: 2024-06-17 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 39431e1ee3d00..63153d9efd0da 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 4da362fa70311..772acffc1bd28 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-06-13 +date: 2024-06-17 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 1652997a6f10a..0d662c99e6770 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index fae97f0a09699..ba8d0979b80a5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 72c800c6d45b8..0d0a98f5a8ff3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 77db724073099..c9ab77fb77b31 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index c232ea0bcdedc..82ca8dad4c608 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 0e1e54d5124cd..e146a2fc37e13 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index fa270f9332f54..1297b5e11f2e4 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index ae3056192fdbb..7b4f39b14b024 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-06-13 +date: 2024-06-17 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 1ae05492f15cf..2584222ce481d 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-06-13 +date: 2024-06-17 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 4b3ebcdb089ff..418e51c4a6f1d 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-06-13 +date: 2024-06-17 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 f170e51c8eb3a..588514ebf3ef4 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-06-13 +date: 2024-06-17 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 8d7d7a74e980c..f631d3ee2e99b 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-06-13 +date: 2024-06-17 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 48646696d1df6..68cbc3e157e0a 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-06-13 +date: 2024-06-17 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 dcaefdcaf24c2..2fc02980dd101 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index 7fa01d6407bf2..d143282a71fea 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -176,1503 +176,6 @@ } ], "initialIsOpen": false - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable", - "type": "Class", - "tags": [], - "label": "MapEmbeddable", - "description": [], - "signature": [ - { - "pluginId": "maps", - "scope": "public", - "docId": "kibMapsPluginApi", - "section": "def-public.MapEmbeddable", - "text": "MapEmbeddable" - }, - " extends ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.Embeddable", - "text": "Embeddable" - }, - "<", - { - "pluginId": "maps", - "scope": "public", - "docId": "kibMapsPluginApi", - "section": "def-public.MapEmbeddableInput", - "text": "MapEmbeddableInput" - }, - ", ", - { - "pluginId": "maps", - "scope": "public", - "docId": "kibMapsPluginApi", - "section": "def-public.MapEmbeddableOutput", - "text": "MapEmbeddableOutput" - }, - ", any> implements ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ReferenceOrValueEmbeddable", - "text": "ReferenceOrValueEmbeddable" - }, - "<", - "MapByValueInput", - ", ", - "MapByReferenceInput", - ">,", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.FilterableEmbeddable", - "text": "FilterableEmbeddable" - } - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.deferEmbeddableLoad", - "type": "boolean", - "tags": [], - "label": "deferEmbeddableLoad", - "description": [], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.Unnamed", - "type": "Function", - "tags": [], - "label": "Constructor", - "description": [], - "signature": [ - "any" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.Unnamed.$1", - "type": "Object", - "tags": [], - "label": "config", - "description": [], - "signature": [ - "MapEmbeddableConfig" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.Unnamed.$2", - "type": "CompoundType", - "tags": [], - "label": "initialInput", - "description": [], - "signature": [ - { - "pluginId": "maps", - "scope": "public", - "docId": "kibMapsPluginApi", - "section": "def-public.MapEmbeddableInput", - "text": "MapEmbeddableInput" - } - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.Unnamed.$3", - "type": "Object", - "tags": [], - "label": "parent", - "description": [], - "signature": [ - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.IContainer", - "text": "IContainer" - }, - "<{}, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerInput", - "text": "ContainerInput" - }, - "<{}>, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ContainerOutput", - "text": "ContainerOutput" - }, - "> | undefined" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getOnRenderComplete$", - "type": "Function", - "tags": [], - "label": "getOnRenderComplete$", - "description": [], - "signature": [ - "() => ", - "Observable", - "" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.reportsEmbeddableLoad", - "type": "Function", - "tags": [], - "label": "reportsEmbeddableLoad", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.inputIsRefType", - "type": "Function", - "tags": [], - "label": "inputIsRefType", - "description": [], - "signature": [ - "(input: ", - "MapByValueInput", - " | ", - "MapByReferenceInput", - ") => input is ", - "MapByReferenceInput" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.inputIsRefType.$1", - "type": "CompoundType", - "tags": [], - "label": "input", - "description": [], - "signature": [ - "MapByValueInput", - " | ", - "MapByReferenceInput" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getInputAsRefType", - "type": "Function", - "tags": [], - "label": "getInputAsRefType", - "description": [], - "signature": [ - "() => Promise<", - "MapByReferenceInput", - ">" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getExplicitInputIsEqual", - "type": "Function", - "tags": [], - "label": "getExplicitInputIsEqual", - "description": [], - "signature": [ - "(lastExplicitInput: Partial<", - "MapByValueInput", - " | ", - "MapByReferenceInput", - ">) => Promise" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getExplicitInputIsEqual.$1", - "type": "CompoundType", - "tags": [], - "label": "lastExplicitInput", - "description": [], - "signature": [ - "Partial<", - "MapByValueInput", - " | ", - "MapByReferenceInput", - ">" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getInputAsValueType", - "type": "Function", - "tags": [], - "label": "getInputAsValueType", - "description": [], - "signature": [ - "() => Promise<", - "MapByValueInput", - ">" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getLayerList", - "type": "Function", - "tags": [], - "label": "getLayerList", - "description": [], - "signature": [ - "() => ", - "ILayer", - "[]" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getFilters", - "type": "Function", - "tags": [], - "label": "getFilters", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[]" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getQuery", - "type": "Function", - "tags": [], - "label": "getQuery", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | undefined" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.supportedTriggers", - "type": "Function", - "tags": [], - "label": "supportedTriggers", - "description": [], - "signature": [ - "() => string[]" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setRenderTooltipContent", - "type": "Function", - "tags": [], - "label": "setRenderTooltipContent", - "description": [], - "signature": [ - "(renderTooltipContent: ", - "RenderToolTipContent", - ") => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setRenderTooltipContent.$1", - "type": "Function", - "tags": [], - "label": "renderTooltipContent", - "description": [], - "signature": [ - "RenderToolTipContent" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setEventHandlers", - "type": "Function", - "tags": [], - "label": "setEventHandlers", - "description": [], - "signature": [ - "(eventHandlers: ", - "EventHandlers", - ") => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setEventHandlers.$1", - "type": "Object", - "tags": [], - "label": "eventHandlers", - "description": [], - "signature": [ - "EventHandlers" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setIsSharable", - "type": "Function", - "tags": [], - "label": "setIsSharable", - "description": [], - "signature": [ - "(isSharable: boolean) => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setIsSharable.$1", - "type": "boolean", - "tags": [], - "label": "isSharable", - "description": [], - "signature": [ - "boolean" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getInspectorAdapters", - "type": "Function", - "tags": [], - "label": "getInspectorAdapters", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "inspector", - "scope": "common", - "docId": "kibInspectorPluginApi", - "section": "def-common.Adapters", - "text": "Adapters" - } - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.onUpdate", - "type": "Function", - "tags": [], - "label": "onUpdate", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._getIsMovementSynchronized", - "type": "Function", - "tags": [], - "label": "_getIsMovementSynchronized", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._getIsFilterByMapExtent", - "type": "Function", - "tags": [], - "label": "_getIsFilterByMapExtent", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._gotoSynchronizedLocation", - "type": "Function", - "tags": [], - "label": "_gotoSynchronizedLocation", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._propogateMapMovement", - "type": "Function", - "tags": [], - "label": "_propogateMapMovement", - "description": [], - "signature": [ - "(lat: number, lon: number, zoom: number) => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._propogateMapMovement.$1", - "type": "number", - "tags": [], - "label": "lat", - "description": [], - "signature": [ - "number" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._propogateMapMovement.$2", - "type": "number", - "tags": [], - "label": "lon", - "description": [], - "signature": [ - "number" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._propogateMapMovement.$3", - "type": "number", - "tags": [], - "label": "zoom", - "description": [], - "signature": [ - "number" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._getInputFilters", - "type": "Function", - "tags": [], - "label": "_getInputFilters", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[]" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._getSearchSessionId", - "type": "Function", - "tags": [], - "label": "_getSearchSessionId", - "description": [], - "signature": [ - "() => string | undefined" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._dispatchSetQuery", - "type": "Function", - "tags": [], - "label": "_dispatchSetQuery", - "description": [], - "signature": [ - "({ forceRefresh }: { forceRefresh: boolean; }) => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._dispatchSetQuery.$1", - "type": "Object", - "tags": [], - "label": "{ forceRefresh }", - "description": [], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._dispatchSetQuery.$1.forceRefresh", - "type": "boolean", - "tags": [], - "label": "forceRefresh", - "description": [], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._dispatchSetChartsPaletteServiceGetColor", - "type": "Function", - "tags": [], - "label": "_dispatchSetChartsPaletteServiceGetColor", - "description": [], - "signature": [ - "(syncColors?: boolean | undefined) => Promise" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._dispatchSetChartsPaletteServiceGetColor.$1", - "type": "CompoundType", - "tags": [], - "label": "syncColors", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.render", - "type": "Function", - "tags": [], - "label": "render", - "description": [ - "\n" - ], - "signature": [ - "(domNode: HTMLElement) => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.render.$1", - "type": "Object", - "tags": [], - "label": "domNode", - "description": [], - "signature": [ - "HTMLElement" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setLayerList", - "type": "Function", - "tags": [], - "label": "setLayerList", - "description": [], - "signature": [ - "(layerList: ", - { - "pluginId": "maps", - "scope": "common", - "docId": "kibMapsPluginApi", - "section": "def-common.LayerDescriptor", - "text": "LayerDescriptor" - }, - "[]) => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.setLayerList.$1", - "type": "Array", - "tags": [], - "label": "layerList", - "description": [], - "signature": [ - { - "pluginId": "maps", - "scope": "common", - "docId": "kibMapsPluginApi", - "section": "def-common.LayerDescriptor", - "text": "LayerDescriptor" - }, - "[]" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.updateLayerById", - "type": "Function", - "tags": [], - "label": "updateLayerById", - "description": [], - "signature": [ - "(layerDescriptor: ", - { - "pluginId": "maps", - "scope": "common", - "docId": "kibMapsPluginApi", - "section": "def-common.LayerDescriptor", - "text": "LayerDescriptor" - }, - ") => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.updateLayerById.$1", - "type": "Object", - "tags": [], - "label": "layerDescriptor", - "description": [], - "signature": [ - { - "pluginId": "maps", - "scope": "common", - "docId": "kibMapsPluginApi", - "section": "def-common.LayerDescriptor", - "text": "LayerDescriptor" - } - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.onSingleValueTrigger", - "type": "Function", - "tags": [], - "label": "onSingleValueTrigger", - "description": [], - "signature": [ - "(actionId: string, key: string, value: ", - "RawValue", - ") => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.onSingleValueTrigger.$1", - "type": "string", - "tags": [], - "label": "actionId", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.onSingleValueTrigger.$2", - "type": "string", - "tags": [], - "label": "key", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.onSingleValueTrigger.$3", - "type": "CompoundType", - "tags": [], - "label": "value", - "description": [], - "signature": [ - "RawValue" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.addFilters", - "type": "Function", - "tags": [], - "label": "addFilters", - "description": [], - "signature": [ - "(filters: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[], actionId?: string) => Promise" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.addFilters.$1", - "type": "Array", - "tags": [], - "label": "filters", - "description": [], - "signature": [ - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[]" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.addFilters.$2", - "type": "string", - "tags": [], - "label": "actionId", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getFilterActions", - "type": "Function", - "tags": [], - "label": "getFilterActions", - "description": [], - "signature": [ - "() => Promise<", - { - "pluginId": "uiActions", - "scope": "public", - "docId": "kibUiActionsPluginApi", - "section": "def-public.Action", - "text": "Action" - }, - "[]>" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getActionContext", - "type": "Function", - "tags": [], - "label": "getActionContext", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "uiActions", - "scope": "public", - "docId": "kibUiActionsPluginApi", - "section": "def-public.ActionExecutionContext", - "text": "ActionExecutionContext" - }, - "" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.linkToLibrary", - "type": "Uncategorized", - "tags": [], - "label": "linkToLibrary", - "description": [], - "signature": [ - "undefined" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.unlinkFromLibrary", - "type": "Uncategorized", - "tags": [], - "label": "unlinkFromLibrary", - "description": [], - "signature": [ - "undefined" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.checkForDuplicateTitle", - "type": "Function", - "tags": [], - "label": "checkForDuplicateTitle", - "description": [], - "signature": [ - "(newTitle: string, isTitleDuplicateConfirmed: boolean, onTitleDuplicate: () => void) => Promise" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.checkForDuplicateTitle.$1", - "type": "string", - "tags": [], - "label": "newTitle", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.checkForDuplicateTitle.$2", - "type": "boolean", - "tags": [], - "label": "isTitleDuplicateConfirmed", - "description": [], - "signature": [ - "boolean" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.checkForDuplicateTitle.$3", - "type": "Function", - "tags": [], - "label": "onTitleDuplicate", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.saveToLibrary", - "type": "Function", - "tags": [], - "label": "saveToLibrary", - "description": [], - "signature": [ - "(title: string) => Promise" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.saveToLibrary.$1", - "type": "string", - "tags": [], - "label": "title", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getByReferenceState", - "type": "Function", - "tags": [], - "label": "getByReferenceState", - "description": [], - "signature": [ - "(libraryId: string) => { savedObjectId: string; id: string; title?: string | undefined; query?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | undefined; filters?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; description?: string | undefined; version?: string | undefined; executionContext?: ", - { - "pluginId": "@kbn/core-execution-context-common", - "scope": "common", - "docId": "kibKbnCoreExecutionContextCommonPluginApi", - "section": "def-common.KibanaExecutionContext", - "text": "KibanaExecutionContext" - }, - " | undefined; viewMode?: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.ViewMode", - "text": "ViewMode" - }, - " | undefined; lastReloadRequestTime?: number | undefined; hidePanelTitles?: boolean | undefined; enhancements?: ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, - " | undefined; disabledActions?: string[] | undefined; disableTriggers?: boolean | undefined; searchSessionId?: string | undefined; syncColors?: boolean | undefined; syncCursor?: boolean | undefined; syncTooltips?: boolean | undefined; timeRange?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; timeslice?: [number, number] | undefined; isLayerTOCOpen?: boolean | undefined; openTOCDetails?: string[] | undefined; mapCenter?: ", - "MapCenterAndZoom", - " | undefined; mapBuffer?: ", - "MapExtent", - " | undefined; mapSettings?: Partial<", - "MapSettings", - "> | undefined; hiddenLayers?: string[] | undefined; hideFilterActions?: boolean | undefined; filterByMapExtent?: boolean | undefined; isMovementSynchronized?: boolean | undefined; }" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getByReferenceState.$1", - "type": "string", - "tags": [], - "label": "libraryId", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.getByValueState", - "type": "Function", - "tags": [], - "label": "getByValueState", - "description": [], - "signature": [ - "() => { attributes: ", - "MapAttributes", - "; id: string; title?: string | undefined; query?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | undefined; filters?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; description?: string | undefined; version?: string | undefined; executionContext?: ", - { - "pluginId": "@kbn/core-execution-context-common", - "scope": "common", - "docId": "kibKbnCoreExecutionContextCommonPluginApi", - "section": "def-common.KibanaExecutionContext", - "text": "KibanaExecutionContext" - }, - " | undefined; viewMode?: ", - { - "pluginId": "embeddable", - "scope": "common", - "docId": "kibEmbeddablePluginApi", - "section": "def-common.ViewMode", - "text": "ViewMode" - }, - " | undefined; lastReloadRequestTime?: number | undefined; hidePanelTitles?: boolean | undefined; enhancements?: ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.SerializableRecord", - "text": "SerializableRecord" - }, - " | undefined; disabledActions?: string[] | undefined; disableTriggers?: boolean | undefined; searchSessionId?: string | undefined; syncColors?: boolean | undefined; syncCursor?: boolean | undefined; syncTooltips?: boolean | undefined; timeRange?: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined; timeslice?: [number, number] | undefined; isLayerTOCOpen?: boolean | undefined; openTOCDetails?: string[] | undefined; mapCenter?: ", - "MapCenterAndZoom", - " | undefined; mapBuffer?: ", - "MapExtent", - " | undefined; mapSettings?: Partial<", - "MapSettings", - "> | undefined; hiddenLayers?: string[] | undefined; hideFilterActions?: boolean | undefined; filterByMapExtent?: boolean | undefined; isMovementSynchronized?: boolean | undefined; }" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._setMapExtentFilter", - "type": "Function", - "tags": [], - "label": "_setMapExtentFilter", - "description": [], - "signature": [ - "(() => void) & ", - "Cancelable" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._clearMapExtentFilter", - "type": "Function", - "tags": [], - "label": "_clearMapExtentFilter", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.destroy", - "type": "Function", - "tags": [], - "label": "destroy", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable.reload", - "type": "Function", - "tags": [], - "label": "reload", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._mapSyncHandler", - "type": "Function", - "tags": [], - "label": "_mapSyncHandler", - "description": [], - "signature": [ - "(lat: number, lon: number, zoom: number) => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._mapSyncHandler.$1", - "type": "number", - "tags": [], - "label": "lat", - "description": [], - "signature": [ - "number" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._mapSyncHandler.$2", - "type": "number", - "tags": [], - "label": "lon", - "description": [], - "signature": [ - "number" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._mapSyncHandler.$3", - "type": "number", - "tags": [], - "label": "zoom", - "description": [], - "signature": [ - "number" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "maps", - "id": "def-public.MapEmbeddable._handleStoreChanges", - "type": "Function", - "tags": [], - "label": "_handleStoreChanges", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/maps/public/embeddable/map_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - } - ], - "initialIsOpen": false } ], "functions": [ @@ -1693,7 +196,7 @@ "text": "MapApi" } ], - "path": "x-pack/plugins/maps/public/embeddable/map_api.ts", + "path": "x-pack/plugins/maps/public/react_embeddable/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1707,7 +210,7 @@ "signature": [ "unknown" ], - "path": "x-pack/plugins/maps/public/embeddable/map_api.ts", + "path": "x-pack/plugins/maps/public/react_embeddable/types.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -4333,30 +2836,100 @@ "label": "MapApi", "description": [], "signature": [ + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.DefaultEmbeddableApi", + "text": "DefaultEmbeddableApi" + }, + "<", + { + "pluginId": "maps", + "scope": "public", + "docId": "kibMapsPluginApi", + "section": "def-public.MapSerializedState", + "text": "MapSerializedState" + }, + ", ", + { + "pluginId": "maps", + "scope": "public", + "docId": "kibMapsPluginApi", + "section": "def-public.MapSerializedState", + "text": "MapSerializedState" + }, + "> & Partial<{ enhancements: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "public", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-public.DynamicActionManager", + "text": "DynamicActionManager" + }, + "; }; setDynamicActions: (newState: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined) => void; dynamicActionsState$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>; }> & Partial<", { "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.HasType", - "text": "HasType" + "section": "def-common.HasEditCapabilities", + "text": "HasEditCapabilities" }, - "<\"map\"> & { getLayerList: () => ", - "ILayer", - "[]; reload: () => void; } & ", + "> & ", + { + "pluginId": "inspector", + "scope": "public", + "docId": "kibInspectorPluginApi", + "section": "def-public.HasInspectorAdapters", + "text": "HasInspectorAdapters" + }, + " & ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesDataViews", - "text": "PublishesDataViews" + "section": "def-common.HasSupportedTriggers", + "text": "HasSupportedTriggers" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesDataLoading", + "text": "PublishesDataLoading" }, " & ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesPanelTitle", - "text": "PublishesPanelTitle" + "section": "def-common.PublishesDataViews", + "text": "PublishesDataViews" }, " & ", { @@ -4398,79 +2971,104 @@ "section": "def-common.AggregateQuery", "text": "AggregateQuery" }, - " | undefined>; } & Partial<", + " | undefined>; } & ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.HasParentApi", - "text": "HasParentApi" + "section": "def-common.HasLibraryTransforms", + "text": "HasLibraryTransforms" + }, + "<", + { + "pluginId": "maps", + "scope": "public", + "docId": "kibMapsPluginApi", + "section": "def-public.MapSerializedState", + "text": "MapSerializedState" + }, + "> & { getLayerList: () => ", + "ILayer", + "[]; reload: () => void; setEventHandlers: (eventHandlers: ", + "EventHandlers", + ") => void; setLayerList: (layerList: ", + { + "pluginId": "maps", + "scope": "common", + "docId": "kibMapsPluginApi", + "section": "def-common.LayerDescriptor", + "text": "LayerDescriptor" + }, + "[]) => void; updateLayerById: (layerDescriptor: ", + { + "pluginId": "maps", + "scope": "common", + "docId": "kibMapsPluginApi", + "section": "def-common.LayerDescriptor", + "text": "LayerDescriptor" }, - ">" + ") => void; onRenderComplete$: ", + "Observable", + "; }" ], - "path": "x-pack/plugins/maps/public/embeddable/map_api.ts", + "path": "x-pack/plugins/maps/public/react_embeddable/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "maps", - "id": "def-public.MapEmbeddableInput", - "type": "Type", + "id": "def-public.MAPS_APP_LOCATOR", + "type": "string", "tags": [], - "label": "MapEmbeddableInput", + "label": "MAPS_APP_LOCATOR", "description": [], "signature": [ - "MapByValueInput", - " | ", - "MapByReferenceInput" + "\"MAPS_APP_LOCATOR\"" ], - "path": "x-pack/plugins/maps/public/embeddable/types.ts", + "path": "x-pack/plugins/maps/public/locators/map_locator/locator_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "maps", - "id": "def-public.MapEmbeddableOutput", + "id": "def-public.MapSerializedState", "type": "Type", "tags": [], - "label": "MapEmbeddableOutput", + "label": "MapSerializedState", "description": [], "signature": [ { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.EmbeddableOutput", - "text": "EmbeddableOutput" - }, - " & { indexPatterns: ", + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.SerializedTitles", + "text": "SerializedTitles" + }, + " & Partial<", + "DynamicActionsSerializedState", + "> & { attributes?: ", + "MapAttributes", + " | undefined; savedObjectId?: string | undefined; isLayerTOCOpen?: boolean | undefined; openTOCDetails?: string[] | undefined; mapCenter?: ", + "MapCenterAndZoom", + " | undefined; mapBuffer?: ", + "MapExtent", + " | undefined; mapSettings?: Partial<", + "MapSettings", + "> | undefined; hiddenLayers?: string[] | undefined; hideFilterActions?: boolean | undefined; timeRange?: ", { - "pluginId": "dataViews", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" }, - "[]; }" - ], - "path": "x-pack/plugins/maps/public/embeddable/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "maps", - "id": "def-public.MAPS_APP_LOCATOR", - "type": "string", - "tags": [], - "label": "MAPS_APP_LOCATOR", - "description": [], - "signature": [ - "\"MAPS_APP_LOCATOR\"" + " | undefined; filterByMapExtent?: boolean | undefined; isMovementSynchronized?: boolean | undefined; isSharable?: boolean | undefined; tooltipRenderer?: ", + "RenderToolTipContent", + " | undefined; }" ], - "path": "x-pack/plugins/maps/public/locators/map_locator/locator_definition.ts", + "path": "x-pack/plugins/maps/public/react_embeddable/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 1c8ca4028fecf..acd7a2070f619 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 286 | 0 | 281 | 31 | +| 209 | 0 | 205 | 28 | ## Client diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index ba6b93d7083e5..99a119682fa7e 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-06-13 +date: 2024-06-17 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 1dd4ef21807e1..8f48d1167fbbd 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-06-13 +date: 2024-06-17 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 7bb947c63a348..4a7428c3c49bd 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1688,7 +1688,9 @@ "MlTrainedModelConfig", ">; installElasticTrainedModelConfig(modelId: string): Promise<", "MlTrainedModelConfig", - ">; }; inferenceModels: { createInferenceEndpoint(inferenceId: string, taskType: ", + ">; getModelsDownloadStatus(): Promise>; }; inferenceModels: { createInferenceEndpoint(inferenceId: string, taskType: ", "InferenceTaskType", ", modelConfig: ", { diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index e9e7c625963b7..95a0187a6ad75 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-06-13 +date: 2024-06-17 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 | |-------------------|-----------|------------------------|-----------------| -| 154 | 3 | 67 | 101 | +| 154 | 3 | 67 | 102 | ## Client diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 85e537b0f854f..7832f4f2bf928 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-06-13 +date: 2024-06-17 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 237c5c7c682f4..d51708b8f602f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index 018427df83e96..d58b02a3c4b85 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 60e7cf191f7df..5063e89578106 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 0dedc1dc04e72..05b055cb03bcb 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-06-13 +date: 2024-06-17 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 1b5956c537647..5a4e745dadc11 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-06-13 +date: 2024-06-17 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 29b56ca078402..df9e71af6dee5 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 0ae5d11213a4a..278f66f3723ec 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -2599,7 +2599,7 @@ "label": "observabilityShared", "description": [], "signature": [ - "{ locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", + "{ registerProfilingComponent: (key: string, component: React.FC) => void; locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", "Observable", "<", { @@ -10192,7 +10192,7 @@ "label": "value", "description": [], "signature": [ - "false" + "true" ], "path": "x-pack/plugins/observability_solution/observability/server/ui_settings.ts", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 23179280f7dcc..1a318291fa2a6 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json index 6dba439cb25b2..5df73feb9b25a 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -1,7 +1,102 @@ { "id": "observabilityAIAssistant", "client": { - "classes": [], + "classes": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ShortIdTable", + "type": "Class", + "tags": [], + "label": "ShortIdTable", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ShortIdTable.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ShortIdTable.take", + "type": "Function", + "tags": [], + "label": "take", + "description": [], + "signature": [ + "(originalId: string) => string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ShortIdTable.take.$1", + "type": "string", + "tags": [], + "label": "originalId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ShortIdTable.lookup", + "type": "Function", + "tags": [], + "label": "lookup", + "description": [], + "signature": [ + "(shortId: string) => string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ShortIdTable.lookup.$1", + "type": "string", + "tags": [], + "label": "shortId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "functions": [ { "parentPluginId": "observabilityAIAssistant", @@ -11,7 +106,7 @@ "label": "AssistantAvatar", "description": [], "signature": [ - "({ size = 's', css }: ", + "({ size = 's', css, className }: ", "AssistantAvatarProps", ") => JSX.Element" ], @@ -24,7 +119,7 @@ "id": "def-public.AssistantAvatar.$1", "type": "Object", "tags": [], - "label": "{ size = 's', css }", + "label": "{ size = 's', css, className }", "description": [], "signature": [ "AssistantAvatarProps" @@ -202,6 +297,37 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.concatenateChatCompletionChunks", + "type": "Function", + "tags": [], + "label": "concatenateChatCompletionChunks", + "description": [], + "signature": [ + "() => (source: ", + "Observable", + "<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionChunkEvent", + "text": "ChatCompletionChunkEvent" + }, + ">) => ", + "Observable", + "<", + "ConcatenatedMessage", + ">" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/concatenate_chat_completion_chunks.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.ConnectorSelectorBase", @@ -385,11 +511,9 @@ "label": "createScreenContextAction", "description": [], "signature": [ - "(definition: TActionDefinition, respond: ", - "ScreenContextActionRespondFunction", - ") => ", + "(definition: TActionDefinition, respond: TRespondFunction) => ", "ScreenContextActionDefinition", - "" + ">" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_screen_context_action.ts", "deprecated": false, @@ -418,8 +542,7 @@ "label": "respond", "description": [], "signature": [ - "ScreenContextActionRespondFunction", - "" + "TRespondFunction" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_screen_context_action.ts", "deprecated": false, @@ -869,6 +992,165 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.DiscoveredDataset", + "type": "Interface", + "tags": [], + "label": "DiscoveredDataset", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.DiscoveredDataset.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.DiscoveredDataset.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.DiscoveredDataset.indexPatterns", + "type": "Array", + "tags": [], + "label": "indexPatterns", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.DiscoveredDataset.columns", + "type": "Array", + "tags": [], + "label": "columns", + "description": [], + "signature": [ + "unknown[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FunctionDefinition", + "type": "Interface", + "tags": [], + "label": "FunctionDefinition", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, + "" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FunctionDefinition.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FunctionDefinition.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FunctionDefinition.visibility", + "type": "CompoundType", + "tags": [], + "label": "visibility", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionVisibility", + "text": "FunctionVisibility" + }, + " | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FunctionDefinition.descriptionForUser", + "type": "string", + "tags": [], + "label": "descriptionForUser", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FunctionDefinition.parameters", + "type": "Uncategorized", + "tags": [], + "label": "parameters", + "description": [], + "signature": [ + "TParameters | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.KnowledgeBaseEntry", @@ -1155,15 +1437,23 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; function?: \"none\" | \"auto\" | undefined; signal: AbortSignal; }) => ", + "[]; connectorId: string; functions?: Pick<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, + ", \"name\" | \"description\" | \"parameters\">[] | undefined; functionCall?: string | undefined; signal: AbortSignal; }) => ", "Observable", "<", { "pluginId": "observabilityAIAssistant", "scope": "common", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.StreamingChatResponseEventWithoutError", - "text": "StreamingChatResponseEventWithoutError" + "section": "def-common.ChatCompletionChunkEvent", + "text": "ChatCompletionChunkEvent" }, ">" ], @@ -1231,13 +1521,35 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.function", - "type": "CompoundType", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.functions", + "type": "Array", + "tags": [], + "label": "functions", + "description": [], + "signature": [ + "Pick<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, + ", \"name\" | \"description\" | \"parameters\">[] | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.functionCall", + "type": "string", "tags": [], - "label": "function", + "label": "functionCall", "description": [], "signature": [ - "\"none\" | \"auto\" | undefined" + "string | undefined" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, @@ -1280,7 +1592,9 @@ "section": "def-common.Message", "text": "Message" }, - "[]; persist: boolean; disableFunctions: boolean; signal: AbortSignal; responseLanguage: string; }) => ", + "[]; persist: boolean; disableFunctions: boolean | { except: string[]; }; signal: AbortSignal; responseLanguage?: string | undefined; instructions?: ", + "UserInstructionOrPlainText", + "[] | undefined; }) => ", "Observable", "<", { @@ -1385,10 +1699,13 @@ { "parentPluginId": "observabilityAIAssistant", "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.disableFunctions", - "type": "boolean", + "type": "CompoundType", "tags": [], "label": "disableFunctions", "description": [], + "signature": [ + "boolean | { except: string[]; }" + ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, "trackAdoption": false @@ -1414,6 +1731,24 @@ "tags": [], "label": "responseLanguage", "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.instructions", + "type": "Array", + "tags": [], + "label": "instructions", + "description": [], + "signature": [ + "UserInstructionOrPlainText", + "[] | undefined" + ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, "trackAdoption": false @@ -1715,7 +2050,7 @@ "label": "callApi", "description": [], "signature": [ - "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", + "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", { "pluginId": "@kbn/server-route-repository", "scope": "common", @@ -2134,20 +2469,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "PartialC", "<{ body: ", "PartialC", @@ -2183,7 +2532,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -2228,20 +2577,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "TypeC", "<{ body: ", "TypeC", @@ -2263,12 +2626,28 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/recall\": { endpoint: \"POST /internal/observability_ai_assistant/chat/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ prompt: ", + "StringC", + "; context: ", + "StringC", + "; connectorId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { prompt: string; context: string; connectorId: string; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", "<{ body: ", @@ -2750,20 +3129,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "PartialC", "<{ body: ", "PartialC", @@ -2799,7 +3192,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -2844,20 +3237,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "TypeC", "<{ body: ", "TypeC", @@ -2879,12 +3286,28 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/recall\": { endpoint: \"POST /internal/observability_ai_assistant/chat/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ prompt: ", + "StringC", + "; context: ", + "StringC", + "; connectorId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { prompt: string; context: string; connectorId: string; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", "<{ body: ", @@ -3461,6 +3884,18 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.StreamingChatResponseEventType", + "type": "Enum", + "tags": [], + "label": "StreamingChatResponseEventType", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.VisualizeESQLUserIntention", @@ -3969,20 +4404,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "PartialC", "<{ body: ", "PartialC", @@ -4018,7 +4467,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -4063,20 +4512,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "TypeC", "<{ body: ", "TypeC", @@ -4098,12 +4561,28 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/recall\": { endpoint: \"POST /internal/observability_ai_assistant/chat/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ prompt: ", + "StringC", + "; context: ", + "StringC", + "; connectorId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { prompt: string; context: string; connectorId: string; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", "<{ body: ", @@ -4256,6 +4735,29 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatCompletionChunkEvent", + "type": "Type", + "tags": [], + "label": "ChatCompletionChunkEvent", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventType", + "text": "StreamingChatResponseEventType" + }, + ".ChatCompletionChunk; } & { id: string; message: { content?: string | undefined; function_call?: { name?: string | undefined; arguments?: string | undefined; } | undefined; }; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.CompatibleJSONSchema", @@ -4267,23 +4769,77 @@ "{ type?: ", "JSONSchema7TypeName", " | undefined; enum?: JSONSchemaOrPrimitive[] | readonly JSONSchemaOrPrimitive[] | undefined; const?: JSONSchemaOrPrimitive | undefined; minLength?: number | undefined; maxLength?: number | undefined; items?: ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, " | ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, "[] | undefined; required?: string[] | readonly string[] | undefined; properties?: Record | undefined; allOf?: ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, "[] | readonly ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, "[] | undefined; anyOf?: ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, "[] | readonly ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, "[] | undefined; oneOf?: ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, "[] | readonly ", - "CompatibleJSONSchema", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, "[] | undefined; description?: string | undefined; }" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", @@ -4740,20 +5296,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "PartialC", "<{ body: ", "PartialC", @@ -4789,7 +5359,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -4834,20 +5404,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "TypeC", "<{ body: ", "TypeC", @@ -4869,12 +5453,28 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/recall\": { endpoint: \"POST /internal/observability_ai_assistant/chat/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ prompt: ", + "StringC", + "; context: ", + "StringC", + "; connectorId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { prompt: string; context: string; connectorId: string; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", "<{ body: ", @@ -4970,7 +5570,7 @@ "label": "ObservabilityAIAssistantAPIEndpoint", "description": [], "signature": [ - "\"POST /internal/observability_ai_assistant/chat\" | \"POST /internal/observability_ai_assistant/chat/complete\" | \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\" | \"GET /internal/observability_ai_assistant/conversation/{conversationId}\" | \"POST /internal/observability_ai_assistant/conversations\" | \"POST /internal/observability_ai_assistant/conversation\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\" | \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\" | \"GET /internal/observability_ai_assistant/connectors\" | \"GET /internal/observability_ai_assistant/functions\" | \"POST /internal/observability_ai_assistant/functions/recall\" | \"POST /internal/observability_ai_assistant/functions/summarize\" | \"POST /internal/observability_ai_assistant/kb/setup\" | \"GET /internal/observability_ai_assistant/kb/status\" | \"GET /internal/observability_ai_assistant/kb/entries\" | \"POST /internal/observability_ai_assistant/kb/entries/import\" | \"POST /internal/observability_ai_assistant/kb/entries/save\" | \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\"" + "\"POST /internal/observability_ai_assistant/chat\" | \"POST /internal/observability_ai_assistant/chat/recall\" | \"POST /internal/observability_ai_assistant/chat/complete\" | \"POST /api/observability_ai_assistant/chat/complete 2023-10-31\" | \"GET /internal/observability_ai_assistant/conversation/{conversationId}\" | \"POST /internal/observability_ai_assistant/conversations\" | \"POST /internal/observability_ai_assistant/conversation\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\" | \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\" | \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\" | \"GET /internal/observability_ai_assistant/connectors\" | \"GET /internal/observability_ai_assistant/functions\" | \"POST /internal/observability_ai_assistant/functions/recall\" | \"POST /internal/observability_ai_assistant/functions/summarize\" | \"POST /internal/observability_ai_assistant/kb/setup\" | \"GET /internal/observability_ai_assistant/kb/status\" | \"GET /internal/observability_ai_assistant/kb/entries\" | \"POST /internal/observability_ai_assistant/kb/entries/import\" | \"POST /internal/observability_ai_assistant/kb/entries/save\" | \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\"" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/api/index.ts", "deprecated": false, @@ -5538,11 +6138,11 @@ "signature": [ ", \"respond\">, TResponse = ReturnOf>(definition: TActionDefinition, respond: ", + ", \"respond\">, TRespondFunction extends ", "ScreenContextActionRespondFunction", - ") => ", + ">>(definition: TActionDefinition, respond: TRespondFunction) => ", "ScreenContextActionDefinition", - "" + ">" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, @@ -5571,25 +6171,7 @@ "label": "respond", "description": [], "signature": [ - "({}: { args: TResponse; signal: AbortSignal; connectorId: string; client: Pick<", - { - "pluginId": "observabilityAIAssistant", - "scope": "public", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantChatService", - "text": "ObservabilityAIAssistantChatService" - }, - ", \"complete\" | \"chat\">; messages: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - "[]; }) => Promise<", - "FunctionResponse", - ">" + "TRespondFunction" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_screen_context_action.ts", "deprecated": false, @@ -6158,20 +6740,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "PartialC", "<{ body: ", "PartialC", @@ -6207,7 +6803,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body?: { actions?: ({ name: string; description: string; } & { parameters?: any; })[] | undefined; } | undefined; query?: { format?: \"default\" | \"openai\" | undefined; } | undefined; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", @@ -6252,20 +6848,34 @@ "; responseLanguage: ", "StringC", "; disableFunctions: ", + "UnionC", + "<[", "Type", - "; instructions: ", + ", ", + "TypeC", + "<{ except: ", + "ArrayC", + "<", + "StringC", + ">; }>]>; instructions: ", "ArrayC", "<", "UnionC", "<[", "StringC", ", ", + "IntersectionC", + "<[", "TypeC", "<{ doc_id: ", "StringC", "; text: ", "StringC", - "; }>]>>; }>]>; }>, ", + "; }>, ", + "PartialC", + "<{ system: ", + "BooleanC", + "; }>]>]>>; }>]>; }>, ", "TypeC", "<{ body: ", "TypeC", @@ -6287,12 +6897,28 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | undefined; instructions?: (string | { doc_id: string; text: string; })[] | undefined; }; } & { body: { screenContexts: ", + "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; responseLanguage?: string | undefined; disableFunctions?: boolean | { except: string[]; } | undefined; instructions?: (string | ({ doc_id: string; text: string; } & { system?: boolean | undefined; }))[] | undefined; }; } & { body: { screenContexts: ", "ObservabilityAIAssistantScreenContextRequest", "[]; }; }; }) => Promise<", "Readable", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", + "; \"POST /internal/observability_ai_assistant/chat/recall\": { endpoint: \"POST /internal/observability_ai_assistant/chat/recall\"; params?: ", + "TypeC", + "<{ body: ", + "TypeC", + "<{ prompt: ", + "StringC", + "; context: ", + "StringC", + "; connectorId: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { prompt: string; context: string; connectorId: string; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", "TypeC", "<{ body: ", @@ -6558,6 +7184,100 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ShortIdTable", + "type": "Class", + "tags": [], + "label": "ShortIdTable", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ShortIdTable.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ShortIdTable.take", + "type": "Function", + "tags": [], + "label": "take", + "description": [], + "signature": [ + "(originalId: string) => string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ShortIdTable.take.$1", + "type": "string", + "tags": [], + "label": "originalId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ShortIdTable.lookup", + "type": "Function", + "tags": [], + "label": "lookup", + "description": [], + "signature": [ + "(shortId: string) => string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ShortIdTable.lookup.$1", + "type": "string", + "tags": [], + "label": "shortId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false } ], "functions": [ @@ -7535,6 +8255,95 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.CompatibleJSONSchema", + "type": "Type", + "tags": [], + "label": "CompatibleJSONSchema", + "description": [], + "signature": [ + "{ type?: ", + "JSONSchema7TypeName", + " | undefined; enum?: JSONSchemaOrPrimitive[] | readonly JSONSchemaOrPrimitive[] | undefined; const?: JSONSchemaOrPrimitive | undefined; minLength?: number | undefined; maxLength?: number | undefined; items?: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + "[] | undefined; required?: string[] | readonly string[] | undefined; properties?: Record | undefined; allOf?: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + "[] | readonly ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + "[] | undefined; anyOf?: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + "[] | readonly ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + "[] | undefined; oneOf?: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + "[] | readonly ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.CompatibleJSONSchema", + "text": "CompatibleJSONSchema" + }, + "[] | undefined; description?: string | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-common.ConversationCreateEvent", diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index c072b54fa78b1..16b571077703c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 261 | 1 | 259 | 27 | +| 290 | 1 | 288 | 26 | ## Client @@ -37,6 +37,9 @@ Contact [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai ### Functions +### Classes + + ### Interfaces diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 1f299ffb23e30..ef4215909beb9 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-06-13 +date: 2024-06-17 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 8ed84369e5751..367e7aaef7d8f 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-06-13 +date: 2024-06-17 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 a3e35fb78eab5..190c448c2aa95 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 0efb30e95912e..2e8d03245163e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index e44212f483bad..f7b814cdfd32f 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -65,7 +65,7 @@ }, ", pluginsSetup: ", "ObservabilitySharedSetup", - ") => { locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", + ") => { registerProfilingComponent: (key: string, component: React.FC) => void; locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", "Observable", "<", { @@ -376,7 +376,7 @@ "label": "EmbeddableFlamegraph", "description": [], "signature": [ - "(props: Props) => JSX.Element" + "({ height, ...props }: Props) => JSX.Element" ], "path": "x-pack/plugins/observability_solution/observability_shared/public/components/profiling/embeddables/embeddable_flamegraph.tsx", "deprecated": false, @@ -387,7 +387,7 @@ "id": "def-public.EmbeddableFlamegraph.$1", "type": "Object", "tags": [], - "label": "props", + "label": "{ height, ...props }", "description": [], "signature": [ "Props" @@ -3601,7 +3601,7 @@ "label": "ObservabilitySharedPluginSetup", "description": [], "signature": [ - "{ locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", + "{ registerProfilingComponent: (key: string, component: React.FC) => void; locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", "Observable", "<", { diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 20929c87fe6e5..9cca2ad645a00 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-06-13 +date: 2024-06-17 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 3d7309d58bf57..d5eec5505e934 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-06-13 +date: 2024-06-17 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 8ef5238c8a0c8..2396233c26969 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-06-13 +date: 2024-06-17 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 dda36eb5ce2e2..4dfdaac6b4daf 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 803 | 689 | 42 | +| 806 | 692 | 42 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 49086 | 239 | 37552 | 1874 | +| 49116 | 239 | 37582 | 1873 | ## Plugin Directory @@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 307 | 0 | 301 | 32 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 74 | 0 | 9 | 2 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 72 | 0 | 9 | 2 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 868 | 1 | 836 | 54 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 123 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 9 | 0 | 9 | 0 | @@ -57,7 +57,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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 | 129 | 0 | 123 | 12 | | | [@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. | 3199 | 31 | 2590 | 24 | +| | [@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. | 3194 | 31 | 2585 | 24 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 35 | 0 | 25 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Reusable data view field editor across Kibana | 72 | 0 | 33 | 0 | @@ -70,7 +70,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 35 | 0 | 33 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A stateful layer to register shared features and provide an access point to discover without a direct dependency | 16 | 0 | 15 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 46 | 0 | 32 | 0 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 48 | 0 | 34 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 557 | 1 | 447 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 53 | 0 | 46 | 1 | @@ -117,6 +117,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | inputControlVis | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Input Control visualization to Kibana | 0 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 127 | 2 | 100 | 4 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | A simple example of how to use core's routing services test | 69 | 0 | 69 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides UI and APIs for the interactive setup mode. | 28 | 0 | 18 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 95 | 0 | 95 | 4 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | @@ -135,10 +136,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 296 | 0 | 268 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 44 | 0 | 44 | 7 | -| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 286 | 0 | 281 | 31 | +| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 209 | 0 | 205 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 104 | 8 | 104 | 6 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 154 | 3 | 67 | 101 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 154 | 3 | 67 | 102 | | | [@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 | @@ -147,7 +148,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 698 | 2 | 689 | 15 | -| | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 261 | 1 | 259 | 27 | +| | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 290 | 1 | 288 | 26 | | | [@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 | @@ -173,6 +174,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 13 | 0 | | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 32 | 0 | 8 | 4 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin hosting shared features for connectors | 19 | 0 | 19 | 3 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 10 | 0 | 6 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin to provide access to and rendering of python notebooks for use in the persistent developer console. | 6 | 0 | 6 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 18 | 0 | 10 | 1 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | @@ -235,9 +237,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] |--------------|----------------|-----------|--------------|----------|---------------|--------| | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 11 | 5 | 11 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 5 | 0 | 5 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 51 | 0 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 36 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 2 | 0 | 0 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 41 | 0 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 54 | 0 | 0 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 27 | 3 | 27 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 5 | 0 | 5 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 22 | 0 | @@ -324,8 +326,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 2 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 22 | 0 | 13 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 37 | 1 | 33 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 114 | 0 | 55 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 38 | 1 | 34 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 115 | 0 | 55 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 43 | 0 | 38 | 3 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 1 | 13 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 1 | @@ -469,7 +471,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 3 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 45 | 0 | 33 | 0 | -| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 16 | 0 | 16 | 0 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 17 | 0 | 17 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 5 | 0 | 5 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 8 | 0 | 8 | 0 | @@ -622,6 +624,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 113 | 0 | 107 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 92 | 0 | 91 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A component for creating resizable layouts containing a fixed width panel and a flexible panel, with support for horizontal and vertical layouts. | 18 | 0 | 5 | 0 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index c143f39e284d3..aa3f68aff7703 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-06-13 +date: 2024-06-17 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 b1041a6294b04..91cb071ee35f8 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index a59452cd43c69..761810531e4ae 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-06-13 +date: 2024-06-17 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 8e30db349825d..9947501c2f541 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-06-13 +date: 2024-06-17 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 f3d630b7b5448..63ed8a745eb51 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index c9fa29a3684dd..8e7bde64480b3 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 64c94f419ee6f..7647262c33927 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-06-13 +date: 2024-06-17 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 68c2ee06d1f67..f2082ab5c6618 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 3c6b89a3ffa5c..c2c281d589b17 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-06-13 +date: 2024-06-17 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 18145dccf12b7..2396e3cf84792 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-06-13 +date: 2024-06-17 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 25c8a8f04167c..9bacb651df27b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index b42e062309acc..ddc363e901346 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 90daf4d896dff..320061330ee65 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index d01c2781fc5a2..474abc799ddab 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-06-13 +date: 2024-06-17 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 b489f2b4caceb..5ece66b9e095e 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-06-13 +date: 2024-06-17 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 a3d2e34d35cfa..6dfc43ab84a75 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 8743d6382d1e3..ad19664649f12 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 0c4597fcacb30..d982c87ac9811 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.devdocs.json b/api_docs/search_inference_endpoints.devdocs.json new file mode 100644 index 0000000000000..41c4ee3197a75 --- /dev/null +++ b/api_docs/search_inference_endpoints.devdocs.json @@ -0,0 +1,176 @@ +{ + "id": "searchInferenceEndpoints", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginSetup", + "type": "Interface", + "tags": [], + "label": "SearchInferenceEndpointsPluginSetup", + "description": [], + "path": "x-pack/plugins/search_inference_endpoints/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginStart", + "type": "Interface", + "tags": [], + "label": "SearchInferenceEndpointsPluginStart", + "description": [], + "path": "x-pack/plugins/search_inference_endpoints/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginStart.InferenceEdnpointsProvider", + "type": "Function", + "tags": [], + "label": "InferenceEdnpointsProvider", + "description": [], + "signature": [ + "React.FunctionComponent<", + "InferenceEndpointsProviderProps", + " & { children?: React.ReactNode; }>" + ], + "path": "x-pack/plugins/search_inference_endpoints/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginStart.InferenceEdnpointsProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginStart.InferenceEdnpointsProvider.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginStart.InferenceEndpoints", + "type": "Function", + "tags": [], + "label": "InferenceEndpoints", + "description": [], + "signature": [ + "React.FunctionComponent<{ children?: React.ReactNode; }>" + ], + "path": "x-pack/plugins/search_inference_endpoints/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginStart.InferenceEndpoints.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-public.SearchInferenceEndpointsPluginStart.InferenceEndpoints.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-server.SearchInferenceEndpointsPluginSetup", + "type": "Interface", + "tags": [], + "label": "SearchInferenceEndpointsPluginSetup", + "description": [], + "path": "x-pack/plugins/search_inference_endpoints/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "searchInferenceEndpoints", + "id": "def-server.SearchInferenceEndpointsPluginStart", + "type": "Interface", + "tags": [], + "label": "SearchInferenceEndpointsPluginStart", + "description": [], + "path": "x-pack/plugins/search_inference_endpoints/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx new file mode 100644 index 0000000000000..a5f6b6a6f5529 --- /dev/null +++ b/api_docs/search_inference_endpoints.mdx @@ -0,0 +1,41 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibSearchInferenceEndpointsPluginApi +slug: /kibana-dev-docs/api/searchInferenceEndpoints +title: "searchInferenceEndpoints" +image: https://source.unsplash.com/400x175/?github +description: API docs for the searchInferenceEndpoints plugin +date: 2024-06-17 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] +--- +import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; + + + +Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 10 | 0 | 6 | 1 | + +## Client + +### Setup + + +### Start + + +## Server + +### Setup + + +### Start + + diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 6b6e4a9571284..3ff93cc375d3a 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-06-13 +date: 2024-06-17 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 1dea254d75879..3bb2207551def 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 99dea9ea6157f..eddfbc9e2951a 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -1952,7 +1952,7 @@ "section": "def-common.KibanaRequest", "text": "KibanaRequest" }, - ", createParams: Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>) => Promise<", + ", createParams: Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>) => Promise<", { "pluginId": "@kbn/security-plugin-types-server", "scope": "server", @@ -2000,7 +2000,7 @@ "Create operation parameters." ], "signature": [ - "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>" + "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }>" ], "path": "x-pack/packages/security/plugin_types_server/src/authentication/api_keys/api_keys.ts", "deprecated": false, @@ -5072,7 +5072,7 @@ "label": "CreateAPIKeyParams", "description": [], "signature": [ - "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }> | Readonly<{ metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { type: \"cross_cluster\"; name: string; access: Readonly<{ search?: Readonly<{ query?: any; field_security?: any; allow_restricted_indices?: boolean | undefined; } & { names: string[]; }>[] | undefined; replication?: Readonly<{} & { names: string[]; }>[] | undefined; } & {}>; }>" + "Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; role_descriptors: Record>; }> | Readonly<{ type?: \"rest\" | undefined; metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { name: string; kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }> | Readonly<{ metadata?: Readonly<{} & {}> | undefined; expiration?: string | undefined; } & { type: \"cross_cluster\"; name: string; access: Readonly<{ search?: Readonly<{ query?: any; field_security?: any; allow_restricted_indices?: boolean | undefined; } & { names: string[]; }>[] | undefined; replication?: Readonly<{} & { names: string[]; }>[] | undefined; } & {}>; }>" ], "path": "x-pack/packages/security/plugin_types_server/src/authentication/api_keys/api_keys.ts", "deprecated": false, @@ -5134,7 +5134,7 @@ "label": "CreateRestAPIKeyWithKibanaPrivilegesParams", "description": [], "signature": [ - "{ readonly type?: \"rest\" | undefined; readonly metadata?: Readonly<{} & {}> | undefined; readonly expiration?: string | undefined; readonly name: string; readonly kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }" + "{ readonly type?: \"rest\" | undefined; readonly metadata?: Readonly<{} & {}> | undefined; readonly expiration?: string | undefined; readonly name: string; readonly kibana_role_descriptors: Record | undefined; } & { spaces: string[] | \"*\"[]; }>[]; elasticsearch: Readonly<{ cluster?: string[] | undefined; indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; run_as?: string[] | undefined; } & {}>; }>>; }" ], "path": "x-pack/packages/security/plugin_types_server/src/authentication/api_keys/api_keys.ts", "deprecated": false, @@ -5149,7 +5149,7 @@ "label": "ElasticsearchPrivilegesType", "description": [], "signature": [ - "{ readonly cluster?: string[] | undefined; readonly indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; readonly remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; readonly remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"grant\" | \"except\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; readonly run_as?: string[] | undefined; }" + "{ readonly cluster?: string[] | undefined; readonly indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; }>[] | undefined; readonly remote_cluster?: Readonly<{} & { privileges: string[]; clusters: string[]; }>[] | undefined; readonly remote_indices?: Readonly<{ query?: string | undefined; field_security?: Record<\"except\" | \"grant\", string[]> | undefined; allow_restricted_indices?: boolean | undefined; } & { names: string[]; privileges: string[]; clusters: string[]; }>[] | undefined; readonly run_as?: string[] | undefined; }" ], "path": "x-pack/packages/security/plugin_types_server/src/authorization/role_schema.ts", "deprecated": false, @@ -5595,10 +5595,6 @@ "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts" }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/api_keys.ts" - }, { "plugin": "lists", "path": "x-pack/plugins/lists/server/get_user.ts" @@ -5659,14 +5655,6 @@ "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" }, - { - "plugin": "serverlessSearch", - "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" - }, - { - "plugin": "serverlessSearch", - "path": "x-pack/plugins/serverless_search/server/routes/indices_routes.ts" - }, { "plugin": "transform", "path": "x-pack/plugins/transform/server/routes/api/reauthorize_transforms/route_handler_factory.ts" diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 058c9e31481cc..7f48fc8e0146e 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-06-13 +date: 2024-06-17 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 362a1a61e51eb..36c431192543d 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\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | 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\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"responseActionScanEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"alertSuppressionForEsqlRuleEnabled\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1964,7 +1964,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3071,7 +3071,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 responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3247,7 +3247,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly responseActionScanEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly alertSuppressionForEsqlRuleEnabled: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3313,7 +3313,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 responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly responseActionScanEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly alertSuppressionForEsqlRuleEnabled: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; readonly manualRuleRunEnabled: false; }" + "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly responseActionScanEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly alertSuppressionForEsqlRuleEnabled: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: 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 a399a92023558..ff4abc085b228 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-06-13 +date: 2024-06-17 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 d724541e1d0f2..e0aa8b4333f06 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-06-13 +date: 2024-06-17 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 6313919342c37..2463a21b9e4df 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-06-13 +date: 2024-06-17 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 232a00c9e57f1..706096cf75fd3 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-06-13 +date: 2024-06-17 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 97d8dcbababc1..fbf138978c19f 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-06-13 +date: 2024-06-17 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 e4222f695aa0d..158be33f61896 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-06-13 +date: 2024-06-17 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 22d12c5e786ae..2e0eaec6c1144 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index ff80340854014..63f66580020cc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.devdocs.json b/api_docs/slo.devdocs.json index ad2ca1940501c..033f65c0cbd60 100644 --- a/api_docs/slo.devdocs.json +++ b/api_docs/slo.devdocs.json @@ -133,7 +133,7 @@ "label": "observabilityShared", "description": [], "signature": [ - "{ locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", + "{ registerProfilingComponent: (key: string, component: React.FC) => void; locators: ObservabilitySharedLocators; navigation: { registerSections: (sections$: ", "Observable", "<", { diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index d9a9ee6cf57dd..6fd44e6aabc8e 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-06-13 +date: 2024-06-17 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 2e626e4dae610..b6828d11044bc 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 970ef28e13775..81284051cb42c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index b1f753ddeb9c5..bb9a6d60814ec 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 40506a45ddeb0..4e717680a744f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index b8a7f70250f15..582c46c324603 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 7542ef346f5f0..8b3662d241228 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index dfe006a66df2b..183abe90f1e60 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index b77acf26f0775..97a61b6b9a25e 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 09e412ce5afae..0e4e3e8dbf435 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 7dee21d5c2ce1..1e6081c3edbb0 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 7270a732f6e52..fc7f6e67de76c 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.devdocs.json b/api_docs/timelines.devdocs.json index 13cc1e46270eb..781b3110679a8 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -4200,11 +4200,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx" }, { "plugin": "securitySolution", @@ -4224,11 +4224,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx" + "path": "x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx" }, { "plugin": "securitySolution", diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 76aa8a04b5242..7e5416c976f5f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 931cd65a37c68..72bffa7500a42 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-06-13 +date: 2024-06-17 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 1f21bc8b3a762..727a49320f781 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 041c24ee88ff8..4ed721b537c36 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 788eef54c3ebe..78c09c4820ac9 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-06-13 +date: 2024-06-17 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 37f12ec48548e..e0af6eb5c893c 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-06-13 +date: 2024-06-17 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 3b6339b51cd28..264716778d31f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 192d11c125279..813ec045cd9de 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 34a1144e78956..533fea4599ee8 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-06-13 +date: 2024-06-17 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 98ccfa6a86bfd..77b17b0d50d2c 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-06-13 +date: 2024-06-17 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 dbf30ff15dce3..819922fd4335f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 5f71105c04e11..d3e7e16b9f13b 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index f4cde6da5b99e..19c252a88673f 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 0b9a4fb48d146..8ff7f742ac410 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 7c433c8fee255..5d859c8a16fdf 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index b51736557b732..44bdad781d962 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index e6e18a711205c..3abc3594f7fff 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 917b3288b579a..64c76b9c5ee86 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 49abff7b14689..2c126e0d7461a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index a5e4a4edebf8f..f2b754d3f633a 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 73a85bc13bd43..e0dff8da03753 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index f8954579b72b6..c4c16340f64c2 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 7b2a5ded62fd0..4499a267601de 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 673b5befbdb18..a268fa4c22655 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-06-13 +date: 2024-06-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/dev_docs/tutorials/performance/adding_custom_performance_metrics.mdx b/dev_docs/tutorials/performance/adding_custom_performance_metrics.mdx index 4db207ad4aecb..1c1224c1c858a 100644 --- a/dev_docs/tutorials/performance/adding_custom_performance_metrics.mdx +++ b/dev_docs/tutorials/performance/adding_custom_performance_metrics.mdx @@ -3,7 +3,6 @@ id: kibDevTutorialAddingCustomPerformanceMetrics slug: /kibana-dev-docs/tutorial/performance/adding_custom_performance_metrics title: Adding Performance Metrics summary: Learn how to instrument your code and analyze performance -date: 2023-01-13 tags: ['kibana', 'onboarding', 'setup', 'performance', 'development', 'telemetry'] --- @@ -241,7 +240,7 @@ const MyApp = () => { if (fetchedData.status === 'success') { setData(fetchedData); - // Call onPageReady once the meaningful data has rendered and visible to the user + // Call onPageReady once the meaningful data has rendered and visible to the user onPageReady(); } diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index f14a0de00211f..f78070b9bfa49 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -638,6 +638,10 @@ the infrastructure monitoring use-case within Kibana. |The ingest_pipelines plugin provides Kibana support for Elasticsearch's ingest pipelines. +|{kib-repo}blob/{branch}/x-pack/plugins/integration_assistant/README.md[integrationAssistant] +|Team owner: Security Integrations Scalability + + |{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/investigate/README.md[investigate] |undefined diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json index cfe16536856d0..60dcb5d054393 100644 --- a/nav-kibana-dev.docnav.json +++ b/nav-kibana-dev.docnav.json @@ -115,7 +115,8 @@ "label": "Tutorials", "items": [ { - "id": "kibDevTutorialAddingCustomPerformanceMetrics" + "id": "kibDevTutorialAddingCustomPerformanceMetrics", + "label": "Adding Performance Metrics" }, { "id": "kibDevTutorialSetupWindowsDevWSL" diff --git a/package.json b/package.json index 62976487dc96f..a7fe9a0424b08 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "resolutions": { "**/@bazel/typescript/protobufjs": "6.11.4", "**/@hello-pangea/dnd": "16.6.0", - "**/@langchain/core": "0.1.53", + "**/@langchain/core": "0.2.3", "**/@types/node": "20.10.5", "**/@typescript-eslint/utils": "5.62.0", "**/chokidar": "^3.5.3", @@ -540,6 +540,7 @@ "@kbn/ingest-pipelines-plugin": "link:x-pack/plugins/ingest_pipelines", "@kbn/input-control-vis-plugin": "link:src/plugins/input_control_vis", "@kbn/inspector-plugin": "link:src/plugins/inspector", + "@kbn/integration-assistant-plugin": "link:x-pack/plugins/integration_assistant", "@kbn/interactive-setup-plugin": "link:src/plugins/interactive_setup", "@kbn/interactive-setup-test-endpoints-plugin": "link:test/interactive_setup_api_integration/plugins/test_endpoints", "@kbn/interpreter": "link:packages/kbn-interpreter", @@ -927,9 +928,10 @@ "@kbn/watcher-plugin": "link:x-pack/plugins/watcher", "@kbn/xstate-utils": "link:packages/kbn-xstate-utils", "@kbn/zod-helpers": "link:packages/kbn-zod-helpers", - "@langchain/community": "^0.0.44", - "@langchain/core": "^0.1.53", - "@langchain/openai": "^0.0.25", + "@langchain/community": "^0.2.4", + "@langchain/core": "0.2.3", + "@langchain/langgraph": "^0.0.23", + "@langchain/openai": "^0.0.34", "@langtrase/trace-attributes": "^3.0.8", "@langtrase/typescript-sdk": "^2.2.1", "@launchdarkly/node-server-sdk": "^9.4.5", @@ -952,10 +954,10 @@ "@paralleldrive/cuid2": "^2.2.2", "@reduxjs/toolkit": "1.9.7", "@slack/webhook": "^7.0.1", - "@smithy/eventstream-codec": "^2.0.12", - "@smithy/eventstream-serde-node": "^2.1.1", - "@smithy/types": "^2.9.1", - "@smithy/util-utf8": "^2.0.0", + "@smithy/eventstream-codec": "^3.0.0", + "@smithy/eventstream-serde-node": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "@tanstack/react-query": "^4.29.12", "@tanstack/react-query-devtools": "^4.29.12", "@turf/along": "6.0.1", @@ -1018,7 +1020,7 @@ "deepmerge": "^4.2.2", "del": "^6.1.0", "diff": "^5.1.0", - "elastic-apm-node": "^4.6.0", + "elastic-apm-node": "^4.7.0", "email-addresses": "^5.0.0", "eventsource-parser": "^1.1.1", "execa": "^5.1.1", @@ -1067,9 +1069,10 @@ "jsonwebtoken": "^9.0.2", "jsts": "^1.6.2", "kea": "^2.6.0", - "langchain": "^0.1.30", - "langsmith": "^0.1.14", + "langchain": "0.2.3", + "langsmith": "^0.1.30", "launchdarkly-js-client-sdk": "^3.3.0", + "launchdarkly-node-server-sdk": "^7.0.3", "load-json-file": "^6.2.0", "lodash": "^4.17.21", "lru-cache": "^4.1.5", @@ -1092,6 +1095,7 @@ "node-forge": "^1.3.1", "nodemailer": "^6.9.9", "normalize-path": "^3.0.0", + "nunjucks": "^3.2.4", "object-hash": "^1.3.1", "object-path-immutable": "^3.1.1", "openai": "^4.24.1", @@ -1504,6 +1508,7 @@ "@types/node-forge": "^1.3.10", "@types/nodemailer": "^6.4.0", "@types/normalize-path": "^3.0.0", + "@types/nunjucks": "^3.2.6", "@types/object-hash": "^1.3.0", "@types/opn": "^5.1.0", "@types/ora": "^1.3.5", diff --git a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx index 67860ded13bdc..f72b31a0f834d 100644 --- a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx +++ b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx @@ -10,7 +10,7 @@ import type { JSXElementConstructor, MutableRefObject } from 'react'; import React from 'react'; import type { EuiDataGridColumnCellActionProps, EuiDataGridRefProps } from '@elastic/eui'; import { EuiButtonEmpty, type EuiDataGridColumnCellAction } from '@elastic/eui'; -import { render, waitFor, act } from '@testing-library/react'; +import { render, waitFor } from '@testing-library/react'; import { renderHook } from '@testing-library/react-hooks'; import { makeAction } from '../mocks/helpers'; import type { UseDataGridColumnsCellActionsProps } from './use_data_grid_column_cell_actions'; @@ -74,8 +74,8 @@ describe('useDataGridColumnsCellActions', () => { const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - expect(result.current).toHaveLength(columns.length); - expect(result.current[0]).toHaveLength(1); // loader + + expect(result.current).toHaveLength(0); await waitForNextUpdate(); @@ -83,16 +83,6 @@ describe('useDataGridColumnsCellActions', () => { expect(result.current[0]).toHaveLength(actions.length); }); - it('should render cell actions loading state', async () => { - const { result } = renderHook(useDataGridColumnsCellActions, { - initialProps: useDataGridColumnsCellActionsProps, - }); - await act(async () => { - const cellAction = renderCellAction(result.current[0][0]); - expect(cellAction.getByTestId('dataGridColumnCellAction-loading')).toBeInTheDocument(); - }); - }); - it('should call getCellValue with the proper params', async () => { const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, diff --git a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx index b5b8ea32d9b52..96132a80bbeb2 100644 --- a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx +++ b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx @@ -7,9 +7,9 @@ */ import type { MutableRefObject } from 'react'; -import React, { useCallback, useMemo, useRef } from 'react'; +import React, { useCallback, useMemo, useRef, useState, useEffect } from 'react'; import type { EuiDataGridRefProps } from '@elastic/eui'; -import { EuiLoadingSpinner, type EuiDataGridColumnCellAction } from '@elastic/eui'; +import { type EuiDataGridColumnCellAction } from '@elastic/eui'; import type { FieldSpec } from '@kbn/data-views-plugin/common'; import type { CellAction, @@ -46,10 +46,6 @@ export type UseDataGridColumnsCellActions< P extends UseDataGridColumnsCellActionsProps = UseDataGridColumnsCellActionsProps > = (props: P) => EuiDataGridColumnCellAction[][]; -// static actions array references to prevent React updates -const loadingColumnActions: EuiDataGridColumnCellAction[] = [ - () => , -]; const emptyActions: EuiDataGridColumnCellAction[][] = []; export const useDataGridColumnsCellActions: UseDataGridColumnsCellActions = ({ @@ -60,6 +56,8 @@ export const useDataGridColumnsCellActions: UseDataGridColumnsCellActions = ({ dataGridRef, disabledActionTypes = [], }) => { + const [cellActions, setCellActions] = useState(emptyActions); + const bulkContexts: CellActionCompatibilityContext[] | undefined = useMemo(() => { if (!triggerId || !fields?.length) { return undefined; @@ -75,35 +73,35 @@ export const useDataGridColumnsCellActions: UseDataGridColumnsCellActions = ({ disabledActionTypes, }); - const columnsCellActions = useMemo(() => { - if (loading) { - return fields?.length ? fields.map(() => loadingColumnActions) : emptyActions; - } - if (!triggerId || !columnsActions?.length || !fields?.length) { - return emptyActions; + useEffect(() => { + // no-op + if (loading || !triggerId || !columnsActions?.length || !fields?.length) { + return; } // Check for a temporary inconsistency because `useBulkLoadActions` takes one render loop before setting `loading` to true. // It will eventually update to a consistent state if (columnsActions.length !== fields.length) { - return emptyActions; + return; } - return columnsActions.map((actions, columnIndex) => - actions.map((action) => - createColumnCellAction({ - action, - field: fields[columnIndex], - getCellValue, - metadata, - triggerId, - dataGridRef, - }) + setCellActions( + columnsActions.map((actions, columnIndex) => + actions.map((action) => + createColumnCellAction({ + action, + field: fields[columnIndex], + getCellValue, + metadata, + triggerId, + dataGridRef, + }) + ) ) ); }, [columnsActions, fields, getCellValue, loading, metadata, triggerId, dataGridRef]); - return columnsCellActions; + return cellActions; }; interface CreateColumnCellActionParams diff --git a/packages/kbn-esql-ast/src/antlr/esql_lexer.g4 b/packages/kbn-esql-ast/src/antlr/esql_lexer.g4 index 39cb43b84d356..d7a4b88e6d5c5 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_lexer.g4 +++ b/packages/kbn-esql-ast/src/antlr/esql_lexer.g4 @@ -166,6 +166,11 @@ ASTERISK : '*'; SLASH : '/'; PERCENT : '%'; +NAMED_OR_POSITIONAL_PARAM + : PARAM LETTER UNQUOTED_ID_BODY* + | PARAM DIGIT+ + ; + // Brackets are funny. We can happen upon a CLOSING_BRACKET in two ways - one // way is to start in an explain command which then shifts us to expression // mode. Thus, the two popModes on CLOSING_BRACKET. The other way could as diff --git a/packages/kbn-esql-ast/src/antlr/esql_lexer.interp b/packages/kbn-esql-ast/src/antlr/esql_lexer.interp index df8215d1a0461..911e1371fd129 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_lexer.interp +++ b/packages/kbn-esql-ast/src/antlr/esql_lexer.interp @@ -68,6 +68,7 @@ null '/' '%' null +null ']' null null @@ -193,6 +194,7 @@ MINUS ASTERISK SLASH PERCENT +NAMED_OR_POSITIONAL_PARAM OPENING_BRACKET CLOSING_BRACKET UNQUOTED_IDENTIFIER @@ -331,6 +333,7 @@ MINUS ASTERISK SLASH PERCENT +NAMED_OR_POSITIONAL_PARAM OPENING_BRACKET CLOSING_BRACKET UNQUOTED_IDENTIFIER @@ -464,4 +467,4 @@ METRICS_MODE CLOSING_METRICS_MODE atn: -[4, 0, 123, 1404, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 4, 20, 565, 8, 20, 11, 20, 12, 20, 566, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 575, 8, 21, 10, 21, 12, 21, 578, 9, 21, 1, 21, 3, 21, 581, 8, 21, 1, 21, 3, 21, 584, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 593, 8, 22, 10, 22, 12, 22, 596, 9, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 4, 23, 604, 8, 23, 11, 23, 12, 23, 605, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 3, 24, 613, 8, 24, 1, 25, 4, 25, 616, 8, 25, 11, 25, 12, 25, 617, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 3, 36, 657, 8, 36, 1, 36, 4, 36, 660, 8, 36, 11, 36, 12, 36, 661, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 3, 39, 671, 8, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 3, 41, 678, 8, 41, 1, 42, 1, 42, 1, 42, 5, 42, 683, 8, 42, 10, 42, 12, 42, 686, 9, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 694, 8, 42, 10, 42, 12, 42, 697, 9, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 704, 8, 42, 1, 42, 3, 42, 707, 8, 42, 3, 42, 709, 8, 42, 1, 43, 4, 43, 712, 8, 43, 11, 43, 12, 43, 713, 1, 44, 4, 44, 717, 8, 44, 11, 44, 12, 44, 718, 1, 44, 1, 44, 5, 44, 723, 8, 44, 10, 44, 12, 44, 726, 9, 44, 1, 44, 1, 44, 4, 44, 730, 8, 44, 11, 44, 12, 44, 731, 1, 44, 4, 44, 735, 8, 44, 11, 44, 12, 44, 736, 1, 44, 1, 44, 5, 44, 741, 8, 44, 10, 44, 12, 44, 744, 9, 44, 3, 44, 746, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 4, 44, 752, 8, 44, 11, 44, 12, 44, 753, 1, 44, 1, 44, 3, 44, 758, 8, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 5, 82, 889, 8, 82, 10, 82, 12, 82, 892, 9, 82, 1, 82, 1, 82, 3, 82, 896, 8, 82, 1, 82, 4, 82, 899, 8, 82, 11, 82, 12, 82, 900, 3, 82, 903, 8, 82, 1, 83, 1, 83, 4, 83, 907, 8, 83, 11, 83, 12, 83, 908, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 994, 8, 102, 1, 103, 1, 103, 3, 103, 998, 8, 103, 1, 103, 5, 103, 1001, 8, 103, 10, 103, 12, 103, 1004, 9, 103, 1, 103, 1, 103, 3, 103, 1008, 8, 103, 1, 103, 4, 103, 1011, 8, 103, 11, 103, 12, 103, 1012, 3, 103, 1015, 8, 103, 1, 104, 1, 104, 4, 104, 1019, 8, 104, 11, 104, 12, 104, 1020, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 4, 122, 1096, 8, 122, 11, 122, 12, 122, 1097, 1, 122, 1, 122, 3, 122, 1102, 8, 122, 1, 122, 4, 122, 1105, 8, 122, 11, 122, 12, 122, 1106, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 4, 172, 1325, 8, 172, 11, 172, 12, 172, 1326, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 2, 594, 695, 0, 189, 16, 1, 18, 2, 20, 3, 22, 4, 24, 5, 26, 6, 28, 7, 30, 8, 32, 9, 34, 10, 36, 11, 38, 12, 40, 13, 42, 14, 44, 15, 46, 16, 48, 17, 50, 18, 52, 19, 54, 20, 56, 21, 58, 22, 60, 23, 62, 24, 64, 0, 66, 25, 68, 0, 70, 0, 72, 26, 74, 27, 76, 28, 78, 29, 80, 0, 82, 0, 84, 0, 86, 0, 88, 0, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 30, 102, 31, 104, 32, 106, 33, 108, 34, 110, 35, 112, 36, 114, 37, 116, 38, 118, 39, 120, 40, 122, 41, 124, 42, 126, 43, 128, 44, 130, 45, 132, 46, 134, 47, 136, 48, 138, 49, 140, 50, 142, 51, 144, 52, 146, 53, 148, 54, 150, 55, 152, 56, 154, 57, 156, 58, 158, 59, 160, 60, 162, 61, 164, 62, 166, 63, 168, 64, 170, 65, 172, 66, 174, 67, 176, 68, 178, 69, 180, 70, 182, 0, 184, 71, 186, 72, 188, 73, 190, 74, 192, 0, 194, 0, 196, 0, 198, 0, 200, 0, 202, 0, 204, 75, 206, 0, 208, 76, 210, 77, 212, 78, 214, 0, 216, 0, 218, 0, 220, 0, 222, 0, 224, 79, 226, 80, 228, 81, 230, 82, 232, 0, 234, 0, 236, 0, 238, 0, 240, 83, 242, 0, 244, 84, 246, 85, 248, 86, 250, 0, 252, 0, 254, 87, 256, 88, 258, 0, 260, 89, 262, 0, 264, 0, 266, 90, 268, 91, 270, 92, 272, 0, 274, 0, 276, 0, 278, 0, 280, 0, 282, 0, 284, 0, 286, 93, 288, 94, 290, 95, 292, 0, 294, 0, 296, 0, 298, 0, 300, 0, 302, 96, 304, 97, 306, 98, 308, 0, 310, 0, 312, 0, 314, 0, 316, 99, 318, 100, 320, 101, 322, 0, 324, 0, 326, 0, 328, 0, 330, 102, 332, 103, 334, 104, 336, 0, 338, 105, 340, 106, 342, 107, 344, 108, 346, 0, 348, 109, 350, 110, 352, 111, 354, 112, 356, 0, 358, 113, 360, 114, 362, 115, 364, 116, 366, 117, 368, 0, 370, 0, 372, 118, 374, 119, 376, 120, 378, 0, 380, 121, 382, 122, 384, 123, 386, 0, 388, 0, 390, 0, 392, 0, 16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 35, 2, 0, 68, 68, 100, 100, 2, 0, 73, 73, 105, 105, 2, 0, 83, 83, 115, 115, 2, 0, 69, 69, 101, 101, 2, 0, 67, 67, 99, 99, 2, 0, 84, 84, 116, 116, 2, 0, 82, 82, 114, 114, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 78, 78, 110, 110, 2, 0, 72, 72, 104, 104, 2, 0, 86, 86, 118, 118, 2, 0, 65, 65, 97, 97, 2, 0, 76, 76, 108, 108, 2, 0, 88, 88, 120, 120, 2, 0, 70, 70, 102, 102, 2, 0, 77, 77, 109, 109, 2, 0, 71, 71, 103, 103, 2, 0, 75, 75, 107, 107, 2, 0, 85, 85, 117, 117, 2, 0, 87, 87, 119, 119, 6, 0, 9, 10, 13, 13, 32, 32, 47, 47, 91, 91, 93, 93, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 10, 0, 9, 10, 13, 13, 32, 32, 44, 44, 47, 47, 61, 61, 91, 91, 93, 93, 96, 96, 124, 124, 2, 0, 42, 42, 47, 47, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 8, 0, 34, 34, 78, 78, 82, 82, 84, 84, 92, 92, 110, 110, 114, 114, 116, 116, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 43, 43, 45, 45, 1, 0, 96, 96, 2, 0, 66, 66, 98, 98, 2, 0, 89, 89, 121, 121, 11, 0, 9, 10, 13, 13, 32, 32, 34, 35, 44, 44, 47, 47, 58, 58, 60, 60, 62, 63, 92, 92, 124, 124, 1427, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 1, 68, 1, 0, 0, 0, 1, 70, 1, 0, 0, 0, 1, 72, 1, 0, 0, 0, 1, 74, 1, 0, 0, 0, 1, 76, 1, 0, 0, 0, 2, 78, 1, 0, 0, 0, 2, 100, 1, 0, 0, 0, 2, 102, 1, 0, 0, 0, 2, 104, 1, 0, 0, 0, 2, 106, 1, 0, 0, 0, 2, 108, 1, 0, 0, 0, 2, 110, 1, 0, 0, 0, 2, 112, 1, 0, 0, 0, 2, 114, 1, 0, 0, 0, 2, 116, 1, 0, 0, 0, 2, 118, 1, 0, 0, 0, 2, 120, 1, 0, 0, 0, 2, 122, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 2, 126, 1, 0, 0, 0, 2, 128, 1, 0, 0, 0, 2, 130, 1, 0, 0, 0, 2, 132, 1, 0, 0, 0, 2, 134, 1, 0, 0, 0, 2, 136, 1, 0, 0, 0, 2, 138, 1, 0, 0, 0, 2, 140, 1, 0, 0, 0, 2, 142, 1, 0, 0, 0, 2, 144, 1, 0, 0, 0, 2, 146, 1, 0, 0, 0, 2, 148, 1, 0, 0, 0, 2, 150, 1, 0, 0, 0, 2, 152, 1, 0, 0, 0, 2, 154, 1, 0, 0, 0, 2, 156, 1, 0, 0, 0, 2, 158, 1, 0, 0, 0, 2, 160, 1, 0, 0, 0, 2, 162, 1, 0, 0, 0, 2, 164, 1, 0, 0, 0, 2, 166, 1, 0, 0, 0, 2, 168, 1, 0, 0, 0, 2, 170, 1, 0, 0, 0, 2, 172, 1, 0, 0, 0, 2, 174, 1, 0, 0, 0, 2, 176, 1, 0, 0, 0, 2, 178, 1, 0, 0, 0, 2, 180, 1, 0, 0, 0, 2, 184, 1, 0, 0, 0, 2, 186, 1, 0, 0, 0, 2, 188, 1, 0, 0, 0, 2, 190, 1, 0, 0, 0, 3, 192, 1, 0, 0, 0, 3, 194, 1, 0, 0, 0, 3, 196, 1, 0, 0, 0, 3, 198, 1, 0, 0, 0, 3, 200, 1, 0, 0, 0, 3, 202, 1, 0, 0, 0, 3, 204, 1, 0, 0, 0, 3, 206, 1, 0, 0, 0, 3, 208, 1, 0, 0, 0, 3, 210, 1, 0, 0, 0, 3, 212, 1, 0, 0, 0, 4, 214, 1, 0, 0, 0, 4, 216, 1, 0, 0, 0, 4, 218, 1, 0, 0, 0, 4, 224, 1, 0, 0, 0, 4, 226, 1, 0, 0, 0, 4, 228, 1, 0, 0, 0, 4, 230, 1, 0, 0, 0, 5, 232, 1, 0, 0, 0, 5, 234, 1, 0, 0, 0, 5, 236, 1, 0, 0, 0, 5, 238, 1, 0, 0, 0, 5, 240, 1, 0, 0, 0, 5, 242, 1, 0, 0, 0, 5, 244, 1, 0, 0, 0, 5, 246, 1, 0, 0, 0, 5, 248, 1, 0, 0, 0, 6, 250, 1, 0, 0, 0, 6, 252, 1, 0, 0, 0, 6, 254, 1, 0, 0, 0, 6, 256, 1, 0, 0, 0, 6, 260, 1, 0, 0, 0, 6, 262, 1, 0, 0, 0, 6, 264, 1, 0, 0, 0, 6, 266, 1, 0, 0, 0, 6, 268, 1, 0, 0, 0, 6, 270, 1, 0, 0, 0, 7, 272, 1, 0, 0, 0, 7, 274, 1, 0, 0, 0, 7, 276, 1, 0, 0, 0, 7, 278, 1, 0, 0, 0, 7, 280, 1, 0, 0, 0, 7, 282, 1, 0, 0, 0, 7, 284, 1, 0, 0, 0, 7, 286, 1, 0, 0, 0, 7, 288, 1, 0, 0, 0, 7, 290, 1, 0, 0, 0, 8, 292, 1, 0, 0, 0, 8, 294, 1, 0, 0, 0, 8, 296, 1, 0, 0, 0, 8, 298, 1, 0, 0, 0, 8, 300, 1, 0, 0, 0, 8, 302, 1, 0, 0, 0, 8, 304, 1, 0, 0, 0, 8, 306, 1, 0, 0, 0, 9, 308, 1, 0, 0, 0, 9, 310, 1, 0, 0, 0, 9, 312, 1, 0, 0, 0, 9, 314, 1, 0, 0, 0, 9, 316, 1, 0, 0, 0, 9, 318, 1, 0, 0, 0, 9, 320, 1, 0, 0, 0, 10, 322, 1, 0, 0, 0, 10, 324, 1, 0, 0, 0, 10, 326, 1, 0, 0, 0, 10, 328, 1, 0, 0, 0, 10, 330, 1, 0, 0, 0, 10, 332, 1, 0, 0, 0, 10, 334, 1, 0, 0, 0, 11, 336, 1, 0, 0, 0, 11, 338, 1, 0, 0, 0, 11, 340, 1, 0, 0, 0, 11, 342, 1, 0, 0, 0, 11, 344, 1, 0, 0, 0, 12, 346, 1, 0, 0, 0, 12, 348, 1, 0, 0, 0, 12, 350, 1, 0, 0, 0, 12, 352, 1, 0, 0, 0, 12, 354, 1, 0, 0, 0, 13, 356, 1, 0, 0, 0, 13, 358, 1, 0, 0, 0, 13, 360, 1, 0, 0, 0, 13, 362, 1, 0, 0, 0, 13, 364, 1, 0, 0, 0, 13, 366, 1, 0, 0, 0, 14, 368, 1, 0, 0, 0, 14, 370, 1, 0, 0, 0, 14, 372, 1, 0, 0, 0, 14, 374, 1, 0, 0, 0, 14, 376, 1, 0, 0, 0, 15, 378, 1, 0, 0, 0, 15, 380, 1, 0, 0, 0, 15, 382, 1, 0, 0, 0, 15, 384, 1, 0, 0, 0, 15, 386, 1, 0, 0, 0, 15, 388, 1, 0, 0, 0, 15, 390, 1, 0, 0, 0, 15, 392, 1, 0, 0, 0, 16, 394, 1, 0, 0, 0, 18, 404, 1, 0, 0, 0, 20, 411, 1, 0, 0, 0, 22, 420, 1, 0, 0, 0, 24, 427, 1, 0, 0, 0, 26, 437, 1, 0, 0, 0, 28, 444, 1, 0, 0, 0, 30, 451, 1, 0, 0, 0, 32, 465, 1, 0, 0, 0, 34, 472, 1, 0, 0, 0, 36, 480, 1, 0, 0, 0, 38, 489, 1, 0, 0, 0, 40, 496, 1, 0, 0, 0, 42, 506, 1, 0, 0, 0, 44, 518, 1, 0, 0, 0, 46, 527, 1, 0, 0, 0, 48, 533, 1, 0, 0, 0, 50, 540, 1, 0, 0, 0, 52, 547, 1, 0, 0, 0, 54, 555, 1, 0, 0, 0, 56, 564, 1, 0, 0, 0, 58, 570, 1, 0, 0, 0, 60, 587, 1, 0, 0, 0, 62, 603, 1, 0, 0, 0, 64, 612, 1, 0, 0, 0, 66, 615, 1, 0, 0, 0, 68, 619, 1, 0, 0, 0, 70, 624, 1, 0, 0, 0, 72, 629, 1, 0, 0, 0, 74, 633, 1, 0, 0, 0, 76, 637, 1, 0, 0, 0, 78, 641, 1, 0, 0, 0, 80, 645, 1, 0, 0, 0, 82, 647, 1, 0, 0, 0, 84, 649, 1, 0, 0, 0, 86, 652, 1, 0, 0, 0, 88, 654, 1, 0, 0, 0, 90, 663, 1, 0, 0, 0, 92, 665, 1, 0, 0, 0, 94, 670, 1, 0, 0, 0, 96, 672, 1, 0, 0, 0, 98, 677, 1, 0, 0, 0, 100, 708, 1, 0, 0, 0, 102, 711, 1, 0, 0, 0, 104, 757, 1, 0, 0, 0, 106, 759, 1, 0, 0, 0, 108, 762, 1, 0, 0, 0, 110, 766, 1, 0, 0, 0, 112, 770, 1, 0, 0, 0, 114, 772, 1, 0, 0, 0, 116, 775, 1, 0, 0, 0, 118, 777, 1, 0, 0, 0, 120, 782, 1, 0, 0, 0, 122, 784, 1, 0, 0, 0, 124, 790, 1, 0, 0, 0, 126, 796, 1, 0, 0, 0, 128, 801, 1, 0, 0, 0, 130, 803, 1, 0, 0, 0, 132, 806, 1, 0, 0, 0, 134, 809, 1, 0, 0, 0, 136, 814, 1, 0, 0, 0, 138, 818, 1, 0, 0, 0, 140, 823, 1, 0, 0, 0, 142, 829, 1, 0, 0, 0, 144, 832, 1, 0, 0, 0, 146, 834, 1, 0, 0, 0, 148, 840, 1, 0, 0, 0, 150, 842, 1, 0, 0, 0, 152, 847, 1, 0, 0, 0, 154, 850, 1, 0, 0, 0, 156, 853, 1, 0, 0, 0, 158, 856, 1, 0, 0, 0, 160, 858, 1, 0, 0, 0, 162, 861, 1, 0, 0, 0, 164, 863, 1, 0, 0, 0, 166, 866, 1, 0, 0, 0, 168, 868, 1, 0, 0, 0, 170, 870, 1, 0, 0, 0, 172, 872, 1, 0, 0, 0, 174, 874, 1, 0, 0, 0, 176, 876, 1, 0, 0, 0, 178, 881, 1, 0, 0, 0, 180, 902, 1, 0, 0, 0, 182, 904, 1, 0, 0, 0, 184, 912, 1, 0, 0, 0, 186, 914, 1, 0, 0, 0, 188, 918, 1, 0, 0, 0, 190, 922, 1, 0, 0, 0, 192, 926, 1, 0, 0, 0, 194, 931, 1, 0, 0, 0, 196, 935, 1, 0, 0, 0, 198, 939, 1, 0, 0, 0, 200, 943, 1, 0, 0, 0, 202, 947, 1, 0, 0, 0, 204, 951, 1, 0, 0, 0, 206, 960, 1, 0, 0, 0, 208, 964, 1, 0, 0, 0, 210, 968, 1, 0, 0, 0, 212, 972, 1, 0, 0, 0, 214, 976, 1, 0, 0, 0, 216, 981, 1, 0, 0, 0, 218, 985, 1, 0, 0, 0, 220, 993, 1, 0, 0, 0, 222, 1014, 1, 0, 0, 0, 224, 1018, 1, 0, 0, 0, 226, 1022, 1, 0, 0, 0, 228, 1026, 1, 0, 0, 0, 230, 1030, 1, 0, 0, 0, 232, 1034, 1, 0, 0, 0, 234, 1039, 1, 0, 0, 0, 236, 1043, 1, 0, 0, 0, 238, 1047, 1, 0, 0, 0, 240, 1051, 1, 0, 0, 0, 242, 1054, 1, 0, 0, 0, 244, 1058, 1, 0, 0, 0, 246, 1062, 1, 0, 0, 0, 248, 1066, 1, 0, 0, 0, 250, 1070, 1, 0, 0, 0, 252, 1075, 1, 0, 0, 0, 254, 1080, 1, 0, 0, 0, 256, 1085, 1, 0, 0, 0, 258, 1092, 1, 0, 0, 0, 260, 1101, 1, 0, 0, 0, 262, 1108, 1, 0, 0, 0, 264, 1112, 1, 0, 0, 0, 266, 1116, 1, 0, 0, 0, 268, 1120, 1, 0, 0, 0, 270, 1124, 1, 0, 0, 0, 272, 1128, 1, 0, 0, 0, 274, 1134, 1, 0, 0, 0, 276, 1138, 1, 0, 0, 0, 278, 1142, 1, 0, 0, 0, 280, 1146, 1, 0, 0, 0, 282, 1150, 1, 0, 0, 0, 284, 1154, 1, 0, 0, 0, 286, 1158, 1, 0, 0, 0, 288, 1162, 1, 0, 0, 0, 290, 1166, 1, 0, 0, 0, 292, 1170, 1, 0, 0, 0, 294, 1175, 1, 0, 0, 0, 296, 1179, 1, 0, 0, 0, 298, 1183, 1, 0, 0, 0, 300, 1188, 1, 0, 0, 0, 302, 1192, 1, 0, 0, 0, 304, 1196, 1, 0, 0, 0, 306, 1200, 1, 0, 0, 0, 308, 1204, 1, 0, 0, 0, 310, 1210, 1, 0, 0, 0, 312, 1214, 1, 0, 0, 0, 314, 1218, 1, 0, 0, 0, 316, 1222, 1, 0, 0, 0, 318, 1226, 1, 0, 0, 0, 320, 1230, 1, 0, 0, 0, 322, 1234, 1, 0, 0, 0, 324, 1239, 1, 0, 0, 0, 326, 1243, 1, 0, 0, 0, 328, 1247, 1, 0, 0, 0, 330, 1251, 1, 0, 0, 0, 332, 1255, 1, 0, 0, 0, 334, 1259, 1, 0, 0, 0, 336, 1263, 1, 0, 0, 0, 338, 1268, 1, 0, 0, 0, 340, 1273, 1, 0, 0, 0, 342, 1277, 1, 0, 0, 0, 344, 1281, 1, 0, 0, 0, 346, 1285, 1, 0, 0, 0, 348, 1290, 1, 0, 0, 0, 350, 1300, 1, 0, 0, 0, 352, 1304, 1, 0, 0, 0, 354, 1308, 1, 0, 0, 0, 356, 1312, 1, 0, 0, 0, 358, 1317, 1, 0, 0, 0, 360, 1324, 1, 0, 0, 0, 362, 1328, 1, 0, 0, 0, 364, 1332, 1, 0, 0, 0, 366, 1336, 1, 0, 0, 0, 368, 1340, 1, 0, 0, 0, 370, 1345, 1, 0, 0, 0, 372, 1351, 1, 0, 0, 0, 374, 1355, 1, 0, 0, 0, 376, 1359, 1, 0, 0, 0, 378, 1363, 1, 0, 0, 0, 380, 1369, 1, 0, 0, 0, 382, 1373, 1, 0, 0, 0, 384, 1377, 1, 0, 0, 0, 386, 1381, 1, 0, 0, 0, 388, 1387, 1, 0, 0, 0, 390, 1393, 1, 0, 0, 0, 392, 1399, 1, 0, 0, 0, 394, 395, 7, 0, 0, 0, 395, 396, 7, 1, 0, 0, 396, 397, 7, 2, 0, 0, 397, 398, 7, 2, 0, 0, 398, 399, 7, 3, 0, 0, 399, 400, 7, 4, 0, 0, 400, 401, 7, 5, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 6, 0, 0, 0, 403, 17, 1, 0, 0, 0, 404, 405, 7, 0, 0, 0, 405, 406, 7, 6, 0, 0, 406, 407, 7, 7, 0, 0, 407, 408, 7, 8, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 6, 1, 1, 0, 410, 19, 1, 0, 0, 0, 411, 412, 7, 3, 0, 0, 412, 413, 7, 9, 0, 0, 413, 414, 7, 6, 0, 0, 414, 415, 7, 1, 0, 0, 415, 416, 7, 4, 0, 0, 416, 417, 7, 10, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 6, 2, 2, 0, 419, 21, 1, 0, 0, 0, 420, 421, 7, 3, 0, 0, 421, 422, 7, 11, 0, 0, 422, 423, 7, 12, 0, 0, 423, 424, 7, 13, 0, 0, 424, 425, 1, 0, 0, 0, 425, 426, 6, 3, 0, 0, 426, 23, 1, 0, 0, 0, 427, 428, 7, 3, 0, 0, 428, 429, 7, 14, 0, 0, 429, 430, 7, 8, 0, 0, 430, 431, 7, 13, 0, 0, 431, 432, 7, 12, 0, 0, 432, 433, 7, 1, 0, 0, 433, 434, 7, 9, 0, 0, 434, 435, 1, 0, 0, 0, 435, 436, 6, 4, 3, 0, 436, 25, 1, 0, 0, 0, 437, 438, 7, 15, 0, 0, 438, 439, 7, 6, 0, 0, 439, 440, 7, 7, 0, 0, 440, 441, 7, 16, 0, 0, 441, 442, 1, 0, 0, 0, 442, 443, 6, 5, 4, 0, 443, 27, 1, 0, 0, 0, 444, 445, 7, 17, 0, 0, 445, 446, 7, 6, 0, 0, 446, 447, 7, 7, 0, 0, 447, 448, 7, 18, 0, 0, 448, 449, 1, 0, 0, 0, 449, 450, 6, 6, 0, 0, 450, 29, 1, 0, 0, 0, 451, 452, 7, 1, 0, 0, 452, 453, 7, 9, 0, 0, 453, 454, 7, 13, 0, 0, 454, 455, 7, 1, 0, 0, 455, 456, 7, 9, 0, 0, 456, 457, 7, 3, 0, 0, 457, 458, 7, 2, 0, 0, 458, 459, 7, 5, 0, 0, 459, 460, 7, 12, 0, 0, 460, 461, 7, 5, 0, 0, 461, 462, 7, 2, 0, 0, 462, 463, 1, 0, 0, 0, 463, 464, 6, 7, 0, 0, 464, 31, 1, 0, 0, 0, 465, 466, 7, 18, 0, 0, 466, 467, 7, 3, 0, 0, 467, 468, 7, 3, 0, 0, 468, 469, 7, 8, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 6, 8, 1, 0, 471, 33, 1, 0, 0, 0, 472, 473, 7, 13, 0, 0, 473, 474, 7, 1, 0, 0, 474, 475, 7, 16, 0, 0, 475, 476, 7, 1, 0, 0, 476, 477, 7, 5, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 6, 9, 0, 0, 479, 35, 1, 0, 0, 0, 480, 481, 7, 13, 0, 0, 481, 482, 7, 7, 0, 0, 482, 483, 7, 7, 0, 0, 483, 484, 7, 18, 0, 0, 484, 485, 7, 19, 0, 0, 485, 486, 7, 8, 0, 0, 486, 487, 1, 0, 0, 0, 487, 488, 6, 10, 5, 0, 488, 37, 1, 0, 0, 0, 489, 490, 7, 16, 0, 0, 490, 491, 7, 3, 0, 0, 491, 492, 7, 5, 0, 0, 492, 493, 7, 12, 0, 0, 493, 494, 1, 0, 0, 0, 494, 495, 6, 11, 6, 0, 495, 39, 1, 0, 0, 0, 496, 497, 7, 16, 0, 0, 497, 498, 7, 3, 0, 0, 498, 499, 7, 5, 0, 0, 499, 500, 7, 6, 0, 0, 500, 501, 7, 1, 0, 0, 501, 502, 7, 4, 0, 0, 502, 503, 7, 2, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 6, 12, 7, 0, 505, 41, 1, 0, 0, 0, 506, 507, 7, 16, 0, 0, 507, 508, 7, 11, 0, 0, 508, 509, 5, 95, 0, 0, 509, 510, 7, 3, 0, 0, 510, 511, 7, 14, 0, 0, 511, 512, 7, 8, 0, 0, 512, 513, 7, 12, 0, 0, 513, 514, 7, 9, 0, 0, 514, 515, 7, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 6, 13, 8, 0, 517, 43, 1, 0, 0, 0, 518, 519, 7, 6, 0, 0, 519, 520, 7, 3, 0, 0, 520, 521, 7, 9, 0, 0, 521, 522, 7, 12, 0, 0, 522, 523, 7, 16, 0, 0, 523, 524, 7, 3, 0, 0, 524, 525, 1, 0, 0, 0, 525, 526, 6, 14, 9, 0, 526, 45, 1, 0, 0, 0, 527, 528, 7, 6, 0, 0, 528, 529, 7, 7, 0, 0, 529, 530, 7, 20, 0, 0, 530, 531, 1, 0, 0, 0, 531, 532, 6, 15, 0, 0, 532, 47, 1, 0, 0, 0, 533, 534, 7, 2, 0, 0, 534, 535, 7, 10, 0, 0, 535, 536, 7, 7, 0, 0, 536, 537, 7, 20, 0, 0, 537, 538, 1, 0, 0, 0, 538, 539, 6, 16, 10, 0, 539, 49, 1, 0, 0, 0, 540, 541, 7, 2, 0, 0, 541, 542, 7, 7, 0, 0, 542, 543, 7, 6, 0, 0, 543, 544, 7, 5, 0, 0, 544, 545, 1, 0, 0, 0, 545, 546, 6, 17, 0, 0, 546, 51, 1, 0, 0, 0, 547, 548, 7, 2, 0, 0, 548, 549, 7, 5, 0, 0, 549, 550, 7, 12, 0, 0, 550, 551, 7, 5, 0, 0, 551, 552, 7, 2, 0, 0, 552, 553, 1, 0, 0, 0, 553, 554, 6, 18, 0, 0, 554, 53, 1, 0, 0, 0, 555, 556, 7, 20, 0, 0, 556, 557, 7, 10, 0, 0, 557, 558, 7, 3, 0, 0, 558, 559, 7, 6, 0, 0, 559, 560, 7, 3, 0, 0, 560, 561, 1, 0, 0, 0, 561, 562, 6, 19, 0, 0, 562, 55, 1, 0, 0, 0, 563, 565, 8, 21, 0, 0, 564, 563, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 569, 6, 20, 0, 0, 569, 57, 1, 0, 0, 0, 570, 571, 5, 47, 0, 0, 571, 572, 5, 47, 0, 0, 572, 576, 1, 0, 0, 0, 573, 575, 8, 22, 0, 0, 574, 573, 1, 0, 0, 0, 575, 578, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 580, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, 581, 5, 13, 0, 0, 580, 579, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 1, 0, 0, 0, 582, 584, 5, 10, 0, 0, 583, 582, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 586, 6, 21, 11, 0, 586, 59, 1, 0, 0, 0, 587, 588, 5, 47, 0, 0, 588, 589, 5, 42, 0, 0, 589, 594, 1, 0, 0, 0, 590, 593, 3, 60, 22, 0, 591, 593, 9, 0, 0, 0, 592, 590, 1, 0, 0, 0, 592, 591, 1, 0, 0, 0, 593, 596, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 595, 597, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 597, 598, 5, 42, 0, 0, 598, 599, 5, 47, 0, 0, 599, 600, 1, 0, 0, 0, 600, 601, 6, 22, 11, 0, 601, 61, 1, 0, 0, 0, 602, 604, 7, 23, 0, 0, 603, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 608, 6, 23, 11, 0, 608, 63, 1, 0, 0, 0, 609, 613, 8, 24, 0, 0, 610, 611, 5, 47, 0, 0, 611, 613, 8, 25, 0, 0, 612, 609, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 613, 65, 1, 0, 0, 0, 614, 616, 3, 64, 24, 0, 615, 614, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 615, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 67, 1, 0, 0, 0, 619, 620, 3, 176, 80, 0, 620, 621, 1, 0, 0, 0, 621, 622, 6, 26, 12, 0, 622, 623, 6, 26, 13, 0, 623, 69, 1, 0, 0, 0, 624, 625, 3, 78, 31, 0, 625, 626, 1, 0, 0, 0, 626, 627, 6, 27, 14, 0, 627, 628, 6, 27, 15, 0, 628, 71, 1, 0, 0, 0, 629, 630, 3, 62, 23, 0, 630, 631, 1, 0, 0, 0, 631, 632, 6, 28, 11, 0, 632, 73, 1, 0, 0, 0, 633, 634, 3, 58, 21, 0, 634, 635, 1, 0, 0, 0, 635, 636, 6, 29, 11, 0, 636, 75, 1, 0, 0, 0, 637, 638, 3, 60, 22, 0, 638, 639, 1, 0, 0, 0, 639, 640, 6, 30, 11, 0, 640, 77, 1, 0, 0, 0, 641, 642, 5, 124, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 6, 31, 15, 0, 644, 79, 1, 0, 0, 0, 645, 646, 7, 26, 0, 0, 646, 81, 1, 0, 0, 0, 647, 648, 7, 27, 0, 0, 648, 83, 1, 0, 0, 0, 649, 650, 5, 92, 0, 0, 650, 651, 7, 28, 0, 0, 651, 85, 1, 0, 0, 0, 652, 653, 8, 29, 0, 0, 653, 87, 1, 0, 0, 0, 654, 656, 7, 3, 0, 0, 655, 657, 7, 30, 0, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 659, 1, 0, 0, 0, 658, 660, 3, 80, 32, 0, 659, 658, 1, 0, 0, 0, 660, 661, 1, 0, 0, 0, 661, 659, 1, 0, 0, 0, 661, 662, 1, 0, 0, 0, 662, 89, 1, 0, 0, 0, 663, 664, 5, 64, 0, 0, 664, 91, 1, 0, 0, 0, 665, 666, 5, 96, 0, 0, 666, 93, 1, 0, 0, 0, 667, 671, 8, 31, 0, 0, 668, 669, 5, 96, 0, 0, 669, 671, 5, 96, 0, 0, 670, 667, 1, 0, 0, 0, 670, 668, 1, 0, 0, 0, 671, 95, 1, 0, 0, 0, 672, 673, 5, 95, 0, 0, 673, 97, 1, 0, 0, 0, 674, 678, 3, 82, 33, 0, 675, 678, 3, 80, 32, 0, 676, 678, 3, 96, 40, 0, 677, 674, 1, 0, 0, 0, 677, 675, 1, 0, 0, 0, 677, 676, 1, 0, 0, 0, 678, 99, 1, 0, 0, 0, 679, 684, 5, 34, 0, 0, 680, 683, 3, 84, 34, 0, 681, 683, 3, 86, 35, 0, 682, 680, 1, 0, 0, 0, 682, 681, 1, 0, 0, 0, 683, 686, 1, 0, 0, 0, 684, 682, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 687, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 687, 709, 5, 34, 0, 0, 688, 689, 5, 34, 0, 0, 689, 690, 5, 34, 0, 0, 690, 691, 5, 34, 0, 0, 691, 695, 1, 0, 0, 0, 692, 694, 8, 22, 0, 0, 693, 692, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 695, 693, 1, 0, 0, 0, 696, 698, 1, 0, 0, 0, 697, 695, 1, 0, 0, 0, 698, 699, 5, 34, 0, 0, 699, 700, 5, 34, 0, 0, 700, 701, 5, 34, 0, 0, 701, 703, 1, 0, 0, 0, 702, 704, 5, 34, 0, 0, 703, 702, 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 706, 1, 0, 0, 0, 705, 707, 5, 34, 0, 0, 706, 705, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 709, 1, 0, 0, 0, 708, 679, 1, 0, 0, 0, 708, 688, 1, 0, 0, 0, 709, 101, 1, 0, 0, 0, 710, 712, 3, 80, 32, 0, 711, 710, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 103, 1, 0, 0, 0, 715, 717, 3, 80, 32, 0, 716, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 724, 3, 120, 52, 0, 721, 723, 3, 80, 32, 0, 722, 721, 1, 0, 0, 0, 723, 726, 1, 0, 0, 0, 724, 722, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 758, 1, 0, 0, 0, 726, 724, 1, 0, 0, 0, 727, 729, 3, 120, 52, 0, 728, 730, 3, 80, 32, 0, 729, 728, 1, 0, 0, 0, 730, 731, 1, 0, 0, 0, 731, 729, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 758, 1, 0, 0, 0, 733, 735, 3, 80, 32, 0, 734, 733, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 734, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 745, 1, 0, 0, 0, 738, 742, 3, 120, 52, 0, 739, 741, 3, 80, 32, 0, 740, 739, 1, 0, 0, 0, 741, 744, 1, 0, 0, 0, 742, 740, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 746, 1, 0, 0, 0, 744, 742, 1, 0, 0, 0, 745, 738, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 748, 3, 88, 36, 0, 748, 758, 1, 0, 0, 0, 749, 751, 3, 120, 52, 0, 750, 752, 3, 80, 32, 0, 751, 750, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 756, 3, 88, 36, 0, 756, 758, 1, 0, 0, 0, 757, 716, 1, 0, 0, 0, 757, 727, 1, 0, 0, 0, 757, 734, 1, 0, 0, 0, 757, 749, 1, 0, 0, 0, 758, 105, 1, 0, 0, 0, 759, 760, 7, 32, 0, 0, 760, 761, 7, 33, 0, 0, 761, 107, 1, 0, 0, 0, 762, 763, 7, 12, 0, 0, 763, 764, 7, 9, 0, 0, 764, 765, 7, 0, 0, 0, 765, 109, 1, 0, 0, 0, 766, 767, 7, 12, 0, 0, 767, 768, 7, 2, 0, 0, 768, 769, 7, 4, 0, 0, 769, 111, 1, 0, 0, 0, 770, 771, 5, 61, 0, 0, 771, 113, 1, 0, 0, 0, 772, 773, 5, 58, 0, 0, 773, 774, 5, 58, 0, 0, 774, 115, 1, 0, 0, 0, 775, 776, 5, 44, 0, 0, 776, 117, 1, 0, 0, 0, 777, 778, 7, 0, 0, 0, 778, 779, 7, 3, 0, 0, 779, 780, 7, 2, 0, 0, 780, 781, 7, 4, 0, 0, 781, 119, 1, 0, 0, 0, 782, 783, 5, 46, 0, 0, 783, 121, 1, 0, 0, 0, 784, 785, 7, 15, 0, 0, 785, 786, 7, 12, 0, 0, 786, 787, 7, 13, 0, 0, 787, 788, 7, 2, 0, 0, 788, 789, 7, 3, 0, 0, 789, 123, 1, 0, 0, 0, 790, 791, 7, 15, 0, 0, 791, 792, 7, 1, 0, 0, 792, 793, 7, 6, 0, 0, 793, 794, 7, 2, 0, 0, 794, 795, 7, 5, 0, 0, 795, 125, 1, 0, 0, 0, 796, 797, 7, 13, 0, 0, 797, 798, 7, 12, 0, 0, 798, 799, 7, 2, 0, 0, 799, 800, 7, 5, 0, 0, 800, 127, 1, 0, 0, 0, 801, 802, 5, 40, 0, 0, 802, 129, 1, 0, 0, 0, 803, 804, 7, 1, 0, 0, 804, 805, 7, 9, 0, 0, 805, 131, 1, 0, 0, 0, 806, 807, 7, 1, 0, 0, 807, 808, 7, 2, 0, 0, 808, 133, 1, 0, 0, 0, 809, 810, 7, 13, 0, 0, 810, 811, 7, 1, 0, 0, 811, 812, 7, 18, 0, 0, 812, 813, 7, 3, 0, 0, 813, 135, 1, 0, 0, 0, 814, 815, 7, 9, 0, 0, 815, 816, 7, 7, 0, 0, 816, 817, 7, 5, 0, 0, 817, 137, 1, 0, 0, 0, 818, 819, 7, 9, 0, 0, 819, 820, 7, 19, 0, 0, 820, 821, 7, 13, 0, 0, 821, 822, 7, 13, 0, 0, 822, 139, 1, 0, 0, 0, 823, 824, 7, 9, 0, 0, 824, 825, 7, 19, 0, 0, 825, 826, 7, 13, 0, 0, 826, 827, 7, 13, 0, 0, 827, 828, 7, 2, 0, 0, 828, 141, 1, 0, 0, 0, 829, 830, 7, 7, 0, 0, 830, 831, 7, 6, 0, 0, 831, 143, 1, 0, 0, 0, 832, 833, 5, 63, 0, 0, 833, 145, 1, 0, 0, 0, 834, 835, 7, 6, 0, 0, 835, 836, 7, 13, 0, 0, 836, 837, 7, 1, 0, 0, 837, 838, 7, 18, 0, 0, 838, 839, 7, 3, 0, 0, 839, 147, 1, 0, 0, 0, 840, 841, 5, 41, 0, 0, 841, 149, 1, 0, 0, 0, 842, 843, 7, 5, 0, 0, 843, 844, 7, 6, 0, 0, 844, 845, 7, 19, 0, 0, 845, 846, 7, 3, 0, 0, 846, 151, 1, 0, 0, 0, 847, 848, 5, 61, 0, 0, 848, 849, 5, 61, 0, 0, 849, 153, 1, 0, 0, 0, 850, 851, 5, 61, 0, 0, 851, 852, 5, 126, 0, 0, 852, 155, 1, 0, 0, 0, 853, 854, 5, 33, 0, 0, 854, 855, 5, 61, 0, 0, 855, 157, 1, 0, 0, 0, 856, 857, 5, 60, 0, 0, 857, 159, 1, 0, 0, 0, 858, 859, 5, 60, 0, 0, 859, 860, 5, 61, 0, 0, 860, 161, 1, 0, 0, 0, 861, 862, 5, 62, 0, 0, 862, 163, 1, 0, 0, 0, 863, 864, 5, 62, 0, 0, 864, 865, 5, 61, 0, 0, 865, 165, 1, 0, 0, 0, 866, 867, 5, 43, 0, 0, 867, 167, 1, 0, 0, 0, 868, 869, 5, 45, 0, 0, 869, 169, 1, 0, 0, 0, 870, 871, 5, 42, 0, 0, 871, 171, 1, 0, 0, 0, 872, 873, 5, 47, 0, 0, 873, 173, 1, 0, 0, 0, 874, 875, 5, 37, 0, 0, 875, 175, 1, 0, 0, 0, 876, 877, 5, 91, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 6, 80, 0, 0, 879, 880, 6, 80, 0, 0, 880, 177, 1, 0, 0, 0, 881, 882, 5, 93, 0, 0, 882, 883, 1, 0, 0, 0, 883, 884, 6, 81, 15, 0, 884, 885, 6, 81, 15, 0, 885, 179, 1, 0, 0, 0, 886, 890, 3, 82, 33, 0, 887, 889, 3, 98, 41, 0, 888, 887, 1, 0, 0, 0, 889, 892, 1, 0, 0, 0, 890, 888, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 903, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 893, 896, 3, 96, 40, 0, 894, 896, 3, 90, 37, 0, 895, 893, 1, 0, 0, 0, 895, 894, 1, 0, 0, 0, 896, 898, 1, 0, 0, 0, 897, 899, 3, 98, 41, 0, 898, 897, 1, 0, 0, 0, 899, 900, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 903, 1, 0, 0, 0, 902, 886, 1, 0, 0, 0, 902, 895, 1, 0, 0, 0, 903, 181, 1, 0, 0, 0, 904, 906, 3, 92, 38, 0, 905, 907, 3, 94, 39, 0, 906, 905, 1, 0, 0, 0, 907, 908, 1, 0, 0, 0, 908, 906, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 3, 92, 38, 0, 911, 183, 1, 0, 0, 0, 912, 913, 3, 182, 83, 0, 913, 185, 1, 0, 0, 0, 914, 915, 3, 58, 21, 0, 915, 916, 1, 0, 0, 0, 916, 917, 6, 85, 11, 0, 917, 187, 1, 0, 0, 0, 918, 919, 3, 60, 22, 0, 919, 920, 1, 0, 0, 0, 920, 921, 6, 86, 11, 0, 921, 189, 1, 0, 0, 0, 922, 923, 3, 62, 23, 0, 923, 924, 1, 0, 0, 0, 924, 925, 6, 87, 11, 0, 925, 191, 1, 0, 0, 0, 926, 927, 3, 78, 31, 0, 927, 928, 1, 0, 0, 0, 928, 929, 6, 88, 14, 0, 929, 930, 6, 88, 15, 0, 930, 193, 1, 0, 0, 0, 931, 932, 3, 176, 80, 0, 932, 933, 1, 0, 0, 0, 933, 934, 6, 89, 12, 0, 934, 195, 1, 0, 0, 0, 935, 936, 3, 178, 81, 0, 936, 937, 1, 0, 0, 0, 937, 938, 6, 90, 16, 0, 938, 197, 1, 0, 0, 0, 939, 940, 3, 116, 50, 0, 940, 941, 1, 0, 0, 0, 941, 942, 6, 91, 17, 0, 942, 199, 1, 0, 0, 0, 943, 944, 3, 112, 48, 0, 944, 945, 1, 0, 0, 0, 945, 946, 6, 92, 18, 0, 946, 201, 1, 0, 0, 0, 947, 948, 3, 100, 42, 0, 948, 949, 1, 0, 0, 0, 949, 950, 6, 93, 19, 0, 950, 203, 1, 0, 0, 0, 951, 952, 7, 16, 0, 0, 952, 953, 7, 3, 0, 0, 953, 954, 7, 5, 0, 0, 954, 955, 7, 12, 0, 0, 955, 956, 7, 0, 0, 0, 956, 957, 7, 12, 0, 0, 957, 958, 7, 5, 0, 0, 958, 959, 7, 12, 0, 0, 959, 205, 1, 0, 0, 0, 960, 961, 3, 66, 25, 0, 961, 962, 1, 0, 0, 0, 962, 963, 6, 95, 20, 0, 963, 207, 1, 0, 0, 0, 964, 965, 3, 58, 21, 0, 965, 966, 1, 0, 0, 0, 966, 967, 6, 96, 11, 0, 967, 209, 1, 0, 0, 0, 968, 969, 3, 60, 22, 0, 969, 970, 1, 0, 0, 0, 970, 971, 6, 97, 11, 0, 971, 211, 1, 0, 0, 0, 972, 973, 3, 62, 23, 0, 973, 974, 1, 0, 0, 0, 974, 975, 6, 98, 11, 0, 975, 213, 1, 0, 0, 0, 976, 977, 3, 78, 31, 0, 977, 978, 1, 0, 0, 0, 978, 979, 6, 99, 14, 0, 979, 980, 6, 99, 15, 0, 980, 215, 1, 0, 0, 0, 981, 982, 3, 120, 52, 0, 982, 983, 1, 0, 0, 0, 983, 984, 6, 100, 21, 0, 984, 217, 1, 0, 0, 0, 985, 986, 3, 116, 50, 0, 986, 987, 1, 0, 0, 0, 987, 988, 6, 101, 17, 0, 988, 219, 1, 0, 0, 0, 989, 994, 3, 82, 33, 0, 990, 994, 3, 80, 32, 0, 991, 994, 3, 96, 40, 0, 992, 994, 3, 170, 77, 0, 993, 989, 1, 0, 0, 0, 993, 990, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 993, 992, 1, 0, 0, 0, 994, 221, 1, 0, 0, 0, 995, 998, 3, 82, 33, 0, 996, 998, 3, 170, 77, 0, 997, 995, 1, 0, 0, 0, 997, 996, 1, 0, 0, 0, 998, 1002, 1, 0, 0, 0, 999, 1001, 3, 220, 102, 0, 1000, 999, 1, 0, 0, 0, 1001, 1004, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 1015, 1, 0, 0, 0, 1004, 1002, 1, 0, 0, 0, 1005, 1008, 3, 96, 40, 0, 1006, 1008, 3, 90, 37, 0, 1007, 1005, 1, 0, 0, 0, 1007, 1006, 1, 0, 0, 0, 1008, 1010, 1, 0, 0, 0, 1009, 1011, 3, 220, 102, 0, 1010, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1010, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1015, 1, 0, 0, 0, 1014, 997, 1, 0, 0, 0, 1014, 1007, 1, 0, 0, 0, 1015, 223, 1, 0, 0, 0, 1016, 1019, 3, 222, 103, 0, 1017, 1019, 3, 182, 83, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 225, 1, 0, 0, 0, 1022, 1023, 3, 58, 21, 0, 1023, 1024, 1, 0, 0, 0, 1024, 1025, 6, 105, 11, 0, 1025, 227, 1, 0, 0, 0, 1026, 1027, 3, 60, 22, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1029, 6, 106, 11, 0, 1029, 229, 1, 0, 0, 0, 1030, 1031, 3, 62, 23, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1033, 6, 107, 11, 0, 1033, 231, 1, 0, 0, 0, 1034, 1035, 3, 78, 31, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1037, 6, 108, 14, 0, 1037, 1038, 6, 108, 15, 0, 1038, 233, 1, 0, 0, 0, 1039, 1040, 3, 112, 48, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1042, 6, 109, 18, 0, 1042, 235, 1, 0, 0, 0, 1043, 1044, 3, 116, 50, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 6, 110, 17, 0, 1046, 237, 1, 0, 0, 0, 1047, 1048, 3, 120, 52, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1050, 6, 111, 21, 0, 1050, 239, 1, 0, 0, 0, 1051, 1052, 7, 12, 0, 0, 1052, 1053, 7, 2, 0, 0, 1053, 241, 1, 0, 0, 0, 1054, 1055, 3, 224, 104, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1057, 6, 113, 22, 0, 1057, 243, 1, 0, 0, 0, 1058, 1059, 3, 58, 21, 0, 1059, 1060, 1, 0, 0, 0, 1060, 1061, 6, 114, 11, 0, 1061, 245, 1, 0, 0, 0, 1062, 1063, 3, 60, 22, 0, 1063, 1064, 1, 0, 0, 0, 1064, 1065, 6, 115, 11, 0, 1065, 247, 1, 0, 0, 0, 1066, 1067, 3, 62, 23, 0, 1067, 1068, 1, 0, 0, 0, 1068, 1069, 6, 116, 11, 0, 1069, 249, 1, 0, 0, 0, 1070, 1071, 3, 78, 31, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1073, 6, 117, 14, 0, 1073, 1074, 6, 117, 15, 0, 1074, 251, 1, 0, 0, 0, 1075, 1076, 3, 176, 80, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1078, 6, 118, 12, 0, 1078, 1079, 6, 118, 23, 0, 1079, 253, 1, 0, 0, 0, 1080, 1081, 7, 7, 0, 0, 1081, 1082, 7, 9, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1084, 6, 119, 24, 0, 1084, 255, 1, 0, 0, 0, 1085, 1086, 7, 20, 0, 0, 1086, 1087, 7, 1, 0, 0, 1087, 1088, 7, 5, 0, 0, 1088, 1089, 7, 10, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1091, 6, 120, 24, 0, 1091, 257, 1, 0, 0, 0, 1092, 1093, 8, 34, 0, 0, 1093, 259, 1, 0, 0, 0, 1094, 1096, 3, 258, 121, 0, 1095, 1094, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1095, 1, 0, 0, 0, 1097, 1098, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1100, 3, 358, 171, 0, 1100, 1102, 1, 0, 0, 0, 1101, 1095, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1104, 1, 0, 0, 0, 1103, 1105, 3, 258, 121, 0, 1104, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 261, 1, 0, 0, 0, 1108, 1109, 3, 184, 84, 0, 1109, 1110, 1, 0, 0, 0, 1110, 1111, 6, 123, 25, 0, 1111, 263, 1, 0, 0, 0, 1112, 1113, 3, 260, 122, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1115, 6, 124, 26, 0, 1115, 265, 1, 0, 0, 0, 1116, 1117, 3, 58, 21, 0, 1117, 1118, 1, 0, 0, 0, 1118, 1119, 6, 125, 11, 0, 1119, 267, 1, 0, 0, 0, 1120, 1121, 3, 60, 22, 0, 1121, 1122, 1, 0, 0, 0, 1122, 1123, 6, 126, 11, 0, 1123, 269, 1, 0, 0, 0, 1124, 1125, 3, 62, 23, 0, 1125, 1126, 1, 0, 0, 0, 1126, 1127, 6, 127, 11, 0, 1127, 271, 1, 0, 0, 0, 1128, 1129, 3, 78, 31, 0, 1129, 1130, 1, 0, 0, 0, 1130, 1131, 6, 128, 14, 0, 1131, 1132, 6, 128, 15, 0, 1132, 1133, 6, 128, 15, 0, 1133, 273, 1, 0, 0, 0, 1134, 1135, 3, 112, 48, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1137, 6, 129, 18, 0, 1137, 275, 1, 0, 0, 0, 1138, 1139, 3, 116, 50, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1141, 6, 130, 17, 0, 1141, 277, 1, 0, 0, 0, 1142, 1143, 3, 120, 52, 0, 1143, 1144, 1, 0, 0, 0, 1144, 1145, 6, 131, 21, 0, 1145, 279, 1, 0, 0, 0, 1146, 1147, 3, 256, 120, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1149, 6, 132, 27, 0, 1149, 281, 1, 0, 0, 0, 1150, 1151, 3, 224, 104, 0, 1151, 1152, 1, 0, 0, 0, 1152, 1153, 6, 133, 22, 0, 1153, 283, 1, 0, 0, 0, 1154, 1155, 3, 184, 84, 0, 1155, 1156, 1, 0, 0, 0, 1156, 1157, 6, 134, 25, 0, 1157, 285, 1, 0, 0, 0, 1158, 1159, 3, 58, 21, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1161, 6, 135, 11, 0, 1161, 287, 1, 0, 0, 0, 1162, 1163, 3, 60, 22, 0, 1163, 1164, 1, 0, 0, 0, 1164, 1165, 6, 136, 11, 0, 1165, 289, 1, 0, 0, 0, 1166, 1167, 3, 62, 23, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1169, 6, 137, 11, 0, 1169, 291, 1, 0, 0, 0, 1170, 1171, 3, 78, 31, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1173, 6, 138, 14, 0, 1173, 1174, 6, 138, 15, 0, 1174, 293, 1, 0, 0, 0, 1175, 1176, 3, 116, 50, 0, 1176, 1177, 1, 0, 0, 0, 1177, 1178, 6, 139, 17, 0, 1178, 295, 1, 0, 0, 0, 1179, 1180, 3, 120, 52, 0, 1180, 1181, 1, 0, 0, 0, 1181, 1182, 6, 140, 21, 0, 1182, 297, 1, 0, 0, 0, 1183, 1184, 3, 254, 119, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1186, 6, 141, 28, 0, 1186, 1187, 6, 141, 29, 0, 1187, 299, 1, 0, 0, 0, 1188, 1189, 3, 66, 25, 0, 1189, 1190, 1, 0, 0, 0, 1190, 1191, 6, 142, 20, 0, 1191, 301, 1, 0, 0, 0, 1192, 1193, 3, 58, 21, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 6, 143, 11, 0, 1195, 303, 1, 0, 0, 0, 1196, 1197, 3, 60, 22, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 6, 144, 11, 0, 1199, 305, 1, 0, 0, 0, 1200, 1201, 3, 62, 23, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1203, 6, 145, 11, 0, 1203, 307, 1, 0, 0, 0, 1204, 1205, 3, 78, 31, 0, 1205, 1206, 1, 0, 0, 0, 1206, 1207, 6, 146, 14, 0, 1207, 1208, 6, 146, 15, 0, 1208, 1209, 6, 146, 15, 0, 1209, 309, 1, 0, 0, 0, 1210, 1211, 3, 116, 50, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 6, 147, 17, 0, 1213, 311, 1, 0, 0, 0, 1214, 1215, 3, 120, 52, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1217, 6, 148, 21, 0, 1217, 313, 1, 0, 0, 0, 1218, 1219, 3, 224, 104, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1221, 6, 149, 22, 0, 1221, 315, 1, 0, 0, 0, 1222, 1223, 3, 58, 21, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1225, 6, 150, 11, 0, 1225, 317, 1, 0, 0, 0, 1226, 1227, 3, 60, 22, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1229, 6, 151, 11, 0, 1229, 319, 1, 0, 0, 0, 1230, 1231, 3, 62, 23, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1233, 6, 152, 11, 0, 1233, 321, 1, 0, 0, 0, 1234, 1235, 3, 78, 31, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1237, 6, 153, 14, 0, 1237, 1238, 6, 153, 15, 0, 1238, 323, 1, 0, 0, 0, 1239, 1240, 3, 120, 52, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1242, 6, 154, 21, 0, 1242, 325, 1, 0, 0, 0, 1243, 1244, 3, 184, 84, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1246, 6, 155, 25, 0, 1246, 327, 1, 0, 0, 0, 1247, 1248, 3, 180, 82, 0, 1248, 1249, 1, 0, 0, 0, 1249, 1250, 6, 156, 30, 0, 1250, 329, 1, 0, 0, 0, 1251, 1252, 3, 58, 21, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1254, 6, 157, 11, 0, 1254, 331, 1, 0, 0, 0, 1255, 1256, 3, 60, 22, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1258, 6, 158, 11, 0, 1258, 333, 1, 0, 0, 0, 1259, 1260, 3, 62, 23, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1262, 6, 159, 11, 0, 1262, 335, 1, 0, 0, 0, 1263, 1264, 3, 78, 31, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1266, 6, 160, 14, 0, 1266, 1267, 6, 160, 15, 0, 1267, 337, 1, 0, 0, 0, 1268, 1269, 7, 1, 0, 0, 1269, 1270, 7, 9, 0, 0, 1270, 1271, 7, 15, 0, 0, 1271, 1272, 7, 7, 0, 0, 1272, 339, 1, 0, 0, 0, 1273, 1274, 3, 58, 21, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1276, 6, 162, 11, 0, 1276, 341, 1, 0, 0, 0, 1277, 1278, 3, 60, 22, 0, 1278, 1279, 1, 0, 0, 0, 1279, 1280, 6, 163, 11, 0, 1280, 343, 1, 0, 0, 0, 1281, 1282, 3, 62, 23, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 6, 164, 11, 0, 1284, 345, 1, 0, 0, 0, 1285, 1286, 3, 78, 31, 0, 1286, 1287, 1, 0, 0, 0, 1287, 1288, 6, 165, 14, 0, 1288, 1289, 6, 165, 15, 0, 1289, 347, 1, 0, 0, 0, 1290, 1291, 7, 15, 0, 0, 1291, 1292, 7, 19, 0, 0, 1292, 1293, 7, 9, 0, 0, 1293, 1294, 7, 4, 0, 0, 1294, 1295, 7, 5, 0, 0, 1295, 1296, 7, 1, 0, 0, 1296, 1297, 7, 7, 0, 0, 1297, 1298, 7, 9, 0, 0, 1298, 1299, 7, 2, 0, 0, 1299, 349, 1, 0, 0, 0, 1300, 1301, 3, 58, 21, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1303, 6, 167, 11, 0, 1303, 351, 1, 0, 0, 0, 1304, 1305, 3, 60, 22, 0, 1305, 1306, 1, 0, 0, 0, 1306, 1307, 6, 168, 11, 0, 1307, 353, 1, 0, 0, 0, 1308, 1309, 3, 62, 23, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1311, 6, 169, 11, 0, 1311, 355, 1, 0, 0, 0, 1312, 1313, 3, 178, 81, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1315, 6, 170, 16, 0, 1315, 1316, 6, 170, 15, 0, 1316, 357, 1, 0, 0, 0, 1317, 1318, 5, 58, 0, 0, 1318, 359, 1, 0, 0, 0, 1319, 1325, 3, 90, 37, 0, 1320, 1325, 3, 80, 32, 0, 1321, 1325, 3, 120, 52, 0, 1322, 1325, 3, 82, 33, 0, 1323, 1325, 3, 96, 40, 0, 1324, 1319, 1, 0, 0, 0, 1324, 1320, 1, 0, 0, 0, 1324, 1321, 1, 0, 0, 0, 1324, 1322, 1, 0, 0, 0, 1324, 1323, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 1324, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 361, 1, 0, 0, 0, 1328, 1329, 3, 58, 21, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1331, 6, 173, 11, 0, 1331, 363, 1, 0, 0, 0, 1332, 1333, 3, 60, 22, 0, 1333, 1334, 1, 0, 0, 0, 1334, 1335, 6, 174, 11, 0, 1335, 365, 1, 0, 0, 0, 1336, 1337, 3, 62, 23, 0, 1337, 1338, 1, 0, 0, 0, 1338, 1339, 6, 175, 11, 0, 1339, 367, 1, 0, 0, 0, 1340, 1341, 3, 78, 31, 0, 1341, 1342, 1, 0, 0, 0, 1342, 1343, 6, 176, 14, 0, 1343, 1344, 6, 176, 15, 0, 1344, 369, 1, 0, 0, 0, 1345, 1346, 3, 66, 25, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1348, 6, 177, 20, 0, 1348, 1349, 6, 177, 15, 0, 1349, 1350, 6, 177, 31, 0, 1350, 371, 1, 0, 0, 0, 1351, 1352, 3, 58, 21, 0, 1352, 1353, 1, 0, 0, 0, 1353, 1354, 6, 178, 11, 0, 1354, 373, 1, 0, 0, 0, 1355, 1356, 3, 60, 22, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1358, 6, 179, 11, 0, 1358, 375, 1, 0, 0, 0, 1359, 1360, 3, 62, 23, 0, 1360, 1361, 1, 0, 0, 0, 1361, 1362, 6, 180, 11, 0, 1362, 377, 1, 0, 0, 0, 1363, 1364, 3, 116, 50, 0, 1364, 1365, 1, 0, 0, 0, 1365, 1366, 6, 181, 17, 0, 1366, 1367, 6, 181, 15, 0, 1367, 1368, 6, 181, 7, 0, 1368, 379, 1, 0, 0, 0, 1369, 1370, 3, 58, 21, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1372, 6, 182, 11, 0, 1372, 381, 1, 0, 0, 0, 1373, 1374, 3, 60, 22, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1376, 6, 183, 11, 0, 1376, 383, 1, 0, 0, 0, 1377, 1378, 3, 62, 23, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1380, 6, 184, 11, 0, 1380, 385, 1, 0, 0, 0, 1381, 1382, 3, 184, 84, 0, 1382, 1383, 1, 0, 0, 0, 1383, 1384, 6, 185, 15, 0, 1384, 1385, 6, 185, 0, 0, 1385, 1386, 6, 185, 25, 0, 1386, 387, 1, 0, 0, 0, 1387, 1388, 3, 180, 82, 0, 1388, 1389, 1, 0, 0, 0, 1389, 1390, 6, 186, 15, 0, 1390, 1391, 6, 186, 0, 0, 1391, 1392, 6, 186, 30, 0, 1392, 389, 1, 0, 0, 0, 1393, 1394, 3, 106, 45, 0, 1394, 1395, 1, 0, 0, 0, 1395, 1396, 6, 187, 15, 0, 1396, 1397, 6, 187, 0, 0, 1397, 1398, 6, 187, 32, 0, 1398, 391, 1, 0, 0, 0, 1399, 1400, 3, 78, 31, 0, 1400, 1401, 1, 0, 0, 0, 1401, 1402, 6, 188, 14, 0, 1402, 1403, 6, 188, 15, 0, 1403, 393, 1, 0, 0, 0, 62, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 566, 576, 580, 583, 592, 594, 605, 612, 617, 656, 661, 670, 677, 682, 684, 695, 703, 706, 708, 713, 718, 724, 731, 736, 742, 745, 753, 757, 890, 895, 900, 902, 908, 993, 997, 1002, 1007, 1012, 1014, 1018, 1020, 1097, 1101, 1106, 1324, 1326, 33, 5, 2, 0, 5, 4, 0, 5, 6, 0, 5, 1, 0, 5, 3, 0, 5, 8, 0, 5, 12, 0, 5, 14, 0, 5, 10, 0, 5, 5, 0, 5, 11, 0, 0, 1, 0, 7, 68, 0, 5, 0, 0, 7, 29, 0, 4, 0, 0, 7, 69, 0, 7, 38, 0, 7, 36, 0, 7, 30, 0, 7, 25, 0, 7, 40, 0, 7, 79, 0, 5, 13, 0, 5, 7, 0, 7, 71, 0, 7, 89, 0, 7, 88, 0, 7, 87, 0, 5, 9, 0, 7, 70, 0, 5, 15, 0, 7, 33, 0] \ No newline at end of file +[4, 0, 124, 1422, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 4, 20, 567, 8, 20, 11, 20, 12, 20, 568, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 577, 8, 21, 10, 21, 12, 21, 580, 9, 21, 1, 21, 3, 21, 583, 8, 21, 1, 21, 3, 21, 586, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 595, 8, 22, 10, 22, 12, 22, 598, 9, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 4, 23, 606, 8, 23, 11, 23, 12, 23, 607, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 3, 24, 615, 8, 24, 1, 25, 4, 25, 618, 8, 25, 11, 25, 12, 25, 619, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 3, 36, 659, 8, 36, 1, 36, 4, 36, 662, 8, 36, 11, 36, 12, 36, 663, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 3, 39, 673, 8, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 3, 41, 680, 8, 41, 1, 42, 1, 42, 1, 42, 5, 42, 685, 8, 42, 10, 42, 12, 42, 688, 9, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 696, 8, 42, 10, 42, 12, 42, 699, 9, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 706, 8, 42, 1, 42, 3, 42, 709, 8, 42, 3, 42, 711, 8, 42, 1, 43, 4, 43, 714, 8, 43, 11, 43, 12, 43, 715, 1, 44, 4, 44, 719, 8, 44, 11, 44, 12, 44, 720, 1, 44, 1, 44, 5, 44, 725, 8, 44, 10, 44, 12, 44, 728, 9, 44, 1, 44, 1, 44, 4, 44, 732, 8, 44, 11, 44, 12, 44, 733, 1, 44, 4, 44, 737, 8, 44, 11, 44, 12, 44, 738, 1, 44, 1, 44, 5, 44, 743, 8, 44, 10, 44, 12, 44, 746, 9, 44, 3, 44, 748, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 4, 44, 754, 8, 44, 11, 44, 12, 44, 755, 1, 44, 1, 44, 3, 44, 760, 8, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 5, 80, 882, 8, 80, 10, 80, 12, 80, 885, 9, 80, 1, 80, 1, 80, 4, 80, 889, 8, 80, 11, 80, 12, 80, 890, 3, 80, 893, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 5, 83, 907, 8, 83, 10, 83, 12, 83, 910, 9, 83, 1, 83, 1, 83, 3, 83, 914, 8, 83, 1, 83, 4, 83, 917, 8, 83, 11, 83, 12, 83, 918, 3, 83, 921, 8, 83, 1, 84, 1, 84, 4, 84, 925, 8, 84, 11, 84, 12, 84, 926, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1012, 8, 103, 1, 104, 1, 104, 3, 104, 1016, 8, 104, 1, 104, 5, 104, 1019, 8, 104, 10, 104, 12, 104, 1022, 9, 104, 1, 104, 1, 104, 3, 104, 1026, 8, 104, 1, 104, 4, 104, 1029, 8, 104, 11, 104, 12, 104, 1030, 3, 104, 1033, 8, 104, 1, 105, 1, 105, 4, 105, 1037, 8, 105, 11, 105, 12, 105, 1038, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 4, 123, 1114, 8, 123, 11, 123, 12, 123, 1115, 1, 123, 1, 123, 3, 123, 1120, 8, 123, 1, 123, 4, 123, 1123, 8, 123, 11, 123, 12, 123, 1124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 4, 173, 1343, 8, 173, 11, 173, 12, 173, 1344, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 2, 596, 697, 0, 190, 16, 1, 18, 2, 20, 3, 22, 4, 24, 5, 26, 6, 28, 7, 30, 8, 32, 9, 34, 10, 36, 11, 38, 12, 40, 13, 42, 14, 44, 15, 46, 16, 48, 17, 50, 18, 52, 19, 54, 20, 56, 21, 58, 22, 60, 23, 62, 24, 64, 0, 66, 25, 68, 0, 70, 0, 72, 26, 74, 27, 76, 28, 78, 29, 80, 0, 82, 0, 84, 0, 86, 0, 88, 0, 90, 0, 92, 0, 94, 0, 96, 0, 98, 0, 100, 30, 102, 31, 104, 32, 106, 33, 108, 34, 110, 35, 112, 36, 114, 37, 116, 38, 118, 39, 120, 40, 122, 41, 124, 42, 126, 43, 128, 44, 130, 45, 132, 46, 134, 47, 136, 48, 138, 49, 140, 50, 142, 51, 144, 52, 146, 53, 148, 54, 150, 55, 152, 56, 154, 57, 156, 58, 158, 59, 160, 60, 162, 61, 164, 62, 166, 63, 168, 64, 170, 65, 172, 66, 174, 67, 176, 68, 178, 69, 180, 70, 182, 71, 184, 0, 186, 72, 188, 73, 190, 74, 192, 75, 194, 0, 196, 0, 198, 0, 200, 0, 202, 0, 204, 0, 206, 76, 208, 0, 210, 77, 212, 78, 214, 79, 216, 0, 218, 0, 220, 0, 222, 0, 224, 0, 226, 80, 228, 81, 230, 82, 232, 83, 234, 0, 236, 0, 238, 0, 240, 0, 242, 84, 244, 0, 246, 85, 248, 86, 250, 87, 252, 0, 254, 0, 256, 88, 258, 89, 260, 0, 262, 90, 264, 0, 266, 0, 268, 91, 270, 92, 272, 93, 274, 0, 276, 0, 278, 0, 280, 0, 282, 0, 284, 0, 286, 0, 288, 94, 290, 95, 292, 96, 294, 0, 296, 0, 298, 0, 300, 0, 302, 0, 304, 97, 306, 98, 308, 99, 310, 0, 312, 0, 314, 0, 316, 0, 318, 100, 320, 101, 322, 102, 324, 0, 326, 0, 328, 0, 330, 0, 332, 103, 334, 104, 336, 105, 338, 0, 340, 106, 342, 107, 344, 108, 346, 109, 348, 0, 350, 110, 352, 111, 354, 112, 356, 113, 358, 0, 360, 114, 362, 115, 364, 116, 366, 117, 368, 118, 370, 0, 372, 0, 374, 119, 376, 120, 378, 121, 380, 0, 382, 122, 384, 123, 386, 124, 388, 0, 390, 0, 392, 0, 394, 0, 16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 35, 2, 0, 68, 68, 100, 100, 2, 0, 73, 73, 105, 105, 2, 0, 83, 83, 115, 115, 2, 0, 69, 69, 101, 101, 2, 0, 67, 67, 99, 99, 2, 0, 84, 84, 116, 116, 2, 0, 82, 82, 114, 114, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 78, 78, 110, 110, 2, 0, 72, 72, 104, 104, 2, 0, 86, 86, 118, 118, 2, 0, 65, 65, 97, 97, 2, 0, 76, 76, 108, 108, 2, 0, 88, 88, 120, 120, 2, 0, 70, 70, 102, 102, 2, 0, 77, 77, 109, 109, 2, 0, 71, 71, 103, 103, 2, 0, 75, 75, 107, 107, 2, 0, 85, 85, 117, 117, 2, 0, 87, 87, 119, 119, 6, 0, 9, 10, 13, 13, 32, 32, 47, 47, 91, 91, 93, 93, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 10, 0, 9, 10, 13, 13, 32, 32, 44, 44, 47, 47, 61, 61, 91, 91, 93, 93, 96, 96, 124, 124, 2, 0, 42, 42, 47, 47, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 8, 0, 34, 34, 78, 78, 82, 82, 84, 84, 92, 92, 110, 110, 114, 114, 116, 116, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 2, 0, 43, 43, 45, 45, 1, 0, 96, 96, 2, 0, 66, 66, 98, 98, 2, 0, 89, 89, 121, 121, 11, 0, 9, 10, 13, 13, 32, 32, 34, 35, 44, 44, 47, 47, 58, 58, 60, 60, 62, 63, 92, 92, 124, 124, 1448, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 1, 68, 1, 0, 0, 0, 1, 70, 1, 0, 0, 0, 1, 72, 1, 0, 0, 0, 1, 74, 1, 0, 0, 0, 1, 76, 1, 0, 0, 0, 2, 78, 1, 0, 0, 0, 2, 100, 1, 0, 0, 0, 2, 102, 1, 0, 0, 0, 2, 104, 1, 0, 0, 0, 2, 106, 1, 0, 0, 0, 2, 108, 1, 0, 0, 0, 2, 110, 1, 0, 0, 0, 2, 112, 1, 0, 0, 0, 2, 114, 1, 0, 0, 0, 2, 116, 1, 0, 0, 0, 2, 118, 1, 0, 0, 0, 2, 120, 1, 0, 0, 0, 2, 122, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 2, 126, 1, 0, 0, 0, 2, 128, 1, 0, 0, 0, 2, 130, 1, 0, 0, 0, 2, 132, 1, 0, 0, 0, 2, 134, 1, 0, 0, 0, 2, 136, 1, 0, 0, 0, 2, 138, 1, 0, 0, 0, 2, 140, 1, 0, 0, 0, 2, 142, 1, 0, 0, 0, 2, 144, 1, 0, 0, 0, 2, 146, 1, 0, 0, 0, 2, 148, 1, 0, 0, 0, 2, 150, 1, 0, 0, 0, 2, 152, 1, 0, 0, 0, 2, 154, 1, 0, 0, 0, 2, 156, 1, 0, 0, 0, 2, 158, 1, 0, 0, 0, 2, 160, 1, 0, 0, 0, 2, 162, 1, 0, 0, 0, 2, 164, 1, 0, 0, 0, 2, 166, 1, 0, 0, 0, 2, 168, 1, 0, 0, 0, 2, 170, 1, 0, 0, 0, 2, 172, 1, 0, 0, 0, 2, 174, 1, 0, 0, 0, 2, 176, 1, 0, 0, 0, 2, 178, 1, 0, 0, 0, 2, 180, 1, 0, 0, 0, 2, 182, 1, 0, 0, 0, 2, 186, 1, 0, 0, 0, 2, 188, 1, 0, 0, 0, 2, 190, 1, 0, 0, 0, 2, 192, 1, 0, 0, 0, 3, 194, 1, 0, 0, 0, 3, 196, 1, 0, 0, 0, 3, 198, 1, 0, 0, 0, 3, 200, 1, 0, 0, 0, 3, 202, 1, 0, 0, 0, 3, 204, 1, 0, 0, 0, 3, 206, 1, 0, 0, 0, 3, 208, 1, 0, 0, 0, 3, 210, 1, 0, 0, 0, 3, 212, 1, 0, 0, 0, 3, 214, 1, 0, 0, 0, 4, 216, 1, 0, 0, 0, 4, 218, 1, 0, 0, 0, 4, 220, 1, 0, 0, 0, 4, 226, 1, 0, 0, 0, 4, 228, 1, 0, 0, 0, 4, 230, 1, 0, 0, 0, 4, 232, 1, 0, 0, 0, 5, 234, 1, 0, 0, 0, 5, 236, 1, 0, 0, 0, 5, 238, 1, 0, 0, 0, 5, 240, 1, 0, 0, 0, 5, 242, 1, 0, 0, 0, 5, 244, 1, 0, 0, 0, 5, 246, 1, 0, 0, 0, 5, 248, 1, 0, 0, 0, 5, 250, 1, 0, 0, 0, 6, 252, 1, 0, 0, 0, 6, 254, 1, 0, 0, 0, 6, 256, 1, 0, 0, 0, 6, 258, 1, 0, 0, 0, 6, 262, 1, 0, 0, 0, 6, 264, 1, 0, 0, 0, 6, 266, 1, 0, 0, 0, 6, 268, 1, 0, 0, 0, 6, 270, 1, 0, 0, 0, 6, 272, 1, 0, 0, 0, 7, 274, 1, 0, 0, 0, 7, 276, 1, 0, 0, 0, 7, 278, 1, 0, 0, 0, 7, 280, 1, 0, 0, 0, 7, 282, 1, 0, 0, 0, 7, 284, 1, 0, 0, 0, 7, 286, 1, 0, 0, 0, 7, 288, 1, 0, 0, 0, 7, 290, 1, 0, 0, 0, 7, 292, 1, 0, 0, 0, 8, 294, 1, 0, 0, 0, 8, 296, 1, 0, 0, 0, 8, 298, 1, 0, 0, 0, 8, 300, 1, 0, 0, 0, 8, 302, 1, 0, 0, 0, 8, 304, 1, 0, 0, 0, 8, 306, 1, 0, 0, 0, 8, 308, 1, 0, 0, 0, 9, 310, 1, 0, 0, 0, 9, 312, 1, 0, 0, 0, 9, 314, 1, 0, 0, 0, 9, 316, 1, 0, 0, 0, 9, 318, 1, 0, 0, 0, 9, 320, 1, 0, 0, 0, 9, 322, 1, 0, 0, 0, 10, 324, 1, 0, 0, 0, 10, 326, 1, 0, 0, 0, 10, 328, 1, 0, 0, 0, 10, 330, 1, 0, 0, 0, 10, 332, 1, 0, 0, 0, 10, 334, 1, 0, 0, 0, 10, 336, 1, 0, 0, 0, 11, 338, 1, 0, 0, 0, 11, 340, 1, 0, 0, 0, 11, 342, 1, 0, 0, 0, 11, 344, 1, 0, 0, 0, 11, 346, 1, 0, 0, 0, 12, 348, 1, 0, 0, 0, 12, 350, 1, 0, 0, 0, 12, 352, 1, 0, 0, 0, 12, 354, 1, 0, 0, 0, 12, 356, 1, 0, 0, 0, 13, 358, 1, 0, 0, 0, 13, 360, 1, 0, 0, 0, 13, 362, 1, 0, 0, 0, 13, 364, 1, 0, 0, 0, 13, 366, 1, 0, 0, 0, 13, 368, 1, 0, 0, 0, 14, 370, 1, 0, 0, 0, 14, 372, 1, 0, 0, 0, 14, 374, 1, 0, 0, 0, 14, 376, 1, 0, 0, 0, 14, 378, 1, 0, 0, 0, 15, 380, 1, 0, 0, 0, 15, 382, 1, 0, 0, 0, 15, 384, 1, 0, 0, 0, 15, 386, 1, 0, 0, 0, 15, 388, 1, 0, 0, 0, 15, 390, 1, 0, 0, 0, 15, 392, 1, 0, 0, 0, 15, 394, 1, 0, 0, 0, 16, 396, 1, 0, 0, 0, 18, 406, 1, 0, 0, 0, 20, 413, 1, 0, 0, 0, 22, 422, 1, 0, 0, 0, 24, 429, 1, 0, 0, 0, 26, 439, 1, 0, 0, 0, 28, 446, 1, 0, 0, 0, 30, 453, 1, 0, 0, 0, 32, 467, 1, 0, 0, 0, 34, 474, 1, 0, 0, 0, 36, 482, 1, 0, 0, 0, 38, 491, 1, 0, 0, 0, 40, 498, 1, 0, 0, 0, 42, 508, 1, 0, 0, 0, 44, 520, 1, 0, 0, 0, 46, 529, 1, 0, 0, 0, 48, 535, 1, 0, 0, 0, 50, 542, 1, 0, 0, 0, 52, 549, 1, 0, 0, 0, 54, 557, 1, 0, 0, 0, 56, 566, 1, 0, 0, 0, 58, 572, 1, 0, 0, 0, 60, 589, 1, 0, 0, 0, 62, 605, 1, 0, 0, 0, 64, 614, 1, 0, 0, 0, 66, 617, 1, 0, 0, 0, 68, 621, 1, 0, 0, 0, 70, 626, 1, 0, 0, 0, 72, 631, 1, 0, 0, 0, 74, 635, 1, 0, 0, 0, 76, 639, 1, 0, 0, 0, 78, 643, 1, 0, 0, 0, 80, 647, 1, 0, 0, 0, 82, 649, 1, 0, 0, 0, 84, 651, 1, 0, 0, 0, 86, 654, 1, 0, 0, 0, 88, 656, 1, 0, 0, 0, 90, 665, 1, 0, 0, 0, 92, 667, 1, 0, 0, 0, 94, 672, 1, 0, 0, 0, 96, 674, 1, 0, 0, 0, 98, 679, 1, 0, 0, 0, 100, 710, 1, 0, 0, 0, 102, 713, 1, 0, 0, 0, 104, 759, 1, 0, 0, 0, 106, 761, 1, 0, 0, 0, 108, 764, 1, 0, 0, 0, 110, 768, 1, 0, 0, 0, 112, 772, 1, 0, 0, 0, 114, 774, 1, 0, 0, 0, 116, 777, 1, 0, 0, 0, 118, 779, 1, 0, 0, 0, 120, 784, 1, 0, 0, 0, 122, 786, 1, 0, 0, 0, 124, 792, 1, 0, 0, 0, 126, 798, 1, 0, 0, 0, 128, 803, 1, 0, 0, 0, 130, 805, 1, 0, 0, 0, 132, 808, 1, 0, 0, 0, 134, 811, 1, 0, 0, 0, 136, 816, 1, 0, 0, 0, 138, 820, 1, 0, 0, 0, 140, 825, 1, 0, 0, 0, 142, 831, 1, 0, 0, 0, 144, 834, 1, 0, 0, 0, 146, 836, 1, 0, 0, 0, 148, 842, 1, 0, 0, 0, 150, 844, 1, 0, 0, 0, 152, 849, 1, 0, 0, 0, 154, 852, 1, 0, 0, 0, 156, 855, 1, 0, 0, 0, 158, 858, 1, 0, 0, 0, 160, 860, 1, 0, 0, 0, 162, 863, 1, 0, 0, 0, 164, 865, 1, 0, 0, 0, 166, 868, 1, 0, 0, 0, 168, 870, 1, 0, 0, 0, 170, 872, 1, 0, 0, 0, 172, 874, 1, 0, 0, 0, 174, 876, 1, 0, 0, 0, 176, 892, 1, 0, 0, 0, 178, 894, 1, 0, 0, 0, 180, 899, 1, 0, 0, 0, 182, 920, 1, 0, 0, 0, 184, 922, 1, 0, 0, 0, 186, 930, 1, 0, 0, 0, 188, 932, 1, 0, 0, 0, 190, 936, 1, 0, 0, 0, 192, 940, 1, 0, 0, 0, 194, 944, 1, 0, 0, 0, 196, 949, 1, 0, 0, 0, 198, 953, 1, 0, 0, 0, 200, 957, 1, 0, 0, 0, 202, 961, 1, 0, 0, 0, 204, 965, 1, 0, 0, 0, 206, 969, 1, 0, 0, 0, 208, 978, 1, 0, 0, 0, 210, 982, 1, 0, 0, 0, 212, 986, 1, 0, 0, 0, 214, 990, 1, 0, 0, 0, 216, 994, 1, 0, 0, 0, 218, 999, 1, 0, 0, 0, 220, 1003, 1, 0, 0, 0, 222, 1011, 1, 0, 0, 0, 224, 1032, 1, 0, 0, 0, 226, 1036, 1, 0, 0, 0, 228, 1040, 1, 0, 0, 0, 230, 1044, 1, 0, 0, 0, 232, 1048, 1, 0, 0, 0, 234, 1052, 1, 0, 0, 0, 236, 1057, 1, 0, 0, 0, 238, 1061, 1, 0, 0, 0, 240, 1065, 1, 0, 0, 0, 242, 1069, 1, 0, 0, 0, 244, 1072, 1, 0, 0, 0, 246, 1076, 1, 0, 0, 0, 248, 1080, 1, 0, 0, 0, 250, 1084, 1, 0, 0, 0, 252, 1088, 1, 0, 0, 0, 254, 1093, 1, 0, 0, 0, 256, 1098, 1, 0, 0, 0, 258, 1103, 1, 0, 0, 0, 260, 1110, 1, 0, 0, 0, 262, 1119, 1, 0, 0, 0, 264, 1126, 1, 0, 0, 0, 266, 1130, 1, 0, 0, 0, 268, 1134, 1, 0, 0, 0, 270, 1138, 1, 0, 0, 0, 272, 1142, 1, 0, 0, 0, 274, 1146, 1, 0, 0, 0, 276, 1152, 1, 0, 0, 0, 278, 1156, 1, 0, 0, 0, 280, 1160, 1, 0, 0, 0, 282, 1164, 1, 0, 0, 0, 284, 1168, 1, 0, 0, 0, 286, 1172, 1, 0, 0, 0, 288, 1176, 1, 0, 0, 0, 290, 1180, 1, 0, 0, 0, 292, 1184, 1, 0, 0, 0, 294, 1188, 1, 0, 0, 0, 296, 1193, 1, 0, 0, 0, 298, 1197, 1, 0, 0, 0, 300, 1201, 1, 0, 0, 0, 302, 1206, 1, 0, 0, 0, 304, 1210, 1, 0, 0, 0, 306, 1214, 1, 0, 0, 0, 308, 1218, 1, 0, 0, 0, 310, 1222, 1, 0, 0, 0, 312, 1228, 1, 0, 0, 0, 314, 1232, 1, 0, 0, 0, 316, 1236, 1, 0, 0, 0, 318, 1240, 1, 0, 0, 0, 320, 1244, 1, 0, 0, 0, 322, 1248, 1, 0, 0, 0, 324, 1252, 1, 0, 0, 0, 326, 1257, 1, 0, 0, 0, 328, 1261, 1, 0, 0, 0, 330, 1265, 1, 0, 0, 0, 332, 1269, 1, 0, 0, 0, 334, 1273, 1, 0, 0, 0, 336, 1277, 1, 0, 0, 0, 338, 1281, 1, 0, 0, 0, 340, 1286, 1, 0, 0, 0, 342, 1291, 1, 0, 0, 0, 344, 1295, 1, 0, 0, 0, 346, 1299, 1, 0, 0, 0, 348, 1303, 1, 0, 0, 0, 350, 1308, 1, 0, 0, 0, 352, 1318, 1, 0, 0, 0, 354, 1322, 1, 0, 0, 0, 356, 1326, 1, 0, 0, 0, 358, 1330, 1, 0, 0, 0, 360, 1335, 1, 0, 0, 0, 362, 1342, 1, 0, 0, 0, 364, 1346, 1, 0, 0, 0, 366, 1350, 1, 0, 0, 0, 368, 1354, 1, 0, 0, 0, 370, 1358, 1, 0, 0, 0, 372, 1363, 1, 0, 0, 0, 374, 1369, 1, 0, 0, 0, 376, 1373, 1, 0, 0, 0, 378, 1377, 1, 0, 0, 0, 380, 1381, 1, 0, 0, 0, 382, 1387, 1, 0, 0, 0, 384, 1391, 1, 0, 0, 0, 386, 1395, 1, 0, 0, 0, 388, 1399, 1, 0, 0, 0, 390, 1405, 1, 0, 0, 0, 392, 1411, 1, 0, 0, 0, 394, 1417, 1, 0, 0, 0, 396, 397, 7, 0, 0, 0, 397, 398, 7, 1, 0, 0, 398, 399, 7, 2, 0, 0, 399, 400, 7, 2, 0, 0, 400, 401, 7, 3, 0, 0, 401, 402, 7, 4, 0, 0, 402, 403, 7, 5, 0, 0, 403, 404, 1, 0, 0, 0, 404, 405, 6, 0, 0, 0, 405, 17, 1, 0, 0, 0, 406, 407, 7, 0, 0, 0, 407, 408, 7, 6, 0, 0, 408, 409, 7, 7, 0, 0, 409, 410, 7, 8, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 6, 1, 1, 0, 412, 19, 1, 0, 0, 0, 413, 414, 7, 3, 0, 0, 414, 415, 7, 9, 0, 0, 415, 416, 7, 6, 0, 0, 416, 417, 7, 1, 0, 0, 417, 418, 7, 4, 0, 0, 418, 419, 7, 10, 0, 0, 419, 420, 1, 0, 0, 0, 420, 421, 6, 2, 2, 0, 421, 21, 1, 0, 0, 0, 422, 423, 7, 3, 0, 0, 423, 424, 7, 11, 0, 0, 424, 425, 7, 12, 0, 0, 425, 426, 7, 13, 0, 0, 426, 427, 1, 0, 0, 0, 427, 428, 6, 3, 0, 0, 428, 23, 1, 0, 0, 0, 429, 430, 7, 3, 0, 0, 430, 431, 7, 14, 0, 0, 431, 432, 7, 8, 0, 0, 432, 433, 7, 13, 0, 0, 433, 434, 7, 12, 0, 0, 434, 435, 7, 1, 0, 0, 435, 436, 7, 9, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 6, 4, 3, 0, 438, 25, 1, 0, 0, 0, 439, 440, 7, 15, 0, 0, 440, 441, 7, 6, 0, 0, 441, 442, 7, 7, 0, 0, 442, 443, 7, 16, 0, 0, 443, 444, 1, 0, 0, 0, 444, 445, 6, 5, 4, 0, 445, 27, 1, 0, 0, 0, 446, 447, 7, 17, 0, 0, 447, 448, 7, 6, 0, 0, 448, 449, 7, 7, 0, 0, 449, 450, 7, 18, 0, 0, 450, 451, 1, 0, 0, 0, 451, 452, 6, 6, 0, 0, 452, 29, 1, 0, 0, 0, 453, 454, 7, 1, 0, 0, 454, 455, 7, 9, 0, 0, 455, 456, 7, 13, 0, 0, 456, 457, 7, 1, 0, 0, 457, 458, 7, 9, 0, 0, 458, 459, 7, 3, 0, 0, 459, 460, 7, 2, 0, 0, 460, 461, 7, 5, 0, 0, 461, 462, 7, 12, 0, 0, 462, 463, 7, 5, 0, 0, 463, 464, 7, 2, 0, 0, 464, 465, 1, 0, 0, 0, 465, 466, 6, 7, 0, 0, 466, 31, 1, 0, 0, 0, 467, 468, 7, 18, 0, 0, 468, 469, 7, 3, 0, 0, 469, 470, 7, 3, 0, 0, 470, 471, 7, 8, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 6, 8, 1, 0, 473, 33, 1, 0, 0, 0, 474, 475, 7, 13, 0, 0, 475, 476, 7, 1, 0, 0, 476, 477, 7, 16, 0, 0, 477, 478, 7, 1, 0, 0, 478, 479, 7, 5, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 6, 9, 0, 0, 481, 35, 1, 0, 0, 0, 482, 483, 7, 13, 0, 0, 483, 484, 7, 7, 0, 0, 484, 485, 7, 7, 0, 0, 485, 486, 7, 18, 0, 0, 486, 487, 7, 19, 0, 0, 487, 488, 7, 8, 0, 0, 488, 489, 1, 0, 0, 0, 489, 490, 6, 10, 5, 0, 490, 37, 1, 0, 0, 0, 491, 492, 7, 16, 0, 0, 492, 493, 7, 3, 0, 0, 493, 494, 7, 5, 0, 0, 494, 495, 7, 12, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 6, 11, 6, 0, 497, 39, 1, 0, 0, 0, 498, 499, 7, 16, 0, 0, 499, 500, 7, 3, 0, 0, 500, 501, 7, 5, 0, 0, 501, 502, 7, 6, 0, 0, 502, 503, 7, 1, 0, 0, 503, 504, 7, 4, 0, 0, 504, 505, 7, 2, 0, 0, 505, 506, 1, 0, 0, 0, 506, 507, 6, 12, 7, 0, 507, 41, 1, 0, 0, 0, 508, 509, 7, 16, 0, 0, 509, 510, 7, 11, 0, 0, 510, 511, 5, 95, 0, 0, 511, 512, 7, 3, 0, 0, 512, 513, 7, 14, 0, 0, 513, 514, 7, 8, 0, 0, 514, 515, 7, 12, 0, 0, 515, 516, 7, 9, 0, 0, 516, 517, 7, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 6, 13, 8, 0, 519, 43, 1, 0, 0, 0, 520, 521, 7, 6, 0, 0, 521, 522, 7, 3, 0, 0, 522, 523, 7, 9, 0, 0, 523, 524, 7, 12, 0, 0, 524, 525, 7, 16, 0, 0, 525, 526, 7, 3, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 6, 14, 9, 0, 528, 45, 1, 0, 0, 0, 529, 530, 7, 6, 0, 0, 530, 531, 7, 7, 0, 0, 531, 532, 7, 20, 0, 0, 532, 533, 1, 0, 0, 0, 533, 534, 6, 15, 0, 0, 534, 47, 1, 0, 0, 0, 535, 536, 7, 2, 0, 0, 536, 537, 7, 10, 0, 0, 537, 538, 7, 7, 0, 0, 538, 539, 7, 20, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 6, 16, 10, 0, 541, 49, 1, 0, 0, 0, 542, 543, 7, 2, 0, 0, 543, 544, 7, 7, 0, 0, 544, 545, 7, 6, 0, 0, 545, 546, 7, 5, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 6, 17, 0, 0, 548, 51, 1, 0, 0, 0, 549, 550, 7, 2, 0, 0, 550, 551, 7, 5, 0, 0, 551, 552, 7, 12, 0, 0, 552, 553, 7, 5, 0, 0, 553, 554, 7, 2, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 6, 18, 0, 0, 556, 53, 1, 0, 0, 0, 557, 558, 7, 20, 0, 0, 558, 559, 7, 10, 0, 0, 559, 560, 7, 3, 0, 0, 560, 561, 7, 6, 0, 0, 561, 562, 7, 3, 0, 0, 562, 563, 1, 0, 0, 0, 563, 564, 6, 19, 0, 0, 564, 55, 1, 0, 0, 0, 565, 567, 8, 21, 0, 0, 566, 565, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 568, 569, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 6, 20, 0, 0, 571, 57, 1, 0, 0, 0, 572, 573, 5, 47, 0, 0, 573, 574, 5, 47, 0, 0, 574, 578, 1, 0, 0, 0, 575, 577, 8, 22, 0, 0, 576, 575, 1, 0, 0, 0, 577, 580, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 582, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 581, 583, 5, 13, 0, 0, 582, 581, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 585, 1, 0, 0, 0, 584, 586, 5, 10, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 6, 21, 11, 0, 588, 59, 1, 0, 0, 0, 589, 590, 5, 47, 0, 0, 590, 591, 5, 42, 0, 0, 591, 596, 1, 0, 0, 0, 592, 595, 3, 60, 22, 0, 593, 595, 9, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 593, 1, 0, 0, 0, 595, 598, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 599, 600, 5, 42, 0, 0, 600, 601, 5, 47, 0, 0, 601, 602, 1, 0, 0, 0, 602, 603, 6, 22, 11, 0, 603, 61, 1, 0, 0, 0, 604, 606, 7, 23, 0, 0, 605, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 6, 23, 11, 0, 610, 63, 1, 0, 0, 0, 611, 615, 8, 24, 0, 0, 612, 613, 5, 47, 0, 0, 613, 615, 8, 25, 0, 0, 614, 611, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 615, 65, 1, 0, 0, 0, 616, 618, 3, 64, 24, 0, 617, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 67, 1, 0, 0, 0, 621, 622, 3, 178, 81, 0, 622, 623, 1, 0, 0, 0, 623, 624, 6, 26, 12, 0, 624, 625, 6, 26, 13, 0, 625, 69, 1, 0, 0, 0, 626, 627, 3, 78, 31, 0, 627, 628, 1, 0, 0, 0, 628, 629, 6, 27, 14, 0, 629, 630, 6, 27, 15, 0, 630, 71, 1, 0, 0, 0, 631, 632, 3, 62, 23, 0, 632, 633, 1, 0, 0, 0, 633, 634, 6, 28, 11, 0, 634, 73, 1, 0, 0, 0, 635, 636, 3, 58, 21, 0, 636, 637, 1, 0, 0, 0, 637, 638, 6, 29, 11, 0, 638, 75, 1, 0, 0, 0, 639, 640, 3, 60, 22, 0, 640, 641, 1, 0, 0, 0, 641, 642, 6, 30, 11, 0, 642, 77, 1, 0, 0, 0, 643, 644, 5, 124, 0, 0, 644, 645, 1, 0, 0, 0, 645, 646, 6, 31, 15, 0, 646, 79, 1, 0, 0, 0, 647, 648, 7, 26, 0, 0, 648, 81, 1, 0, 0, 0, 649, 650, 7, 27, 0, 0, 650, 83, 1, 0, 0, 0, 651, 652, 5, 92, 0, 0, 652, 653, 7, 28, 0, 0, 653, 85, 1, 0, 0, 0, 654, 655, 8, 29, 0, 0, 655, 87, 1, 0, 0, 0, 656, 658, 7, 3, 0, 0, 657, 659, 7, 30, 0, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 661, 1, 0, 0, 0, 660, 662, 3, 80, 32, 0, 661, 660, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 661, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 89, 1, 0, 0, 0, 665, 666, 5, 64, 0, 0, 666, 91, 1, 0, 0, 0, 667, 668, 5, 96, 0, 0, 668, 93, 1, 0, 0, 0, 669, 673, 8, 31, 0, 0, 670, 671, 5, 96, 0, 0, 671, 673, 5, 96, 0, 0, 672, 669, 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 673, 95, 1, 0, 0, 0, 674, 675, 5, 95, 0, 0, 675, 97, 1, 0, 0, 0, 676, 680, 3, 82, 33, 0, 677, 680, 3, 80, 32, 0, 678, 680, 3, 96, 40, 0, 679, 676, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 678, 1, 0, 0, 0, 680, 99, 1, 0, 0, 0, 681, 686, 5, 34, 0, 0, 682, 685, 3, 84, 34, 0, 683, 685, 3, 86, 35, 0, 684, 682, 1, 0, 0, 0, 684, 683, 1, 0, 0, 0, 685, 688, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 689, 1, 0, 0, 0, 688, 686, 1, 0, 0, 0, 689, 711, 5, 34, 0, 0, 690, 691, 5, 34, 0, 0, 691, 692, 5, 34, 0, 0, 692, 693, 5, 34, 0, 0, 693, 697, 1, 0, 0, 0, 694, 696, 8, 22, 0, 0, 695, 694, 1, 0, 0, 0, 696, 699, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 697, 695, 1, 0, 0, 0, 698, 700, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 700, 701, 5, 34, 0, 0, 701, 702, 5, 34, 0, 0, 702, 703, 5, 34, 0, 0, 703, 705, 1, 0, 0, 0, 704, 706, 5, 34, 0, 0, 705, 704, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 708, 1, 0, 0, 0, 707, 709, 5, 34, 0, 0, 708, 707, 1, 0, 0, 0, 708, 709, 1, 0, 0, 0, 709, 711, 1, 0, 0, 0, 710, 681, 1, 0, 0, 0, 710, 690, 1, 0, 0, 0, 711, 101, 1, 0, 0, 0, 712, 714, 3, 80, 32, 0, 713, 712, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 713, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 103, 1, 0, 0, 0, 717, 719, 3, 80, 32, 0, 718, 717, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 718, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 726, 3, 120, 52, 0, 723, 725, 3, 80, 32, 0, 724, 723, 1, 0, 0, 0, 725, 728, 1, 0, 0, 0, 726, 724, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 760, 1, 0, 0, 0, 728, 726, 1, 0, 0, 0, 729, 731, 3, 120, 52, 0, 730, 732, 3, 80, 32, 0, 731, 730, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 760, 1, 0, 0, 0, 735, 737, 3, 80, 32, 0, 736, 735, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 736, 1, 0, 0, 0, 738, 739, 1, 0, 0, 0, 739, 747, 1, 0, 0, 0, 740, 744, 3, 120, 52, 0, 741, 743, 3, 80, 32, 0, 742, 741, 1, 0, 0, 0, 743, 746, 1, 0, 0, 0, 744, 742, 1, 0, 0, 0, 744, 745, 1, 0, 0, 0, 745, 748, 1, 0, 0, 0, 746, 744, 1, 0, 0, 0, 747, 740, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 750, 3, 88, 36, 0, 750, 760, 1, 0, 0, 0, 751, 753, 3, 120, 52, 0, 752, 754, 3, 80, 32, 0, 753, 752, 1, 0, 0, 0, 754, 755, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 758, 3, 88, 36, 0, 758, 760, 1, 0, 0, 0, 759, 718, 1, 0, 0, 0, 759, 729, 1, 0, 0, 0, 759, 736, 1, 0, 0, 0, 759, 751, 1, 0, 0, 0, 760, 105, 1, 0, 0, 0, 761, 762, 7, 32, 0, 0, 762, 763, 7, 33, 0, 0, 763, 107, 1, 0, 0, 0, 764, 765, 7, 12, 0, 0, 765, 766, 7, 9, 0, 0, 766, 767, 7, 0, 0, 0, 767, 109, 1, 0, 0, 0, 768, 769, 7, 12, 0, 0, 769, 770, 7, 2, 0, 0, 770, 771, 7, 4, 0, 0, 771, 111, 1, 0, 0, 0, 772, 773, 5, 61, 0, 0, 773, 113, 1, 0, 0, 0, 774, 775, 5, 58, 0, 0, 775, 776, 5, 58, 0, 0, 776, 115, 1, 0, 0, 0, 777, 778, 5, 44, 0, 0, 778, 117, 1, 0, 0, 0, 779, 780, 7, 0, 0, 0, 780, 781, 7, 3, 0, 0, 781, 782, 7, 2, 0, 0, 782, 783, 7, 4, 0, 0, 783, 119, 1, 0, 0, 0, 784, 785, 5, 46, 0, 0, 785, 121, 1, 0, 0, 0, 786, 787, 7, 15, 0, 0, 787, 788, 7, 12, 0, 0, 788, 789, 7, 13, 0, 0, 789, 790, 7, 2, 0, 0, 790, 791, 7, 3, 0, 0, 791, 123, 1, 0, 0, 0, 792, 793, 7, 15, 0, 0, 793, 794, 7, 1, 0, 0, 794, 795, 7, 6, 0, 0, 795, 796, 7, 2, 0, 0, 796, 797, 7, 5, 0, 0, 797, 125, 1, 0, 0, 0, 798, 799, 7, 13, 0, 0, 799, 800, 7, 12, 0, 0, 800, 801, 7, 2, 0, 0, 801, 802, 7, 5, 0, 0, 802, 127, 1, 0, 0, 0, 803, 804, 5, 40, 0, 0, 804, 129, 1, 0, 0, 0, 805, 806, 7, 1, 0, 0, 806, 807, 7, 9, 0, 0, 807, 131, 1, 0, 0, 0, 808, 809, 7, 1, 0, 0, 809, 810, 7, 2, 0, 0, 810, 133, 1, 0, 0, 0, 811, 812, 7, 13, 0, 0, 812, 813, 7, 1, 0, 0, 813, 814, 7, 18, 0, 0, 814, 815, 7, 3, 0, 0, 815, 135, 1, 0, 0, 0, 816, 817, 7, 9, 0, 0, 817, 818, 7, 7, 0, 0, 818, 819, 7, 5, 0, 0, 819, 137, 1, 0, 0, 0, 820, 821, 7, 9, 0, 0, 821, 822, 7, 19, 0, 0, 822, 823, 7, 13, 0, 0, 823, 824, 7, 13, 0, 0, 824, 139, 1, 0, 0, 0, 825, 826, 7, 9, 0, 0, 826, 827, 7, 19, 0, 0, 827, 828, 7, 13, 0, 0, 828, 829, 7, 13, 0, 0, 829, 830, 7, 2, 0, 0, 830, 141, 1, 0, 0, 0, 831, 832, 7, 7, 0, 0, 832, 833, 7, 6, 0, 0, 833, 143, 1, 0, 0, 0, 834, 835, 5, 63, 0, 0, 835, 145, 1, 0, 0, 0, 836, 837, 7, 6, 0, 0, 837, 838, 7, 13, 0, 0, 838, 839, 7, 1, 0, 0, 839, 840, 7, 18, 0, 0, 840, 841, 7, 3, 0, 0, 841, 147, 1, 0, 0, 0, 842, 843, 5, 41, 0, 0, 843, 149, 1, 0, 0, 0, 844, 845, 7, 5, 0, 0, 845, 846, 7, 6, 0, 0, 846, 847, 7, 19, 0, 0, 847, 848, 7, 3, 0, 0, 848, 151, 1, 0, 0, 0, 849, 850, 5, 61, 0, 0, 850, 851, 5, 61, 0, 0, 851, 153, 1, 0, 0, 0, 852, 853, 5, 61, 0, 0, 853, 854, 5, 126, 0, 0, 854, 155, 1, 0, 0, 0, 855, 856, 5, 33, 0, 0, 856, 857, 5, 61, 0, 0, 857, 157, 1, 0, 0, 0, 858, 859, 5, 60, 0, 0, 859, 159, 1, 0, 0, 0, 860, 861, 5, 60, 0, 0, 861, 862, 5, 61, 0, 0, 862, 161, 1, 0, 0, 0, 863, 864, 5, 62, 0, 0, 864, 163, 1, 0, 0, 0, 865, 866, 5, 62, 0, 0, 866, 867, 5, 61, 0, 0, 867, 165, 1, 0, 0, 0, 868, 869, 5, 43, 0, 0, 869, 167, 1, 0, 0, 0, 870, 871, 5, 45, 0, 0, 871, 169, 1, 0, 0, 0, 872, 873, 5, 42, 0, 0, 873, 171, 1, 0, 0, 0, 874, 875, 5, 47, 0, 0, 875, 173, 1, 0, 0, 0, 876, 877, 5, 37, 0, 0, 877, 175, 1, 0, 0, 0, 878, 879, 3, 144, 64, 0, 879, 883, 3, 82, 33, 0, 880, 882, 3, 98, 41, 0, 881, 880, 1, 0, 0, 0, 882, 885, 1, 0, 0, 0, 883, 881, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 893, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 886, 888, 3, 144, 64, 0, 887, 889, 3, 80, 32, 0, 888, 887, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 888, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 893, 1, 0, 0, 0, 892, 878, 1, 0, 0, 0, 892, 886, 1, 0, 0, 0, 893, 177, 1, 0, 0, 0, 894, 895, 5, 91, 0, 0, 895, 896, 1, 0, 0, 0, 896, 897, 6, 81, 0, 0, 897, 898, 6, 81, 0, 0, 898, 179, 1, 0, 0, 0, 899, 900, 5, 93, 0, 0, 900, 901, 1, 0, 0, 0, 901, 902, 6, 82, 15, 0, 902, 903, 6, 82, 15, 0, 903, 181, 1, 0, 0, 0, 904, 908, 3, 82, 33, 0, 905, 907, 3, 98, 41, 0, 906, 905, 1, 0, 0, 0, 907, 910, 1, 0, 0, 0, 908, 906, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 921, 1, 0, 0, 0, 910, 908, 1, 0, 0, 0, 911, 914, 3, 96, 40, 0, 912, 914, 3, 90, 37, 0, 913, 911, 1, 0, 0, 0, 913, 912, 1, 0, 0, 0, 914, 916, 1, 0, 0, 0, 915, 917, 3, 98, 41, 0, 916, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 916, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 921, 1, 0, 0, 0, 920, 904, 1, 0, 0, 0, 920, 913, 1, 0, 0, 0, 921, 183, 1, 0, 0, 0, 922, 924, 3, 92, 38, 0, 923, 925, 3, 94, 39, 0, 924, 923, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 924, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 929, 3, 92, 38, 0, 929, 185, 1, 0, 0, 0, 930, 931, 3, 184, 84, 0, 931, 187, 1, 0, 0, 0, 932, 933, 3, 58, 21, 0, 933, 934, 1, 0, 0, 0, 934, 935, 6, 86, 11, 0, 935, 189, 1, 0, 0, 0, 936, 937, 3, 60, 22, 0, 937, 938, 1, 0, 0, 0, 938, 939, 6, 87, 11, 0, 939, 191, 1, 0, 0, 0, 940, 941, 3, 62, 23, 0, 941, 942, 1, 0, 0, 0, 942, 943, 6, 88, 11, 0, 943, 193, 1, 0, 0, 0, 944, 945, 3, 78, 31, 0, 945, 946, 1, 0, 0, 0, 946, 947, 6, 89, 14, 0, 947, 948, 6, 89, 15, 0, 948, 195, 1, 0, 0, 0, 949, 950, 3, 178, 81, 0, 950, 951, 1, 0, 0, 0, 951, 952, 6, 90, 12, 0, 952, 197, 1, 0, 0, 0, 953, 954, 3, 180, 82, 0, 954, 955, 1, 0, 0, 0, 955, 956, 6, 91, 16, 0, 956, 199, 1, 0, 0, 0, 957, 958, 3, 116, 50, 0, 958, 959, 1, 0, 0, 0, 959, 960, 6, 92, 17, 0, 960, 201, 1, 0, 0, 0, 961, 962, 3, 112, 48, 0, 962, 963, 1, 0, 0, 0, 963, 964, 6, 93, 18, 0, 964, 203, 1, 0, 0, 0, 965, 966, 3, 100, 42, 0, 966, 967, 1, 0, 0, 0, 967, 968, 6, 94, 19, 0, 968, 205, 1, 0, 0, 0, 969, 970, 7, 16, 0, 0, 970, 971, 7, 3, 0, 0, 971, 972, 7, 5, 0, 0, 972, 973, 7, 12, 0, 0, 973, 974, 7, 0, 0, 0, 974, 975, 7, 12, 0, 0, 975, 976, 7, 5, 0, 0, 976, 977, 7, 12, 0, 0, 977, 207, 1, 0, 0, 0, 978, 979, 3, 66, 25, 0, 979, 980, 1, 0, 0, 0, 980, 981, 6, 96, 20, 0, 981, 209, 1, 0, 0, 0, 982, 983, 3, 58, 21, 0, 983, 984, 1, 0, 0, 0, 984, 985, 6, 97, 11, 0, 985, 211, 1, 0, 0, 0, 986, 987, 3, 60, 22, 0, 987, 988, 1, 0, 0, 0, 988, 989, 6, 98, 11, 0, 989, 213, 1, 0, 0, 0, 990, 991, 3, 62, 23, 0, 991, 992, 1, 0, 0, 0, 992, 993, 6, 99, 11, 0, 993, 215, 1, 0, 0, 0, 994, 995, 3, 78, 31, 0, 995, 996, 1, 0, 0, 0, 996, 997, 6, 100, 14, 0, 997, 998, 6, 100, 15, 0, 998, 217, 1, 0, 0, 0, 999, 1000, 3, 120, 52, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1002, 6, 101, 21, 0, 1002, 219, 1, 0, 0, 0, 1003, 1004, 3, 116, 50, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1006, 6, 102, 17, 0, 1006, 221, 1, 0, 0, 0, 1007, 1012, 3, 82, 33, 0, 1008, 1012, 3, 80, 32, 0, 1009, 1012, 3, 96, 40, 0, 1010, 1012, 3, 170, 77, 0, 1011, 1007, 1, 0, 0, 0, 1011, 1008, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1010, 1, 0, 0, 0, 1012, 223, 1, 0, 0, 0, 1013, 1016, 3, 82, 33, 0, 1014, 1016, 3, 170, 77, 0, 1015, 1013, 1, 0, 0, 0, 1015, 1014, 1, 0, 0, 0, 1016, 1020, 1, 0, 0, 0, 1017, 1019, 3, 222, 103, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1022, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1033, 1, 0, 0, 0, 1022, 1020, 1, 0, 0, 0, 1023, 1026, 3, 96, 40, 0, 1024, 1026, 3, 90, 37, 0, 1025, 1023, 1, 0, 0, 0, 1025, 1024, 1, 0, 0, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1029, 3, 222, 103, 0, 1028, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1033, 1, 0, 0, 0, 1032, 1015, 1, 0, 0, 0, 1032, 1025, 1, 0, 0, 0, 1033, 225, 1, 0, 0, 0, 1034, 1037, 3, 224, 104, 0, 1035, 1037, 3, 184, 84, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1035, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 1036, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 227, 1, 0, 0, 0, 1040, 1041, 3, 58, 21, 0, 1041, 1042, 1, 0, 0, 0, 1042, 1043, 6, 106, 11, 0, 1043, 229, 1, 0, 0, 0, 1044, 1045, 3, 60, 22, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1047, 6, 107, 11, 0, 1047, 231, 1, 0, 0, 0, 1048, 1049, 3, 62, 23, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1051, 6, 108, 11, 0, 1051, 233, 1, 0, 0, 0, 1052, 1053, 3, 78, 31, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1055, 6, 109, 14, 0, 1055, 1056, 6, 109, 15, 0, 1056, 235, 1, 0, 0, 0, 1057, 1058, 3, 112, 48, 0, 1058, 1059, 1, 0, 0, 0, 1059, 1060, 6, 110, 18, 0, 1060, 237, 1, 0, 0, 0, 1061, 1062, 3, 116, 50, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1064, 6, 111, 17, 0, 1064, 239, 1, 0, 0, 0, 1065, 1066, 3, 120, 52, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1068, 6, 112, 21, 0, 1068, 241, 1, 0, 0, 0, 1069, 1070, 7, 12, 0, 0, 1070, 1071, 7, 2, 0, 0, 1071, 243, 1, 0, 0, 0, 1072, 1073, 3, 226, 105, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1075, 6, 114, 22, 0, 1075, 245, 1, 0, 0, 0, 1076, 1077, 3, 58, 21, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1079, 6, 115, 11, 0, 1079, 247, 1, 0, 0, 0, 1080, 1081, 3, 60, 22, 0, 1081, 1082, 1, 0, 0, 0, 1082, 1083, 6, 116, 11, 0, 1083, 249, 1, 0, 0, 0, 1084, 1085, 3, 62, 23, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 6, 117, 11, 0, 1087, 251, 1, 0, 0, 0, 1088, 1089, 3, 78, 31, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1091, 6, 118, 14, 0, 1091, 1092, 6, 118, 15, 0, 1092, 253, 1, 0, 0, 0, 1093, 1094, 3, 178, 81, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1096, 6, 119, 12, 0, 1096, 1097, 6, 119, 23, 0, 1097, 255, 1, 0, 0, 0, 1098, 1099, 7, 7, 0, 0, 1099, 1100, 7, 9, 0, 0, 1100, 1101, 1, 0, 0, 0, 1101, 1102, 6, 120, 24, 0, 1102, 257, 1, 0, 0, 0, 1103, 1104, 7, 20, 0, 0, 1104, 1105, 7, 1, 0, 0, 1105, 1106, 7, 5, 0, 0, 1106, 1107, 7, 10, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 6, 121, 24, 0, 1109, 259, 1, 0, 0, 0, 1110, 1111, 8, 34, 0, 0, 1111, 261, 1, 0, 0, 0, 1112, 1114, 3, 260, 122, 0, 1113, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1117, 1118, 3, 360, 172, 0, 1118, 1120, 1, 0, 0, 0, 1119, 1113, 1, 0, 0, 0, 1119, 1120, 1, 0, 0, 0, 1120, 1122, 1, 0, 0, 0, 1121, 1123, 3, 260, 122, 0, 1122, 1121, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1124, 1125, 1, 0, 0, 0, 1125, 263, 1, 0, 0, 0, 1126, 1127, 3, 186, 85, 0, 1127, 1128, 1, 0, 0, 0, 1128, 1129, 6, 124, 25, 0, 1129, 265, 1, 0, 0, 0, 1130, 1131, 3, 262, 123, 0, 1131, 1132, 1, 0, 0, 0, 1132, 1133, 6, 125, 26, 0, 1133, 267, 1, 0, 0, 0, 1134, 1135, 3, 58, 21, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1137, 6, 126, 11, 0, 1137, 269, 1, 0, 0, 0, 1138, 1139, 3, 60, 22, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1141, 6, 127, 11, 0, 1141, 271, 1, 0, 0, 0, 1142, 1143, 3, 62, 23, 0, 1143, 1144, 1, 0, 0, 0, 1144, 1145, 6, 128, 11, 0, 1145, 273, 1, 0, 0, 0, 1146, 1147, 3, 78, 31, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1149, 6, 129, 14, 0, 1149, 1150, 6, 129, 15, 0, 1150, 1151, 6, 129, 15, 0, 1151, 275, 1, 0, 0, 0, 1152, 1153, 3, 112, 48, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1155, 6, 130, 18, 0, 1155, 277, 1, 0, 0, 0, 1156, 1157, 3, 116, 50, 0, 1157, 1158, 1, 0, 0, 0, 1158, 1159, 6, 131, 17, 0, 1159, 279, 1, 0, 0, 0, 1160, 1161, 3, 120, 52, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1163, 6, 132, 21, 0, 1163, 281, 1, 0, 0, 0, 1164, 1165, 3, 258, 121, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1167, 6, 133, 27, 0, 1167, 283, 1, 0, 0, 0, 1168, 1169, 3, 226, 105, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1171, 6, 134, 22, 0, 1171, 285, 1, 0, 0, 0, 1172, 1173, 3, 186, 85, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1175, 6, 135, 25, 0, 1175, 287, 1, 0, 0, 0, 1176, 1177, 3, 58, 21, 0, 1177, 1178, 1, 0, 0, 0, 1178, 1179, 6, 136, 11, 0, 1179, 289, 1, 0, 0, 0, 1180, 1181, 3, 60, 22, 0, 1181, 1182, 1, 0, 0, 0, 1182, 1183, 6, 137, 11, 0, 1183, 291, 1, 0, 0, 0, 1184, 1185, 3, 62, 23, 0, 1185, 1186, 1, 0, 0, 0, 1186, 1187, 6, 138, 11, 0, 1187, 293, 1, 0, 0, 0, 1188, 1189, 3, 78, 31, 0, 1189, 1190, 1, 0, 0, 0, 1190, 1191, 6, 139, 14, 0, 1191, 1192, 6, 139, 15, 0, 1192, 295, 1, 0, 0, 0, 1193, 1194, 3, 116, 50, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1196, 6, 140, 17, 0, 1196, 297, 1, 0, 0, 0, 1197, 1198, 3, 120, 52, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1200, 6, 141, 21, 0, 1200, 299, 1, 0, 0, 0, 1201, 1202, 3, 256, 120, 0, 1202, 1203, 1, 0, 0, 0, 1203, 1204, 6, 142, 28, 0, 1204, 1205, 6, 142, 29, 0, 1205, 301, 1, 0, 0, 0, 1206, 1207, 3, 66, 25, 0, 1207, 1208, 1, 0, 0, 0, 1208, 1209, 6, 143, 20, 0, 1209, 303, 1, 0, 0, 0, 1210, 1211, 3, 58, 21, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 6, 144, 11, 0, 1213, 305, 1, 0, 0, 0, 1214, 1215, 3, 60, 22, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1217, 6, 145, 11, 0, 1217, 307, 1, 0, 0, 0, 1218, 1219, 3, 62, 23, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1221, 6, 146, 11, 0, 1221, 309, 1, 0, 0, 0, 1222, 1223, 3, 78, 31, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1225, 6, 147, 14, 0, 1225, 1226, 6, 147, 15, 0, 1226, 1227, 6, 147, 15, 0, 1227, 311, 1, 0, 0, 0, 1228, 1229, 3, 116, 50, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1231, 6, 148, 17, 0, 1231, 313, 1, 0, 0, 0, 1232, 1233, 3, 120, 52, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1235, 6, 149, 21, 0, 1235, 315, 1, 0, 0, 0, 1236, 1237, 3, 226, 105, 0, 1237, 1238, 1, 0, 0, 0, 1238, 1239, 6, 150, 22, 0, 1239, 317, 1, 0, 0, 0, 1240, 1241, 3, 58, 21, 0, 1241, 1242, 1, 0, 0, 0, 1242, 1243, 6, 151, 11, 0, 1243, 319, 1, 0, 0, 0, 1244, 1245, 3, 60, 22, 0, 1245, 1246, 1, 0, 0, 0, 1246, 1247, 6, 152, 11, 0, 1247, 321, 1, 0, 0, 0, 1248, 1249, 3, 62, 23, 0, 1249, 1250, 1, 0, 0, 0, 1250, 1251, 6, 153, 11, 0, 1251, 323, 1, 0, 0, 0, 1252, 1253, 3, 78, 31, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1255, 6, 154, 14, 0, 1255, 1256, 6, 154, 15, 0, 1256, 325, 1, 0, 0, 0, 1257, 1258, 3, 120, 52, 0, 1258, 1259, 1, 0, 0, 0, 1259, 1260, 6, 155, 21, 0, 1260, 327, 1, 0, 0, 0, 1261, 1262, 3, 186, 85, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1264, 6, 156, 25, 0, 1264, 329, 1, 0, 0, 0, 1265, 1266, 3, 182, 83, 0, 1266, 1267, 1, 0, 0, 0, 1267, 1268, 6, 157, 30, 0, 1268, 331, 1, 0, 0, 0, 1269, 1270, 3, 58, 21, 0, 1270, 1271, 1, 0, 0, 0, 1271, 1272, 6, 158, 11, 0, 1272, 333, 1, 0, 0, 0, 1273, 1274, 3, 60, 22, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1276, 6, 159, 11, 0, 1276, 335, 1, 0, 0, 0, 1277, 1278, 3, 62, 23, 0, 1278, 1279, 1, 0, 0, 0, 1279, 1280, 6, 160, 11, 0, 1280, 337, 1, 0, 0, 0, 1281, 1282, 3, 78, 31, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 6, 161, 14, 0, 1284, 1285, 6, 161, 15, 0, 1285, 339, 1, 0, 0, 0, 1286, 1287, 7, 1, 0, 0, 1287, 1288, 7, 9, 0, 0, 1288, 1289, 7, 15, 0, 0, 1289, 1290, 7, 7, 0, 0, 1290, 341, 1, 0, 0, 0, 1291, 1292, 3, 58, 21, 0, 1292, 1293, 1, 0, 0, 0, 1293, 1294, 6, 163, 11, 0, 1294, 343, 1, 0, 0, 0, 1295, 1296, 3, 60, 22, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1298, 6, 164, 11, 0, 1298, 345, 1, 0, 0, 0, 1299, 1300, 3, 62, 23, 0, 1300, 1301, 1, 0, 0, 0, 1301, 1302, 6, 165, 11, 0, 1302, 347, 1, 0, 0, 0, 1303, 1304, 3, 78, 31, 0, 1304, 1305, 1, 0, 0, 0, 1305, 1306, 6, 166, 14, 0, 1306, 1307, 6, 166, 15, 0, 1307, 349, 1, 0, 0, 0, 1308, 1309, 7, 15, 0, 0, 1309, 1310, 7, 19, 0, 0, 1310, 1311, 7, 9, 0, 0, 1311, 1312, 7, 4, 0, 0, 1312, 1313, 7, 5, 0, 0, 1313, 1314, 7, 1, 0, 0, 1314, 1315, 7, 7, 0, 0, 1315, 1316, 7, 9, 0, 0, 1316, 1317, 7, 2, 0, 0, 1317, 351, 1, 0, 0, 0, 1318, 1319, 3, 58, 21, 0, 1319, 1320, 1, 0, 0, 0, 1320, 1321, 6, 168, 11, 0, 1321, 353, 1, 0, 0, 0, 1322, 1323, 3, 60, 22, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1325, 6, 169, 11, 0, 1325, 355, 1, 0, 0, 0, 1326, 1327, 3, 62, 23, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1329, 6, 170, 11, 0, 1329, 357, 1, 0, 0, 0, 1330, 1331, 3, 180, 82, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1333, 6, 171, 16, 0, 1333, 1334, 6, 171, 15, 0, 1334, 359, 1, 0, 0, 0, 1335, 1336, 5, 58, 0, 0, 1336, 361, 1, 0, 0, 0, 1337, 1343, 3, 90, 37, 0, 1338, 1343, 3, 80, 32, 0, 1339, 1343, 3, 120, 52, 0, 1340, 1343, 3, 82, 33, 0, 1341, 1343, 3, 96, 40, 0, 1342, 1337, 1, 0, 0, 0, 1342, 1338, 1, 0, 0, 0, 1342, 1339, 1, 0, 0, 0, 1342, 1340, 1, 0, 0, 0, 1342, 1341, 1, 0, 0, 0, 1343, 1344, 1, 0, 0, 0, 1344, 1342, 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 363, 1, 0, 0, 0, 1346, 1347, 3, 58, 21, 0, 1347, 1348, 1, 0, 0, 0, 1348, 1349, 6, 174, 11, 0, 1349, 365, 1, 0, 0, 0, 1350, 1351, 3, 60, 22, 0, 1351, 1352, 1, 0, 0, 0, 1352, 1353, 6, 175, 11, 0, 1353, 367, 1, 0, 0, 0, 1354, 1355, 3, 62, 23, 0, 1355, 1356, 1, 0, 0, 0, 1356, 1357, 6, 176, 11, 0, 1357, 369, 1, 0, 0, 0, 1358, 1359, 3, 78, 31, 0, 1359, 1360, 1, 0, 0, 0, 1360, 1361, 6, 177, 14, 0, 1361, 1362, 6, 177, 15, 0, 1362, 371, 1, 0, 0, 0, 1363, 1364, 3, 66, 25, 0, 1364, 1365, 1, 0, 0, 0, 1365, 1366, 6, 178, 20, 0, 1366, 1367, 6, 178, 15, 0, 1367, 1368, 6, 178, 31, 0, 1368, 373, 1, 0, 0, 0, 1369, 1370, 3, 58, 21, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1372, 6, 179, 11, 0, 1372, 375, 1, 0, 0, 0, 1373, 1374, 3, 60, 22, 0, 1374, 1375, 1, 0, 0, 0, 1375, 1376, 6, 180, 11, 0, 1376, 377, 1, 0, 0, 0, 1377, 1378, 3, 62, 23, 0, 1378, 1379, 1, 0, 0, 0, 1379, 1380, 6, 181, 11, 0, 1380, 379, 1, 0, 0, 0, 1381, 1382, 3, 116, 50, 0, 1382, 1383, 1, 0, 0, 0, 1383, 1384, 6, 182, 17, 0, 1384, 1385, 6, 182, 15, 0, 1385, 1386, 6, 182, 7, 0, 1386, 381, 1, 0, 0, 0, 1387, 1388, 3, 58, 21, 0, 1388, 1389, 1, 0, 0, 0, 1389, 1390, 6, 183, 11, 0, 1390, 383, 1, 0, 0, 0, 1391, 1392, 3, 60, 22, 0, 1392, 1393, 1, 0, 0, 0, 1393, 1394, 6, 184, 11, 0, 1394, 385, 1, 0, 0, 0, 1395, 1396, 3, 62, 23, 0, 1396, 1397, 1, 0, 0, 0, 1397, 1398, 6, 185, 11, 0, 1398, 387, 1, 0, 0, 0, 1399, 1400, 3, 186, 85, 0, 1400, 1401, 1, 0, 0, 0, 1401, 1402, 6, 186, 15, 0, 1402, 1403, 6, 186, 0, 0, 1403, 1404, 6, 186, 25, 0, 1404, 389, 1, 0, 0, 0, 1405, 1406, 3, 182, 83, 0, 1406, 1407, 1, 0, 0, 0, 1407, 1408, 6, 187, 15, 0, 1408, 1409, 6, 187, 0, 0, 1409, 1410, 6, 187, 30, 0, 1410, 391, 1, 0, 0, 0, 1411, 1412, 3, 106, 45, 0, 1412, 1413, 1, 0, 0, 0, 1413, 1414, 6, 188, 15, 0, 1414, 1415, 6, 188, 0, 0, 1415, 1416, 6, 188, 32, 0, 1416, 393, 1, 0, 0, 0, 1417, 1418, 3, 78, 31, 0, 1418, 1419, 1, 0, 0, 0, 1419, 1420, 6, 189, 14, 0, 1420, 1421, 6, 189, 15, 0, 1421, 395, 1, 0, 0, 0, 65, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 568, 578, 582, 585, 594, 596, 607, 614, 619, 658, 663, 672, 679, 684, 686, 697, 705, 708, 710, 715, 720, 726, 733, 738, 744, 747, 755, 759, 883, 890, 892, 908, 913, 918, 920, 926, 1011, 1015, 1020, 1025, 1030, 1032, 1036, 1038, 1115, 1119, 1124, 1342, 1344, 33, 5, 2, 0, 5, 4, 0, 5, 6, 0, 5, 1, 0, 5, 3, 0, 5, 8, 0, 5, 12, 0, 5, 14, 0, 5, 10, 0, 5, 5, 0, 5, 11, 0, 0, 1, 0, 7, 69, 0, 5, 0, 0, 7, 29, 0, 4, 0, 0, 7, 70, 0, 7, 38, 0, 7, 36, 0, 7, 30, 0, 7, 25, 0, 7, 40, 0, 7, 80, 0, 5, 13, 0, 5, 7, 0, 7, 72, 0, 7, 90, 0, 7, 89, 0, 7, 88, 0, 5, 9, 0, 7, 71, 0, 5, 15, 0, 7, 33, 0] \ No newline at end of file diff --git a/packages/kbn-esql-ast/src/antlr/esql_lexer.tokens b/packages/kbn-esql-ast/src/antlr/esql_lexer.tokens index 30ce0d5eea55b..04798fc3dca8a 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_lexer.tokens +++ b/packages/kbn-esql-ast/src/antlr/esql_lexer.tokens @@ -65,62 +65,63 @@ MINUS=64 ASTERISK=65 SLASH=66 PERCENT=67 -OPENING_BRACKET=68 -CLOSING_BRACKET=69 -UNQUOTED_IDENTIFIER=70 -QUOTED_IDENTIFIER=71 -EXPR_LINE_COMMENT=72 -EXPR_MULTILINE_COMMENT=73 -EXPR_WS=74 -METADATA=75 -FROM_LINE_COMMENT=76 -FROM_MULTILINE_COMMENT=77 -FROM_WS=78 -ID_PATTERN=79 -PROJECT_LINE_COMMENT=80 -PROJECT_MULTILINE_COMMENT=81 -PROJECT_WS=82 -AS=83 -RENAME_LINE_COMMENT=84 -RENAME_MULTILINE_COMMENT=85 -RENAME_WS=86 -ON=87 -WITH=88 -ENRICH_POLICY_NAME=89 -ENRICH_LINE_COMMENT=90 -ENRICH_MULTILINE_COMMENT=91 -ENRICH_WS=92 -ENRICH_FIELD_LINE_COMMENT=93 -ENRICH_FIELD_MULTILINE_COMMENT=94 -ENRICH_FIELD_WS=95 -LOOKUP_LINE_COMMENT=96 -LOOKUP_MULTILINE_COMMENT=97 -LOOKUP_WS=98 -LOOKUP_FIELD_LINE_COMMENT=99 -LOOKUP_FIELD_MULTILINE_COMMENT=100 -LOOKUP_FIELD_WS=101 -MVEXPAND_LINE_COMMENT=102 -MVEXPAND_MULTILINE_COMMENT=103 -MVEXPAND_WS=104 -INFO=105 -SHOW_LINE_COMMENT=106 -SHOW_MULTILINE_COMMENT=107 -SHOW_WS=108 -FUNCTIONS=109 -META_LINE_COMMENT=110 -META_MULTILINE_COMMENT=111 -META_WS=112 -COLON=113 -SETTING=114 -SETTING_LINE_COMMENT=115 -SETTTING_MULTILINE_COMMENT=116 -SETTING_WS=117 -METRICS_LINE_COMMENT=118 -METRICS_MULTILINE_COMMENT=119 -METRICS_WS=120 -CLOSING_METRICS_LINE_COMMENT=121 -CLOSING_METRICS_MULTILINE_COMMENT=122 -CLOSING_METRICS_WS=123 +NAMED_OR_POSITIONAL_PARAM=68 +OPENING_BRACKET=69 +CLOSING_BRACKET=70 +UNQUOTED_IDENTIFIER=71 +QUOTED_IDENTIFIER=72 +EXPR_LINE_COMMENT=73 +EXPR_MULTILINE_COMMENT=74 +EXPR_WS=75 +METADATA=76 +FROM_LINE_COMMENT=77 +FROM_MULTILINE_COMMENT=78 +FROM_WS=79 +ID_PATTERN=80 +PROJECT_LINE_COMMENT=81 +PROJECT_MULTILINE_COMMENT=82 +PROJECT_WS=83 +AS=84 +RENAME_LINE_COMMENT=85 +RENAME_MULTILINE_COMMENT=86 +RENAME_WS=87 +ON=88 +WITH=89 +ENRICH_POLICY_NAME=90 +ENRICH_LINE_COMMENT=91 +ENRICH_MULTILINE_COMMENT=92 +ENRICH_WS=93 +ENRICH_FIELD_LINE_COMMENT=94 +ENRICH_FIELD_MULTILINE_COMMENT=95 +ENRICH_FIELD_WS=96 +LOOKUP_LINE_COMMENT=97 +LOOKUP_MULTILINE_COMMENT=98 +LOOKUP_WS=99 +LOOKUP_FIELD_LINE_COMMENT=100 +LOOKUP_FIELD_MULTILINE_COMMENT=101 +LOOKUP_FIELD_WS=102 +MVEXPAND_LINE_COMMENT=103 +MVEXPAND_MULTILINE_COMMENT=104 +MVEXPAND_WS=105 +INFO=106 +SHOW_LINE_COMMENT=107 +SHOW_MULTILINE_COMMENT=108 +SHOW_WS=109 +FUNCTIONS=110 +META_LINE_COMMENT=111 +META_MULTILINE_COMMENT=112 +META_WS=113 +COLON=114 +SETTING=115 +SETTING_LINE_COMMENT=116 +SETTTING_MULTILINE_COMMENT=117 +SETTING_WS=118 +METRICS_LINE_COMMENT=119 +METRICS_MULTILINE_COMMENT=120 +METRICS_WS=121 +CLOSING_METRICS_LINE_COMMENT=122 +CLOSING_METRICS_MULTILINE_COMMENT=123 +CLOSING_METRICS_WS=124 'dissect'=1 'drop'=2 'enrich'=3 @@ -177,11 +178,11 @@ CLOSING_METRICS_WS=123 '*'=65 '/'=66 '%'=67 -']'=69 -'metadata'=75 -'as'=83 -'on'=87 -'with'=88 -'info'=105 -'functions'=109 -':'=113 +']'=70 +'metadata'=76 +'as'=84 +'on'=88 +'with'=89 +'info'=106 +'functions'=110 +':'=114 diff --git a/packages/kbn-esql-ast/src/antlr/esql_lexer.ts b/packages/kbn-esql-ast/src/antlr/esql_lexer.ts index 4dd20eceeb217..ff985e02ccf1d 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_lexer.ts +++ b/packages/kbn-esql-ast/src/antlr/esql_lexer.ts @@ -80,62 +80,63 @@ export default class esql_lexer extends Lexer { public static readonly ASTERISK = 65; public static readonly SLASH = 66; public static readonly PERCENT = 67; - public static readonly OPENING_BRACKET = 68; - public static readonly CLOSING_BRACKET = 69; - public static readonly UNQUOTED_IDENTIFIER = 70; - public static readonly QUOTED_IDENTIFIER = 71; - public static readonly EXPR_LINE_COMMENT = 72; - public static readonly EXPR_MULTILINE_COMMENT = 73; - public static readonly EXPR_WS = 74; - public static readonly METADATA = 75; - public static readonly FROM_LINE_COMMENT = 76; - public static readonly FROM_MULTILINE_COMMENT = 77; - public static readonly FROM_WS = 78; - public static readonly ID_PATTERN = 79; - public static readonly PROJECT_LINE_COMMENT = 80; - public static readonly PROJECT_MULTILINE_COMMENT = 81; - public static readonly PROJECT_WS = 82; - public static readonly AS = 83; - public static readonly RENAME_LINE_COMMENT = 84; - public static readonly RENAME_MULTILINE_COMMENT = 85; - public static readonly RENAME_WS = 86; - public static readonly ON = 87; - public static readonly WITH = 88; - public static readonly ENRICH_POLICY_NAME = 89; - public static readonly ENRICH_LINE_COMMENT = 90; - public static readonly ENRICH_MULTILINE_COMMENT = 91; - public static readonly ENRICH_WS = 92; - public static readonly ENRICH_FIELD_LINE_COMMENT = 93; - public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 94; - public static readonly ENRICH_FIELD_WS = 95; - public static readonly LOOKUP_LINE_COMMENT = 96; - public static readonly LOOKUP_MULTILINE_COMMENT = 97; - public static readonly LOOKUP_WS = 98; - public static readonly LOOKUP_FIELD_LINE_COMMENT = 99; - public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 100; - public static readonly LOOKUP_FIELD_WS = 101; - public static readonly MVEXPAND_LINE_COMMENT = 102; - public static readonly MVEXPAND_MULTILINE_COMMENT = 103; - public static readonly MVEXPAND_WS = 104; - public static readonly INFO = 105; - public static readonly SHOW_LINE_COMMENT = 106; - public static readonly SHOW_MULTILINE_COMMENT = 107; - public static readonly SHOW_WS = 108; - public static readonly FUNCTIONS = 109; - public static readonly META_LINE_COMMENT = 110; - public static readonly META_MULTILINE_COMMENT = 111; - public static readonly META_WS = 112; - public static readonly COLON = 113; - public static readonly SETTING = 114; - public static readonly SETTING_LINE_COMMENT = 115; - public static readonly SETTTING_MULTILINE_COMMENT = 116; - public static readonly SETTING_WS = 117; - public static readonly METRICS_LINE_COMMENT = 118; - public static readonly METRICS_MULTILINE_COMMENT = 119; - public static readonly METRICS_WS = 120; - public static readonly CLOSING_METRICS_LINE_COMMENT = 121; - public static readonly CLOSING_METRICS_MULTILINE_COMMENT = 122; - public static readonly CLOSING_METRICS_WS = 123; + public static readonly NAMED_OR_POSITIONAL_PARAM = 68; + public static readonly OPENING_BRACKET = 69; + public static readonly CLOSING_BRACKET = 70; + public static readonly UNQUOTED_IDENTIFIER = 71; + public static readonly QUOTED_IDENTIFIER = 72; + public static readonly EXPR_LINE_COMMENT = 73; + public static readonly EXPR_MULTILINE_COMMENT = 74; + public static readonly EXPR_WS = 75; + public static readonly METADATA = 76; + public static readonly FROM_LINE_COMMENT = 77; + public static readonly FROM_MULTILINE_COMMENT = 78; + public static readonly FROM_WS = 79; + public static readonly ID_PATTERN = 80; + public static readonly PROJECT_LINE_COMMENT = 81; + public static readonly PROJECT_MULTILINE_COMMENT = 82; + public static readonly PROJECT_WS = 83; + public static readonly AS = 84; + public static readonly RENAME_LINE_COMMENT = 85; + public static readonly RENAME_MULTILINE_COMMENT = 86; + public static readonly RENAME_WS = 87; + public static readonly ON = 88; + public static readonly WITH = 89; + public static readonly ENRICH_POLICY_NAME = 90; + public static readonly ENRICH_LINE_COMMENT = 91; + public static readonly ENRICH_MULTILINE_COMMENT = 92; + public static readonly ENRICH_WS = 93; + public static readonly ENRICH_FIELD_LINE_COMMENT = 94; + public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 95; + public static readonly ENRICH_FIELD_WS = 96; + public static readonly LOOKUP_LINE_COMMENT = 97; + public static readonly LOOKUP_MULTILINE_COMMENT = 98; + public static readonly LOOKUP_WS = 99; + public static readonly LOOKUP_FIELD_LINE_COMMENT = 100; + public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 101; + public static readonly LOOKUP_FIELD_WS = 102; + public static readonly MVEXPAND_LINE_COMMENT = 103; + public static readonly MVEXPAND_MULTILINE_COMMENT = 104; + public static readonly MVEXPAND_WS = 105; + public static readonly INFO = 106; + public static readonly SHOW_LINE_COMMENT = 107; + public static readonly SHOW_MULTILINE_COMMENT = 108; + public static readonly SHOW_WS = 109; + public static readonly FUNCTIONS = 110; + public static readonly META_LINE_COMMENT = 111; + public static readonly META_MULTILINE_COMMENT = 112; + public static readonly META_WS = 113; + public static readonly COLON = 114; + public static readonly SETTING = 115; + public static readonly SETTING_LINE_COMMENT = 116; + public static readonly SETTTING_MULTILINE_COMMENT = 117; + public static readonly SETTING_WS = 118; + public static readonly METRICS_LINE_COMMENT = 119; + public static readonly METRICS_MULTILINE_COMMENT = 120; + public static readonly METRICS_WS = 121; + public static readonly CLOSING_METRICS_LINE_COMMENT = 122; + public static readonly CLOSING_METRICS_MULTILINE_COMMENT = 123; + public static readonly CLOSING_METRICS_WS = 124; public static readonly EOF = Token.EOF; public static readonly EXPLAIN_MODE = 1; public static readonly EXPRESSION_MODE = 2; @@ -190,10 +191,11 @@ export default class esql_lexer extends Lexer { "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", - null, "']'", null, null, + "']'", null, null, null, - null, "'metadata'", + null, null, + "'metadata'", null, null, null, null, null, null, @@ -253,6 +255,7 @@ export default class esql_lexer extends Lexer { "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", + "NAMED_OR_POSITIONAL_PARAM", "OPENING_BRACKET", "CLOSING_BRACKET", "UNQUOTED_IDENTIFIER", @@ -326,29 +329,29 @@ export default class esql_lexer extends Lexer { "ASSIGN", "CAST_OP", "COMMA", "DESC", "DOT", "FALSE", "FIRST", "LAST", "LP", "IN", "IS", "LIKE", "NOT", "NULL", "NULLS", "OR", "PARAM", "RLIKE", "RP", "TRUE", "EQ", "CIEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", - "ASTERISK", "SLASH", "PERCENT", "OPENING_BRACKET", "CLOSING_BRACKET", - "UNQUOTED_IDENTIFIER", "QUOTED_ID", "QUOTED_IDENTIFIER", "EXPR_LINE_COMMENT", - "EXPR_MULTILINE_COMMENT", "EXPR_WS", "FROM_PIPE", "FROM_OPENING_BRACKET", - "FROM_CLOSING_BRACKET", "FROM_COMMA", "FROM_ASSIGN", "FROM_QUOTED_STRING", - "METADATA", "FROM_INDEX_UNQUOTED_IDENTIFIER", "FROM_LINE_COMMENT", "FROM_MULTILINE_COMMENT", - "FROM_WS", "PROJECT_PIPE", "PROJECT_DOT", "PROJECT_COMMA", "UNQUOTED_ID_BODY_WITH_PATTERN", - "UNQUOTED_ID_PATTERN", "ID_PATTERN", "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", - "PROJECT_WS", "RENAME_PIPE", "RENAME_ASSIGN", "RENAME_COMMA", "RENAME_DOT", - "AS", "RENAME_ID_PATTERN", "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", - "RENAME_WS", "ENRICH_PIPE", "ENRICH_OPENING_BRACKET", "ON", "WITH", "ENRICH_POLICY_NAME_BODY", - "ENRICH_POLICY_NAME", "ENRICH_QUOTED_IDENTIFIER", "ENRICH_MODE_UNQUOTED_VALUE", - "ENRICH_LINE_COMMENT", "ENRICH_MULTILINE_COMMENT", "ENRICH_WS", "ENRICH_FIELD_PIPE", - "ENRICH_FIELD_ASSIGN", "ENRICH_FIELD_COMMA", "ENRICH_FIELD_DOT", "ENRICH_FIELD_WITH", - "ENRICH_FIELD_ID_PATTERN", "ENRICH_FIELD_QUOTED_IDENTIFIER", "ENRICH_FIELD_LINE_COMMENT", - "ENRICH_FIELD_MULTILINE_COMMENT", "ENRICH_FIELD_WS", "LOOKUP_PIPE", "LOOKUP_COMMA", - "LOOKUP_DOT", "LOOKUP_ON", "LOOKUP_INDEX_UNQUOTED_IDENTIFIER", "LOOKUP_LINE_COMMENT", - "LOOKUP_MULTILINE_COMMENT", "LOOKUP_WS", "LOOKUP_FIELD_PIPE", "LOOKUP_FIELD_COMMA", - "LOOKUP_FIELD_DOT", "LOOKUP_FIELD_ID_PATTERN", "LOOKUP_FIELD_LINE_COMMENT", - "LOOKUP_FIELD_MULTILINE_COMMENT", "LOOKUP_FIELD_WS", "MVEXPAND_PIPE", - "MVEXPAND_DOT", "MVEXPAND_QUOTED_IDENTIFIER", "MVEXPAND_UNQUOTED_IDENTIFIER", - "MVEXPAND_LINE_COMMENT", "MVEXPAND_MULTILINE_COMMENT", "MVEXPAND_WS", - "SHOW_PIPE", "INFO", "SHOW_LINE_COMMENT", "SHOW_MULTILINE_COMMENT", "SHOW_WS", - "META_PIPE", "FUNCTIONS", "META_LINE_COMMENT", "META_MULTILINE_COMMENT", + "ASTERISK", "SLASH", "PERCENT", "NAMED_OR_POSITIONAL_PARAM", "OPENING_BRACKET", + "CLOSING_BRACKET", "UNQUOTED_IDENTIFIER", "QUOTED_ID", "QUOTED_IDENTIFIER", + "EXPR_LINE_COMMENT", "EXPR_MULTILINE_COMMENT", "EXPR_WS", "FROM_PIPE", + "FROM_OPENING_BRACKET", "FROM_CLOSING_BRACKET", "FROM_COMMA", "FROM_ASSIGN", + "FROM_QUOTED_STRING", "METADATA", "FROM_INDEX_UNQUOTED_IDENTIFIER", "FROM_LINE_COMMENT", + "FROM_MULTILINE_COMMENT", "FROM_WS", "PROJECT_PIPE", "PROJECT_DOT", "PROJECT_COMMA", + "UNQUOTED_ID_BODY_WITH_PATTERN", "UNQUOTED_ID_PATTERN", "ID_PATTERN", + "PROJECT_LINE_COMMENT", "PROJECT_MULTILINE_COMMENT", "PROJECT_WS", "RENAME_PIPE", + "RENAME_ASSIGN", "RENAME_COMMA", "RENAME_DOT", "AS", "RENAME_ID_PATTERN", + "RENAME_LINE_COMMENT", "RENAME_MULTILINE_COMMENT", "RENAME_WS", "ENRICH_PIPE", + "ENRICH_OPENING_BRACKET", "ON", "WITH", "ENRICH_POLICY_NAME_BODY", "ENRICH_POLICY_NAME", + "ENRICH_QUOTED_IDENTIFIER", "ENRICH_MODE_UNQUOTED_VALUE", "ENRICH_LINE_COMMENT", + "ENRICH_MULTILINE_COMMENT", "ENRICH_WS", "ENRICH_FIELD_PIPE", "ENRICH_FIELD_ASSIGN", + "ENRICH_FIELD_COMMA", "ENRICH_FIELD_DOT", "ENRICH_FIELD_WITH", "ENRICH_FIELD_ID_PATTERN", + "ENRICH_FIELD_QUOTED_IDENTIFIER", "ENRICH_FIELD_LINE_COMMENT", "ENRICH_FIELD_MULTILINE_COMMENT", + "ENRICH_FIELD_WS", "LOOKUP_PIPE", "LOOKUP_COMMA", "LOOKUP_DOT", "LOOKUP_ON", + "LOOKUP_INDEX_UNQUOTED_IDENTIFIER", "LOOKUP_LINE_COMMENT", "LOOKUP_MULTILINE_COMMENT", + "LOOKUP_WS", "LOOKUP_FIELD_PIPE", "LOOKUP_FIELD_COMMA", "LOOKUP_FIELD_DOT", + "LOOKUP_FIELD_ID_PATTERN", "LOOKUP_FIELD_LINE_COMMENT", "LOOKUP_FIELD_MULTILINE_COMMENT", + "LOOKUP_FIELD_WS", "MVEXPAND_PIPE", "MVEXPAND_DOT", "MVEXPAND_QUOTED_IDENTIFIER", + "MVEXPAND_UNQUOTED_IDENTIFIER", "MVEXPAND_LINE_COMMENT", "MVEXPAND_MULTILINE_COMMENT", + "MVEXPAND_WS", "SHOW_PIPE", "INFO", "SHOW_LINE_COMMENT", "SHOW_MULTILINE_COMMENT", + "SHOW_WS", "META_PIPE", "FUNCTIONS", "META_LINE_COMMENT", "META_MULTILINE_COMMENT", "META_WS", "SETTING_CLOSING_BRACKET", "COLON", "SETTING", "SETTING_LINE_COMMENT", "SETTTING_MULTILINE_COMMENT", "SETTING_WS", "METRICS_PIPE", "METRICS_INDEX_UNQUOTED_IDENTIFIER", "METRICS_LINE_COMMENT", "METRICS_MULTILINE_COMMENT", "METRICS_WS", "CLOSING_METRICS_COMMA", @@ -375,7 +378,7 @@ export default class esql_lexer extends Lexer { public get modeNames(): string[] { return esql_lexer.modeNames; } - public static readonly _serializedATN: number[] = [4,0,123,1404,6,-1,6, + public static readonly _serializedATN: number[] = [4,0,124,1422,6,-1,6, -1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1, 2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8, 2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16, @@ -405,456 +408,463 @@ export default class esql_lexer extends Lexer { 2,169,7,169,2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174, 2,175,7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180, 2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185,2,186,7,186, - 2,187,7,187,2,188,7,188,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3, - 1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5, - 1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, - 1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9, - 1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1, - 13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14, - 1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1, - 16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18, - 1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,4,20,565, - 8,20,11,20,12,20,566,1,20,1,20,1,21,1,21,1,21,1,21,5,21,575,8,21,10,21, - 12,21,578,9,21,1,21,3,21,581,8,21,1,21,3,21,584,8,21,1,21,1,21,1,22,1,22, - 1,22,1,22,1,22,5,22,593,8,22,10,22,12,22,596,9,22,1,22,1,22,1,22,1,22,1, - 22,1,23,4,23,604,8,23,11,23,12,23,605,1,23,1,23,1,24,1,24,1,24,3,24,613, - 8,24,1,25,4,25,616,8,25,11,25,12,25,617,1,26,1,26,1,26,1,26,1,26,1,27,1, - 27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30, - 1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,34,1,35,1,35,1, - 36,1,36,3,36,657,8,36,1,36,4,36,660,8,36,11,36,12,36,661,1,37,1,37,1,38, - 1,38,1,39,1,39,1,39,3,39,671,8,39,1,40,1,40,1,41,1,41,1,41,3,41,678,8,41, - 1,42,1,42,1,42,5,42,683,8,42,10,42,12,42,686,9,42,1,42,1,42,1,42,1,42,1, - 42,1,42,5,42,694,8,42,10,42,12,42,697,9,42,1,42,1,42,1,42,1,42,1,42,3,42, - 704,8,42,1,42,3,42,707,8,42,3,42,709,8,42,1,43,4,43,712,8,43,11,43,12,43, - 713,1,44,4,44,717,8,44,11,44,12,44,718,1,44,1,44,5,44,723,8,44,10,44,12, - 44,726,9,44,1,44,1,44,4,44,730,8,44,11,44,12,44,731,1,44,4,44,735,8,44, - 11,44,12,44,736,1,44,1,44,5,44,741,8,44,10,44,12,44,744,9,44,3,44,746,8, - 44,1,44,1,44,1,44,1,44,4,44,752,8,44,11,44,12,44,753,1,44,1,44,3,44,758, - 8,44,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,48,1,48,1, - 49,1,49,1,49,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,53,1,53,1,53, - 1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1, - 56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1,60, - 1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1, - 63,1,63,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,67,1,67,1,67, - 1,67,1,67,1,68,1,68,1,68,1,69,1,69,1,69,1,70,1,70,1,70,1,71,1,71,1,72,1, - 72,1,72,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,76,1,76,1,77,1,77,1,78,1,78, - 1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,82,1,82,5, - 82,889,8,82,10,82,12,82,892,9,82,1,82,1,82,3,82,896,8,82,1,82,4,82,899, - 8,82,11,82,12,82,900,3,82,903,8,82,1,83,1,83,4,83,907,8,83,11,83,12,83, - 908,1,83,1,83,1,84,1,84,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,87,1, - 87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,90,1,90,1,90, - 1,90,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,94,1, - 94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,96,1,96,1,96, - 1,96,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1, - 100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,3, - 102,994,8,102,1,103,1,103,3,103,998,8,103,1,103,5,103,1001,8,103,10,103, - 12,103,1004,9,103,1,103,1,103,3,103,1008,8,103,1,103,4,103,1011,8,103,11, - 103,12,103,1012,3,103,1015,8,103,1,104,1,104,4,104,1019,8,104,11,104,12, - 104,1020,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,107,1,107,1, - 107,1,107,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,110,1, - 110,1,110,1,110,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,113,1,113,1, - 113,1,113,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,116,1,116,1, - 116,1,116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1, - 119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1, - 121,1,121,1,122,4,122,1096,8,122,11,122,12,122,1097,1,122,1,122,3,122,1102, - 8,122,1,122,4,122,1105,8,122,11,122,12,122,1106,1,123,1,123,1,123,1,123, - 1,124,1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126, - 1,127,1,127,1,127,1,127,1,128,1,128,1,128,1,128,1,128,1,128,1,129,1,129, - 1,129,1,129,1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,132,1,132, - 1,132,1,132,1,133,1,133,1,133,1,133,1,134,1,134,1,134,1,134,1,135,1,135, - 1,135,1,135,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,138,1,138, - 1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,140,1,140,1,140,1,140,1,141, - 1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,143,1,143,1,143,1,143, - 1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146, - 1,146,1,146,1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,149,1,149, - 1,149,1,149,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,151,1,152,1,152, - 1,152,1,152,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,155, - 1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1,158, - 1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160, - 1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1,163,1,163,1,163, - 1,163,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,165,1,166,1,166, - 1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,167,1,167,1,167,1,167, - 1,168,1,168,1,168,1,168,1,169,1,169,1,169,1,169,1,170,1,170,1,170,1,170, - 1,170,1,171,1,171,1,172,1,172,1,172,1,172,1,172,4,172,1325,8,172,11,172, - 12,172,1326,1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1,175,1,175, - 1,175,1,175,1,176,1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177, - 1,177,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,180,1,180,1,180, - 1,180,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,183, - 1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,185,1,185,1,185,1,185,1,185, - 1,185,1,186,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187, - 1,187,1,188,1,188,1,188,1,188,1,188,2,594,695,0,189,16,1,18,2,20,3,22,4, - 24,5,26,6,28,7,30,8,32,9,34,10,36,11,38,12,40,13,42,14,44,15,46,16,48,17, - 50,18,52,19,54,20,56,21,58,22,60,23,62,24,64,0,66,25,68,0,70,0,72,26,74, - 27,76,28,78,29,80,0,82,0,84,0,86,0,88,0,90,0,92,0,94,0,96,0,98,0,100,30, - 102,31,104,32,106,33,108,34,110,35,112,36,114,37,116,38,118,39,120,40,122, - 41,124,42,126,43,128,44,130,45,132,46,134,47,136,48,138,49,140,50,142,51, - 144,52,146,53,148,54,150,55,152,56,154,57,156,58,158,59,160,60,162,61,164, - 62,166,63,168,64,170,65,172,66,174,67,176,68,178,69,180,70,182,0,184,71, - 186,72,188,73,190,74,192,0,194,0,196,0,198,0,200,0,202,0,204,75,206,0,208, - 76,210,77,212,78,214,0,216,0,218,0,220,0,222,0,224,79,226,80,228,81,230, - 82,232,0,234,0,236,0,238,0,240,83,242,0,244,84,246,85,248,86,250,0,252, - 0,254,87,256,88,258,0,260,89,262,0,264,0,266,90,268,91,270,92,272,0,274, - 0,276,0,278,0,280,0,282,0,284,0,286,93,288,94,290,95,292,0,294,0,296,0, - 298,0,300,0,302,96,304,97,306,98,308,0,310,0,312,0,314,0,316,99,318,100, - 320,101,322,0,324,0,326,0,328,0,330,102,332,103,334,104,336,0,338,105,340, - 106,342,107,344,108,346,0,348,109,350,110,352,111,354,112,356,0,358,113, - 360,114,362,115,364,116,366,117,368,0,370,0,372,118,374,119,376,120,378, - 0,380,121,382,122,384,123,386,0,388,0,390,0,392,0,16,0,1,2,3,4,5,6,7,8, - 9,10,11,12,13,14,15,35,2,0,68,68,100,100,2,0,73,73,105,105,2,0,83,83,115, - 115,2,0,69,69,101,101,2,0,67,67,99,99,2,0,84,84,116,116,2,0,82,82,114,114, - 2,0,79,79,111,111,2,0,80,80,112,112,2,0,78,78,110,110,2,0,72,72,104,104, - 2,0,86,86,118,118,2,0,65,65,97,97,2,0,76,76,108,108,2,0,88,88,120,120,2, - 0,70,70,102,102,2,0,77,77,109,109,2,0,71,71,103,103,2,0,75,75,107,107,2, - 0,85,85,117,117,2,0,87,87,119,119,6,0,9,10,13,13,32,32,47,47,91,91,93,93, - 2,0,10,10,13,13,3,0,9,10,13,13,32,32,10,0,9,10,13,13,32,32,44,44,47,47, - 61,61,91,91,93,93,96,96,124,124,2,0,42,42,47,47,1,0,48,57,2,0,65,90,97, - 122,8,0,34,34,78,78,82,82,84,84,92,92,110,110,114,114,116,116,4,0,10,10, - 13,13,34,34,92,92,2,0,43,43,45,45,1,0,96,96,2,0,66,66,98,98,2,0,89,89,121, - 121,11,0,9,10,13,13,32,32,34,35,44,44,47,47,58,58,60,60,62,63,92,92,124, - 124,1427,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0, - 0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,36, - 1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46,1,0,0, - 0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0,56,1,0,0,0,0,58, - 1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,66,1,0,0,0,1,68,1,0,0,0,1,70,1,0,0, - 0,1,72,1,0,0,0,1,74,1,0,0,0,1,76,1,0,0,0,2,78,1,0,0,0,2,100,1,0,0,0,2,102, - 1,0,0,0,2,104,1,0,0,0,2,106,1,0,0,0,2,108,1,0,0,0,2,110,1,0,0,0,2,112,1, - 0,0,0,2,114,1,0,0,0,2,116,1,0,0,0,2,118,1,0,0,0,2,120,1,0,0,0,2,122,1,0, - 0,0,2,124,1,0,0,0,2,126,1,0,0,0,2,128,1,0,0,0,2,130,1,0,0,0,2,132,1,0,0, - 0,2,134,1,0,0,0,2,136,1,0,0,0,2,138,1,0,0,0,2,140,1,0,0,0,2,142,1,0,0,0, - 2,144,1,0,0,0,2,146,1,0,0,0,2,148,1,0,0,0,2,150,1,0,0,0,2,152,1,0,0,0,2, - 154,1,0,0,0,2,156,1,0,0,0,2,158,1,0,0,0,2,160,1,0,0,0,2,162,1,0,0,0,2,164, - 1,0,0,0,2,166,1,0,0,0,2,168,1,0,0,0,2,170,1,0,0,0,2,172,1,0,0,0,2,174,1, - 0,0,0,2,176,1,0,0,0,2,178,1,0,0,0,2,180,1,0,0,0,2,184,1,0,0,0,2,186,1,0, - 0,0,2,188,1,0,0,0,2,190,1,0,0,0,3,192,1,0,0,0,3,194,1,0,0,0,3,196,1,0,0, - 0,3,198,1,0,0,0,3,200,1,0,0,0,3,202,1,0,0,0,3,204,1,0,0,0,3,206,1,0,0,0, - 3,208,1,0,0,0,3,210,1,0,0,0,3,212,1,0,0,0,4,214,1,0,0,0,4,216,1,0,0,0,4, - 218,1,0,0,0,4,224,1,0,0,0,4,226,1,0,0,0,4,228,1,0,0,0,4,230,1,0,0,0,5,232, - 1,0,0,0,5,234,1,0,0,0,5,236,1,0,0,0,5,238,1,0,0,0,5,240,1,0,0,0,5,242,1, - 0,0,0,5,244,1,0,0,0,5,246,1,0,0,0,5,248,1,0,0,0,6,250,1,0,0,0,6,252,1,0, - 0,0,6,254,1,0,0,0,6,256,1,0,0,0,6,260,1,0,0,0,6,262,1,0,0,0,6,264,1,0,0, - 0,6,266,1,0,0,0,6,268,1,0,0,0,6,270,1,0,0,0,7,272,1,0,0,0,7,274,1,0,0,0, - 7,276,1,0,0,0,7,278,1,0,0,0,7,280,1,0,0,0,7,282,1,0,0,0,7,284,1,0,0,0,7, - 286,1,0,0,0,7,288,1,0,0,0,7,290,1,0,0,0,8,292,1,0,0,0,8,294,1,0,0,0,8,296, - 1,0,0,0,8,298,1,0,0,0,8,300,1,0,0,0,8,302,1,0,0,0,8,304,1,0,0,0,8,306,1, - 0,0,0,9,308,1,0,0,0,9,310,1,0,0,0,9,312,1,0,0,0,9,314,1,0,0,0,9,316,1,0, - 0,0,9,318,1,0,0,0,9,320,1,0,0,0,10,322,1,0,0,0,10,324,1,0,0,0,10,326,1, - 0,0,0,10,328,1,0,0,0,10,330,1,0,0,0,10,332,1,0,0,0,10,334,1,0,0,0,11,336, - 1,0,0,0,11,338,1,0,0,0,11,340,1,0,0,0,11,342,1,0,0,0,11,344,1,0,0,0,12, - 346,1,0,0,0,12,348,1,0,0,0,12,350,1,0,0,0,12,352,1,0,0,0,12,354,1,0,0,0, - 13,356,1,0,0,0,13,358,1,0,0,0,13,360,1,0,0,0,13,362,1,0,0,0,13,364,1,0, - 0,0,13,366,1,0,0,0,14,368,1,0,0,0,14,370,1,0,0,0,14,372,1,0,0,0,14,374, - 1,0,0,0,14,376,1,0,0,0,15,378,1,0,0,0,15,380,1,0,0,0,15,382,1,0,0,0,15, - 384,1,0,0,0,15,386,1,0,0,0,15,388,1,0,0,0,15,390,1,0,0,0,15,392,1,0,0,0, - 16,394,1,0,0,0,18,404,1,0,0,0,20,411,1,0,0,0,22,420,1,0,0,0,24,427,1,0, - 0,0,26,437,1,0,0,0,28,444,1,0,0,0,30,451,1,0,0,0,32,465,1,0,0,0,34,472, - 1,0,0,0,36,480,1,0,0,0,38,489,1,0,0,0,40,496,1,0,0,0,42,506,1,0,0,0,44, - 518,1,0,0,0,46,527,1,0,0,0,48,533,1,0,0,0,50,540,1,0,0,0,52,547,1,0,0,0, - 54,555,1,0,0,0,56,564,1,0,0,0,58,570,1,0,0,0,60,587,1,0,0,0,62,603,1,0, - 0,0,64,612,1,0,0,0,66,615,1,0,0,0,68,619,1,0,0,0,70,624,1,0,0,0,72,629, - 1,0,0,0,74,633,1,0,0,0,76,637,1,0,0,0,78,641,1,0,0,0,80,645,1,0,0,0,82, - 647,1,0,0,0,84,649,1,0,0,0,86,652,1,0,0,0,88,654,1,0,0,0,90,663,1,0,0,0, - 92,665,1,0,0,0,94,670,1,0,0,0,96,672,1,0,0,0,98,677,1,0,0,0,100,708,1,0, - 0,0,102,711,1,0,0,0,104,757,1,0,0,0,106,759,1,0,0,0,108,762,1,0,0,0,110, - 766,1,0,0,0,112,770,1,0,0,0,114,772,1,0,0,0,116,775,1,0,0,0,118,777,1,0, - 0,0,120,782,1,0,0,0,122,784,1,0,0,0,124,790,1,0,0,0,126,796,1,0,0,0,128, - 801,1,0,0,0,130,803,1,0,0,0,132,806,1,0,0,0,134,809,1,0,0,0,136,814,1,0, - 0,0,138,818,1,0,0,0,140,823,1,0,0,0,142,829,1,0,0,0,144,832,1,0,0,0,146, - 834,1,0,0,0,148,840,1,0,0,0,150,842,1,0,0,0,152,847,1,0,0,0,154,850,1,0, - 0,0,156,853,1,0,0,0,158,856,1,0,0,0,160,858,1,0,0,0,162,861,1,0,0,0,164, - 863,1,0,0,0,166,866,1,0,0,0,168,868,1,0,0,0,170,870,1,0,0,0,172,872,1,0, - 0,0,174,874,1,0,0,0,176,876,1,0,0,0,178,881,1,0,0,0,180,902,1,0,0,0,182, - 904,1,0,0,0,184,912,1,0,0,0,186,914,1,0,0,0,188,918,1,0,0,0,190,922,1,0, - 0,0,192,926,1,0,0,0,194,931,1,0,0,0,196,935,1,0,0,0,198,939,1,0,0,0,200, - 943,1,0,0,0,202,947,1,0,0,0,204,951,1,0,0,0,206,960,1,0,0,0,208,964,1,0, - 0,0,210,968,1,0,0,0,212,972,1,0,0,0,214,976,1,0,0,0,216,981,1,0,0,0,218, - 985,1,0,0,0,220,993,1,0,0,0,222,1014,1,0,0,0,224,1018,1,0,0,0,226,1022, - 1,0,0,0,228,1026,1,0,0,0,230,1030,1,0,0,0,232,1034,1,0,0,0,234,1039,1,0, - 0,0,236,1043,1,0,0,0,238,1047,1,0,0,0,240,1051,1,0,0,0,242,1054,1,0,0,0, - 244,1058,1,0,0,0,246,1062,1,0,0,0,248,1066,1,0,0,0,250,1070,1,0,0,0,252, - 1075,1,0,0,0,254,1080,1,0,0,0,256,1085,1,0,0,0,258,1092,1,0,0,0,260,1101, - 1,0,0,0,262,1108,1,0,0,0,264,1112,1,0,0,0,266,1116,1,0,0,0,268,1120,1,0, - 0,0,270,1124,1,0,0,0,272,1128,1,0,0,0,274,1134,1,0,0,0,276,1138,1,0,0,0, - 278,1142,1,0,0,0,280,1146,1,0,0,0,282,1150,1,0,0,0,284,1154,1,0,0,0,286, - 1158,1,0,0,0,288,1162,1,0,0,0,290,1166,1,0,0,0,292,1170,1,0,0,0,294,1175, - 1,0,0,0,296,1179,1,0,0,0,298,1183,1,0,0,0,300,1188,1,0,0,0,302,1192,1,0, - 0,0,304,1196,1,0,0,0,306,1200,1,0,0,0,308,1204,1,0,0,0,310,1210,1,0,0,0, - 312,1214,1,0,0,0,314,1218,1,0,0,0,316,1222,1,0,0,0,318,1226,1,0,0,0,320, - 1230,1,0,0,0,322,1234,1,0,0,0,324,1239,1,0,0,0,326,1243,1,0,0,0,328,1247, - 1,0,0,0,330,1251,1,0,0,0,332,1255,1,0,0,0,334,1259,1,0,0,0,336,1263,1,0, - 0,0,338,1268,1,0,0,0,340,1273,1,0,0,0,342,1277,1,0,0,0,344,1281,1,0,0,0, - 346,1285,1,0,0,0,348,1290,1,0,0,0,350,1300,1,0,0,0,352,1304,1,0,0,0,354, - 1308,1,0,0,0,356,1312,1,0,0,0,358,1317,1,0,0,0,360,1324,1,0,0,0,362,1328, - 1,0,0,0,364,1332,1,0,0,0,366,1336,1,0,0,0,368,1340,1,0,0,0,370,1345,1,0, - 0,0,372,1351,1,0,0,0,374,1355,1,0,0,0,376,1359,1,0,0,0,378,1363,1,0,0,0, - 380,1369,1,0,0,0,382,1373,1,0,0,0,384,1377,1,0,0,0,386,1381,1,0,0,0,388, - 1387,1,0,0,0,390,1393,1,0,0,0,392,1399,1,0,0,0,394,395,7,0,0,0,395,396, - 7,1,0,0,396,397,7,2,0,0,397,398,7,2,0,0,398,399,7,3,0,0,399,400,7,4,0,0, - 400,401,7,5,0,0,401,402,1,0,0,0,402,403,6,0,0,0,403,17,1,0,0,0,404,405, - 7,0,0,0,405,406,7,6,0,0,406,407,7,7,0,0,407,408,7,8,0,0,408,409,1,0,0,0, - 409,410,6,1,1,0,410,19,1,0,0,0,411,412,7,3,0,0,412,413,7,9,0,0,413,414, - 7,6,0,0,414,415,7,1,0,0,415,416,7,4,0,0,416,417,7,10,0,0,417,418,1,0,0, - 0,418,419,6,2,2,0,419,21,1,0,0,0,420,421,7,3,0,0,421,422,7,11,0,0,422,423, - 7,12,0,0,423,424,7,13,0,0,424,425,1,0,0,0,425,426,6,3,0,0,426,23,1,0,0, - 0,427,428,7,3,0,0,428,429,7,14,0,0,429,430,7,8,0,0,430,431,7,13,0,0,431, - 432,7,12,0,0,432,433,7,1,0,0,433,434,7,9,0,0,434,435,1,0,0,0,435,436,6, - 4,3,0,436,25,1,0,0,0,437,438,7,15,0,0,438,439,7,6,0,0,439,440,7,7,0,0,440, - 441,7,16,0,0,441,442,1,0,0,0,442,443,6,5,4,0,443,27,1,0,0,0,444,445,7,17, - 0,0,445,446,7,6,0,0,446,447,7,7,0,0,447,448,7,18,0,0,448,449,1,0,0,0,449, - 450,6,6,0,0,450,29,1,0,0,0,451,452,7,1,0,0,452,453,7,9,0,0,453,454,7,13, - 0,0,454,455,7,1,0,0,455,456,7,9,0,0,456,457,7,3,0,0,457,458,7,2,0,0,458, - 459,7,5,0,0,459,460,7,12,0,0,460,461,7,5,0,0,461,462,7,2,0,0,462,463,1, - 0,0,0,463,464,6,7,0,0,464,31,1,0,0,0,465,466,7,18,0,0,466,467,7,3,0,0,467, - 468,7,3,0,0,468,469,7,8,0,0,469,470,1,0,0,0,470,471,6,8,1,0,471,33,1,0, - 0,0,472,473,7,13,0,0,473,474,7,1,0,0,474,475,7,16,0,0,475,476,7,1,0,0,476, - 477,7,5,0,0,477,478,1,0,0,0,478,479,6,9,0,0,479,35,1,0,0,0,480,481,7,13, - 0,0,481,482,7,7,0,0,482,483,7,7,0,0,483,484,7,18,0,0,484,485,7,19,0,0,485, - 486,7,8,0,0,486,487,1,0,0,0,487,488,6,10,5,0,488,37,1,0,0,0,489,490,7,16, - 0,0,490,491,7,3,0,0,491,492,7,5,0,0,492,493,7,12,0,0,493,494,1,0,0,0,494, - 495,6,11,6,0,495,39,1,0,0,0,496,497,7,16,0,0,497,498,7,3,0,0,498,499,7, - 5,0,0,499,500,7,6,0,0,500,501,7,1,0,0,501,502,7,4,0,0,502,503,7,2,0,0,503, - 504,1,0,0,0,504,505,6,12,7,0,505,41,1,0,0,0,506,507,7,16,0,0,507,508,7, - 11,0,0,508,509,5,95,0,0,509,510,7,3,0,0,510,511,7,14,0,0,511,512,7,8,0, - 0,512,513,7,12,0,0,513,514,7,9,0,0,514,515,7,0,0,0,515,516,1,0,0,0,516, - 517,6,13,8,0,517,43,1,0,0,0,518,519,7,6,0,0,519,520,7,3,0,0,520,521,7,9, - 0,0,521,522,7,12,0,0,522,523,7,16,0,0,523,524,7,3,0,0,524,525,1,0,0,0,525, - 526,6,14,9,0,526,45,1,0,0,0,527,528,7,6,0,0,528,529,7,7,0,0,529,530,7,20, - 0,0,530,531,1,0,0,0,531,532,6,15,0,0,532,47,1,0,0,0,533,534,7,2,0,0,534, - 535,7,10,0,0,535,536,7,7,0,0,536,537,7,20,0,0,537,538,1,0,0,0,538,539,6, - 16,10,0,539,49,1,0,0,0,540,541,7,2,0,0,541,542,7,7,0,0,542,543,7,6,0,0, - 543,544,7,5,0,0,544,545,1,0,0,0,545,546,6,17,0,0,546,51,1,0,0,0,547,548, - 7,2,0,0,548,549,7,5,0,0,549,550,7,12,0,0,550,551,7,5,0,0,551,552,7,2,0, - 0,552,553,1,0,0,0,553,554,6,18,0,0,554,53,1,0,0,0,555,556,7,20,0,0,556, - 557,7,10,0,0,557,558,7,3,0,0,558,559,7,6,0,0,559,560,7,3,0,0,560,561,1, - 0,0,0,561,562,6,19,0,0,562,55,1,0,0,0,563,565,8,21,0,0,564,563,1,0,0,0, - 565,566,1,0,0,0,566,564,1,0,0,0,566,567,1,0,0,0,567,568,1,0,0,0,568,569, - 6,20,0,0,569,57,1,0,0,0,570,571,5,47,0,0,571,572,5,47,0,0,572,576,1,0,0, - 0,573,575,8,22,0,0,574,573,1,0,0,0,575,578,1,0,0,0,576,574,1,0,0,0,576, - 577,1,0,0,0,577,580,1,0,0,0,578,576,1,0,0,0,579,581,5,13,0,0,580,579,1, - 0,0,0,580,581,1,0,0,0,581,583,1,0,0,0,582,584,5,10,0,0,583,582,1,0,0,0, - 583,584,1,0,0,0,584,585,1,0,0,0,585,586,6,21,11,0,586,59,1,0,0,0,587,588, - 5,47,0,0,588,589,5,42,0,0,589,594,1,0,0,0,590,593,3,60,22,0,591,593,9,0, - 0,0,592,590,1,0,0,0,592,591,1,0,0,0,593,596,1,0,0,0,594,595,1,0,0,0,594, - 592,1,0,0,0,595,597,1,0,0,0,596,594,1,0,0,0,597,598,5,42,0,0,598,599,5, - 47,0,0,599,600,1,0,0,0,600,601,6,22,11,0,601,61,1,0,0,0,602,604,7,23,0, - 0,603,602,1,0,0,0,604,605,1,0,0,0,605,603,1,0,0,0,605,606,1,0,0,0,606,607, - 1,0,0,0,607,608,6,23,11,0,608,63,1,0,0,0,609,613,8,24,0,0,610,611,5,47, - 0,0,611,613,8,25,0,0,612,609,1,0,0,0,612,610,1,0,0,0,613,65,1,0,0,0,614, - 616,3,64,24,0,615,614,1,0,0,0,616,617,1,0,0,0,617,615,1,0,0,0,617,618,1, - 0,0,0,618,67,1,0,0,0,619,620,3,176,80,0,620,621,1,0,0,0,621,622,6,26,12, - 0,622,623,6,26,13,0,623,69,1,0,0,0,624,625,3,78,31,0,625,626,1,0,0,0,626, - 627,6,27,14,0,627,628,6,27,15,0,628,71,1,0,0,0,629,630,3,62,23,0,630,631, - 1,0,0,0,631,632,6,28,11,0,632,73,1,0,0,0,633,634,3,58,21,0,634,635,1,0, - 0,0,635,636,6,29,11,0,636,75,1,0,0,0,637,638,3,60,22,0,638,639,1,0,0,0, - 639,640,6,30,11,0,640,77,1,0,0,0,641,642,5,124,0,0,642,643,1,0,0,0,643, - 644,6,31,15,0,644,79,1,0,0,0,645,646,7,26,0,0,646,81,1,0,0,0,647,648,7, - 27,0,0,648,83,1,0,0,0,649,650,5,92,0,0,650,651,7,28,0,0,651,85,1,0,0,0, - 652,653,8,29,0,0,653,87,1,0,0,0,654,656,7,3,0,0,655,657,7,30,0,0,656,655, - 1,0,0,0,656,657,1,0,0,0,657,659,1,0,0,0,658,660,3,80,32,0,659,658,1,0,0, - 0,660,661,1,0,0,0,661,659,1,0,0,0,661,662,1,0,0,0,662,89,1,0,0,0,663,664, - 5,64,0,0,664,91,1,0,0,0,665,666,5,96,0,0,666,93,1,0,0,0,667,671,8,31,0, - 0,668,669,5,96,0,0,669,671,5,96,0,0,670,667,1,0,0,0,670,668,1,0,0,0,671, - 95,1,0,0,0,672,673,5,95,0,0,673,97,1,0,0,0,674,678,3,82,33,0,675,678,3, - 80,32,0,676,678,3,96,40,0,677,674,1,0,0,0,677,675,1,0,0,0,677,676,1,0,0, - 0,678,99,1,0,0,0,679,684,5,34,0,0,680,683,3,84,34,0,681,683,3,86,35,0,682, - 680,1,0,0,0,682,681,1,0,0,0,683,686,1,0,0,0,684,682,1,0,0,0,684,685,1,0, - 0,0,685,687,1,0,0,0,686,684,1,0,0,0,687,709,5,34,0,0,688,689,5,34,0,0,689, - 690,5,34,0,0,690,691,5,34,0,0,691,695,1,0,0,0,692,694,8,22,0,0,693,692, - 1,0,0,0,694,697,1,0,0,0,695,696,1,0,0,0,695,693,1,0,0,0,696,698,1,0,0,0, - 697,695,1,0,0,0,698,699,5,34,0,0,699,700,5,34,0,0,700,701,5,34,0,0,701, - 703,1,0,0,0,702,704,5,34,0,0,703,702,1,0,0,0,703,704,1,0,0,0,704,706,1, - 0,0,0,705,707,5,34,0,0,706,705,1,0,0,0,706,707,1,0,0,0,707,709,1,0,0,0, - 708,679,1,0,0,0,708,688,1,0,0,0,709,101,1,0,0,0,710,712,3,80,32,0,711,710, - 1,0,0,0,712,713,1,0,0,0,713,711,1,0,0,0,713,714,1,0,0,0,714,103,1,0,0,0, - 715,717,3,80,32,0,716,715,1,0,0,0,717,718,1,0,0,0,718,716,1,0,0,0,718,719, - 1,0,0,0,719,720,1,0,0,0,720,724,3,120,52,0,721,723,3,80,32,0,722,721,1, - 0,0,0,723,726,1,0,0,0,724,722,1,0,0,0,724,725,1,0,0,0,725,758,1,0,0,0,726, - 724,1,0,0,0,727,729,3,120,52,0,728,730,3,80,32,0,729,728,1,0,0,0,730,731, - 1,0,0,0,731,729,1,0,0,0,731,732,1,0,0,0,732,758,1,0,0,0,733,735,3,80,32, - 0,734,733,1,0,0,0,735,736,1,0,0,0,736,734,1,0,0,0,736,737,1,0,0,0,737,745, - 1,0,0,0,738,742,3,120,52,0,739,741,3,80,32,0,740,739,1,0,0,0,741,744,1, - 0,0,0,742,740,1,0,0,0,742,743,1,0,0,0,743,746,1,0,0,0,744,742,1,0,0,0,745, - 738,1,0,0,0,745,746,1,0,0,0,746,747,1,0,0,0,747,748,3,88,36,0,748,758,1, - 0,0,0,749,751,3,120,52,0,750,752,3,80,32,0,751,750,1,0,0,0,752,753,1,0, - 0,0,753,751,1,0,0,0,753,754,1,0,0,0,754,755,1,0,0,0,755,756,3,88,36,0,756, - 758,1,0,0,0,757,716,1,0,0,0,757,727,1,0,0,0,757,734,1,0,0,0,757,749,1,0, - 0,0,758,105,1,0,0,0,759,760,7,32,0,0,760,761,7,33,0,0,761,107,1,0,0,0,762, - 763,7,12,0,0,763,764,7,9,0,0,764,765,7,0,0,0,765,109,1,0,0,0,766,767,7, - 12,0,0,767,768,7,2,0,0,768,769,7,4,0,0,769,111,1,0,0,0,770,771,5,61,0,0, - 771,113,1,0,0,0,772,773,5,58,0,0,773,774,5,58,0,0,774,115,1,0,0,0,775,776, - 5,44,0,0,776,117,1,0,0,0,777,778,7,0,0,0,778,779,7,3,0,0,779,780,7,2,0, - 0,780,781,7,4,0,0,781,119,1,0,0,0,782,783,5,46,0,0,783,121,1,0,0,0,784, - 785,7,15,0,0,785,786,7,12,0,0,786,787,7,13,0,0,787,788,7,2,0,0,788,789, - 7,3,0,0,789,123,1,0,0,0,790,791,7,15,0,0,791,792,7,1,0,0,792,793,7,6,0, - 0,793,794,7,2,0,0,794,795,7,5,0,0,795,125,1,0,0,0,796,797,7,13,0,0,797, - 798,7,12,0,0,798,799,7,2,0,0,799,800,7,5,0,0,800,127,1,0,0,0,801,802,5, - 40,0,0,802,129,1,0,0,0,803,804,7,1,0,0,804,805,7,9,0,0,805,131,1,0,0,0, - 806,807,7,1,0,0,807,808,7,2,0,0,808,133,1,0,0,0,809,810,7,13,0,0,810,811, - 7,1,0,0,811,812,7,18,0,0,812,813,7,3,0,0,813,135,1,0,0,0,814,815,7,9,0, - 0,815,816,7,7,0,0,816,817,7,5,0,0,817,137,1,0,0,0,818,819,7,9,0,0,819,820, - 7,19,0,0,820,821,7,13,0,0,821,822,7,13,0,0,822,139,1,0,0,0,823,824,7,9, - 0,0,824,825,7,19,0,0,825,826,7,13,0,0,826,827,7,13,0,0,827,828,7,2,0,0, - 828,141,1,0,0,0,829,830,7,7,0,0,830,831,7,6,0,0,831,143,1,0,0,0,832,833, - 5,63,0,0,833,145,1,0,0,0,834,835,7,6,0,0,835,836,7,13,0,0,836,837,7,1,0, - 0,837,838,7,18,0,0,838,839,7,3,0,0,839,147,1,0,0,0,840,841,5,41,0,0,841, - 149,1,0,0,0,842,843,7,5,0,0,843,844,7,6,0,0,844,845,7,19,0,0,845,846,7, - 3,0,0,846,151,1,0,0,0,847,848,5,61,0,0,848,849,5,61,0,0,849,153,1,0,0,0, - 850,851,5,61,0,0,851,852,5,126,0,0,852,155,1,0,0,0,853,854,5,33,0,0,854, - 855,5,61,0,0,855,157,1,0,0,0,856,857,5,60,0,0,857,159,1,0,0,0,858,859,5, - 60,0,0,859,860,5,61,0,0,860,161,1,0,0,0,861,862,5,62,0,0,862,163,1,0,0, - 0,863,864,5,62,0,0,864,865,5,61,0,0,865,165,1,0,0,0,866,867,5,43,0,0,867, - 167,1,0,0,0,868,869,5,45,0,0,869,169,1,0,0,0,870,871,5,42,0,0,871,171,1, - 0,0,0,872,873,5,47,0,0,873,173,1,0,0,0,874,875,5,37,0,0,875,175,1,0,0,0, - 876,877,5,91,0,0,877,878,1,0,0,0,878,879,6,80,0,0,879,880,6,80,0,0,880, - 177,1,0,0,0,881,882,5,93,0,0,882,883,1,0,0,0,883,884,6,81,15,0,884,885, - 6,81,15,0,885,179,1,0,0,0,886,890,3,82,33,0,887,889,3,98,41,0,888,887,1, - 0,0,0,889,892,1,0,0,0,890,888,1,0,0,0,890,891,1,0,0,0,891,903,1,0,0,0,892, - 890,1,0,0,0,893,896,3,96,40,0,894,896,3,90,37,0,895,893,1,0,0,0,895,894, - 1,0,0,0,896,898,1,0,0,0,897,899,3,98,41,0,898,897,1,0,0,0,899,900,1,0,0, - 0,900,898,1,0,0,0,900,901,1,0,0,0,901,903,1,0,0,0,902,886,1,0,0,0,902,895, - 1,0,0,0,903,181,1,0,0,0,904,906,3,92,38,0,905,907,3,94,39,0,906,905,1,0, - 0,0,907,908,1,0,0,0,908,906,1,0,0,0,908,909,1,0,0,0,909,910,1,0,0,0,910, - 911,3,92,38,0,911,183,1,0,0,0,912,913,3,182,83,0,913,185,1,0,0,0,914,915, - 3,58,21,0,915,916,1,0,0,0,916,917,6,85,11,0,917,187,1,0,0,0,918,919,3,60, - 22,0,919,920,1,0,0,0,920,921,6,86,11,0,921,189,1,0,0,0,922,923,3,62,23, - 0,923,924,1,0,0,0,924,925,6,87,11,0,925,191,1,0,0,0,926,927,3,78,31,0,927, - 928,1,0,0,0,928,929,6,88,14,0,929,930,6,88,15,0,930,193,1,0,0,0,931,932, - 3,176,80,0,932,933,1,0,0,0,933,934,6,89,12,0,934,195,1,0,0,0,935,936,3, - 178,81,0,936,937,1,0,0,0,937,938,6,90,16,0,938,197,1,0,0,0,939,940,3,116, - 50,0,940,941,1,0,0,0,941,942,6,91,17,0,942,199,1,0,0,0,943,944,3,112,48, - 0,944,945,1,0,0,0,945,946,6,92,18,0,946,201,1,0,0,0,947,948,3,100,42,0, - 948,949,1,0,0,0,949,950,6,93,19,0,950,203,1,0,0,0,951,952,7,16,0,0,952, - 953,7,3,0,0,953,954,7,5,0,0,954,955,7,12,0,0,955,956,7,0,0,0,956,957,7, - 12,0,0,957,958,7,5,0,0,958,959,7,12,0,0,959,205,1,0,0,0,960,961,3,66,25, - 0,961,962,1,0,0,0,962,963,6,95,20,0,963,207,1,0,0,0,964,965,3,58,21,0,965, - 966,1,0,0,0,966,967,6,96,11,0,967,209,1,0,0,0,968,969,3,60,22,0,969,970, - 1,0,0,0,970,971,6,97,11,0,971,211,1,0,0,0,972,973,3,62,23,0,973,974,1,0, - 0,0,974,975,6,98,11,0,975,213,1,0,0,0,976,977,3,78,31,0,977,978,1,0,0,0, - 978,979,6,99,14,0,979,980,6,99,15,0,980,215,1,0,0,0,981,982,3,120,52,0, - 982,983,1,0,0,0,983,984,6,100,21,0,984,217,1,0,0,0,985,986,3,116,50,0,986, - 987,1,0,0,0,987,988,6,101,17,0,988,219,1,0,0,0,989,994,3,82,33,0,990,994, - 3,80,32,0,991,994,3,96,40,0,992,994,3,170,77,0,993,989,1,0,0,0,993,990, - 1,0,0,0,993,991,1,0,0,0,993,992,1,0,0,0,994,221,1,0,0,0,995,998,3,82,33, - 0,996,998,3,170,77,0,997,995,1,0,0,0,997,996,1,0,0,0,998,1002,1,0,0,0,999, - 1001,3,220,102,0,1000,999,1,0,0,0,1001,1004,1,0,0,0,1002,1000,1,0,0,0,1002, - 1003,1,0,0,0,1003,1015,1,0,0,0,1004,1002,1,0,0,0,1005,1008,3,96,40,0,1006, - 1008,3,90,37,0,1007,1005,1,0,0,0,1007,1006,1,0,0,0,1008,1010,1,0,0,0,1009, - 1011,3,220,102,0,1010,1009,1,0,0,0,1011,1012,1,0,0,0,1012,1010,1,0,0,0, - 1012,1013,1,0,0,0,1013,1015,1,0,0,0,1014,997,1,0,0,0,1014,1007,1,0,0,0, - 1015,223,1,0,0,0,1016,1019,3,222,103,0,1017,1019,3,182,83,0,1018,1016,1, - 0,0,0,1018,1017,1,0,0,0,1019,1020,1,0,0,0,1020,1018,1,0,0,0,1020,1021,1, - 0,0,0,1021,225,1,0,0,0,1022,1023,3,58,21,0,1023,1024,1,0,0,0,1024,1025, - 6,105,11,0,1025,227,1,0,0,0,1026,1027,3,60,22,0,1027,1028,1,0,0,0,1028, - 1029,6,106,11,0,1029,229,1,0,0,0,1030,1031,3,62,23,0,1031,1032,1,0,0,0, - 1032,1033,6,107,11,0,1033,231,1,0,0,0,1034,1035,3,78,31,0,1035,1036,1,0, - 0,0,1036,1037,6,108,14,0,1037,1038,6,108,15,0,1038,233,1,0,0,0,1039,1040, - 3,112,48,0,1040,1041,1,0,0,0,1041,1042,6,109,18,0,1042,235,1,0,0,0,1043, - 1044,3,116,50,0,1044,1045,1,0,0,0,1045,1046,6,110,17,0,1046,237,1,0,0,0, - 1047,1048,3,120,52,0,1048,1049,1,0,0,0,1049,1050,6,111,21,0,1050,239,1, - 0,0,0,1051,1052,7,12,0,0,1052,1053,7,2,0,0,1053,241,1,0,0,0,1054,1055,3, - 224,104,0,1055,1056,1,0,0,0,1056,1057,6,113,22,0,1057,243,1,0,0,0,1058, - 1059,3,58,21,0,1059,1060,1,0,0,0,1060,1061,6,114,11,0,1061,245,1,0,0,0, - 1062,1063,3,60,22,0,1063,1064,1,0,0,0,1064,1065,6,115,11,0,1065,247,1,0, - 0,0,1066,1067,3,62,23,0,1067,1068,1,0,0,0,1068,1069,6,116,11,0,1069,249, - 1,0,0,0,1070,1071,3,78,31,0,1071,1072,1,0,0,0,1072,1073,6,117,14,0,1073, - 1074,6,117,15,0,1074,251,1,0,0,0,1075,1076,3,176,80,0,1076,1077,1,0,0,0, - 1077,1078,6,118,12,0,1078,1079,6,118,23,0,1079,253,1,0,0,0,1080,1081,7, - 7,0,0,1081,1082,7,9,0,0,1082,1083,1,0,0,0,1083,1084,6,119,24,0,1084,255, - 1,0,0,0,1085,1086,7,20,0,0,1086,1087,7,1,0,0,1087,1088,7,5,0,0,1088,1089, - 7,10,0,0,1089,1090,1,0,0,0,1090,1091,6,120,24,0,1091,257,1,0,0,0,1092,1093, - 8,34,0,0,1093,259,1,0,0,0,1094,1096,3,258,121,0,1095,1094,1,0,0,0,1096, - 1097,1,0,0,0,1097,1095,1,0,0,0,1097,1098,1,0,0,0,1098,1099,1,0,0,0,1099, - 1100,3,358,171,0,1100,1102,1,0,0,0,1101,1095,1,0,0,0,1101,1102,1,0,0,0, - 1102,1104,1,0,0,0,1103,1105,3,258,121,0,1104,1103,1,0,0,0,1105,1106,1,0, - 0,0,1106,1104,1,0,0,0,1106,1107,1,0,0,0,1107,261,1,0,0,0,1108,1109,3,184, - 84,0,1109,1110,1,0,0,0,1110,1111,6,123,25,0,1111,263,1,0,0,0,1112,1113, - 3,260,122,0,1113,1114,1,0,0,0,1114,1115,6,124,26,0,1115,265,1,0,0,0,1116, - 1117,3,58,21,0,1117,1118,1,0,0,0,1118,1119,6,125,11,0,1119,267,1,0,0,0, - 1120,1121,3,60,22,0,1121,1122,1,0,0,0,1122,1123,6,126,11,0,1123,269,1,0, - 0,0,1124,1125,3,62,23,0,1125,1126,1,0,0,0,1126,1127,6,127,11,0,1127,271, - 1,0,0,0,1128,1129,3,78,31,0,1129,1130,1,0,0,0,1130,1131,6,128,14,0,1131, - 1132,6,128,15,0,1132,1133,6,128,15,0,1133,273,1,0,0,0,1134,1135,3,112,48, - 0,1135,1136,1,0,0,0,1136,1137,6,129,18,0,1137,275,1,0,0,0,1138,1139,3,116, - 50,0,1139,1140,1,0,0,0,1140,1141,6,130,17,0,1141,277,1,0,0,0,1142,1143, - 3,120,52,0,1143,1144,1,0,0,0,1144,1145,6,131,21,0,1145,279,1,0,0,0,1146, - 1147,3,256,120,0,1147,1148,1,0,0,0,1148,1149,6,132,27,0,1149,281,1,0,0, - 0,1150,1151,3,224,104,0,1151,1152,1,0,0,0,1152,1153,6,133,22,0,1153,283, - 1,0,0,0,1154,1155,3,184,84,0,1155,1156,1,0,0,0,1156,1157,6,134,25,0,1157, - 285,1,0,0,0,1158,1159,3,58,21,0,1159,1160,1,0,0,0,1160,1161,6,135,11,0, - 1161,287,1,0,0,0,1162,1163,3,60,22,0,1163,1164,1,0,0,0,1164,1165,6,136, - 11,0,1165,289,1,0,0,0,1166,1167,3,62,23,0,1167,1168,1,0,0,0,1168,1169,6, - 137,11,0,1169,291,1,0,0,0,1170,1171,3,78,31,0,1171,1172,1,0,0,0,1172,1173, - 6,138,14,0,1173,1174,6,138,15,0,1174,293,1,0,0,0,1175,1176,3,116,50,0,1176, - 1177,1,0,0,0,1177,1178,6,139,17,0,1178,295,1,0,0,0,1179,1180,3,120,52,0, - 1180,1181,1,0,0,0,1181,1182,6,140,21,0,1182,297,1,0,0,0,1183,1184,3,254, - 119,0,1184,1185,1,0,0,0,1185,1186,6,141,28,0,1186,1187,6,141,29,0,1187, - 299,1,0,0,0,1188,1189,3,66,25,0,1189,1190,1,0,0,0,1190,1191,6,142,20,0, - 1191,301,1,0,0,0,1192,1193,3,58,21,0,1193,1194,1,0,0,0,1194,1195,6,143, - 11,0,1195,303,1,0,0,0,1196,1197,3,60,22,0,1197,1198,1,0,0,0,1198,1199,6, - 144,11,0,1199,305,1,0,0,0,1200,1201,3,62,23,0,1201,1202,1,0,0,0,1202,1203, - 6,145,11,0,1203,307,1,0,0,0,1204,1205,3,78,31,0,1205,1206,1,0,0,0,1206, - 1207,6,146,14,0,1207,1208,6,146,15,0,1208,1209,6,146,15,0,1209,309,1,0, - 0,0,1210,1211,3,116,50,0,1211,1212,1,0,0,0,1212,1213,6,147,17,0,1213,311, - 1,0,0,0,1214,1215,3,120,52,0,1215,1216,1,0,0,0,1216,1217,6,148,21,0,1217, - 313,1,0,0,0,1218,1219,3,224,104,0,1219,1220,1,0,0,0,1220,1221,6,149,22, - 0,1221,315,1,0,0,0,1222,1223,3,58,21,0,1223,1224,1,0,0,0,1224,1225,6,150, - 11,0,1225,317,1,0,0,0,1226,1227,3,60,22,0,1227,1228,1,0,0,0,1228,1229,6, - 151,11,0,1229,319,1,0,0,0,1230,1231,3,62,23,0,1231,1232,1,0,0,0,1232,1233, - 6,152,11,0,1233,321,1,0,0,0,1234,1235,3,78,31,0,1235,1236,1,0,0,0,1236, - 1237,6,153,14,0,1237,1238,6,153,15,0,1238,323,1,0,0,0,1239,1240,3,120,52, - 0,1240,1241,1,0,0,0,1241,1242,6,154,21,0,1242,325,1,0,0,0,1243,1244,3,184, - 84,0,1244,1245,1,0,0,0,1245,1246,6,155,25,0,1246,327,1,0,0,0,1247,1248, - 3,180,82,0,1248,1249,1,0,0,0,1249,1250,6,156,30,0,1250,329,1,0,0,0,1251, - 1252,3,58,21,0,1252,1253,1,0,0,0,1253,1254,6,157,11,0,1254,331,1,0,0,0, - 1255,1256,3,60,22,0,1256,1257,1,0,0,0,1257,1258,6,158,11,0,1258,333,1,0, - 0,0,1259,1260,3,62,23,0,1260,1261,1,0,0,0,1261,1262,6,159,11,0,1262,335, - 1,0,0,0,1263,1264,3,78,31,0,1264,1265,1,0,0,0,1265,1266,6,160,14,0,1266, - 1267,6,160,15,0,1267,337,1,0,0,0,1268,1269,7,1,0,0,1269,1270,7,9,0,0,1270, - 1271,7,15,0,0,1271,1272,7,7,0,0,1272,339,1,0,0,0,1273,1274,3,58,21,0,1274, - 1275,1,0,0,0,1275,1276,6,162,11,0,1276,341,1,0,0,0,1277,1278,3,60,22,0, - 1278,1279,1,0,0,0,1279,1280,6,163,11,0,1280,343,1,0,0,0,1281,1282,3,62, - 23,0,1282,1283,1,0,0,0,1283,1284,6,164,11,0,1284,345,1,0,0,0,1285,1286, - 3,78,31,0,1286,1287,1,0,0,0,1287,1288,6,165,14,0,1288,1289,6,165,15,0,1289, - 347,1,0,0,0,1290,1291,7,15,0,0,1291,1292,7,19,0,0,1292,1293,7,9,0,0,1293, - 1294,7,4,0,0,1294,1295,7,5,0,0,1295,1296,7,1,0,0,1296,1297,7,7,0,0,1297, - 1298,7,9,0,0,1298,1299,7,2,0,0,1299,349,1,0,0,0,1300,1301,3,58,21,0,1301, - 1302,1,0,0,0,1302,1303,6,167,11,0,1303,351,1,0,0,0,1304,1305,3,60,22,0, - 1305,1306,1,0,0,0,1306,1307,6,168,11,0,1307,353,1,0,0,0,1308,1309,3,62, - 23,0,1309,1310,1,0,0,0,1310,1311,6,169,11,0,1311,355,1,0,0,0,1312,1313, - 3,178,81,0,1313,1314,1,0,0,0,1314,1315,6,170,16,0,1315,1316,6,170,15,0, - 1316,357,1,0,0,0,1317,1318,5,58,0,0,1318,359,1,0,0,0,1319,1325,3,90,37, - 0,1320,1325,3,80,32,0,1321,1325,3,120,52,0,1322,1325,3,82,33,0,1323,1325, - 3,96,40,0,1324,1319,1,0,0,0,1324,1320,1,0,0,0,1324,1321,1,0,0,0,1324,1322, - 1,0,0,0,1324,1323,1,0,0,0,1325,1326,1,0,0,0,1326,1324,1,0,0,0,1326,1327, - 1,0,0,0,1327,361,1,0,0,0,1328,1329,3,58,21,0,1329,1330,1,0,0,0,1330,1331, - 6,173,11,0,1331,363,1,0,0,0,1332,1333,3,60,22,0,1333,1334,1,0,0,0,1334, - 1335,6,174,11,0,1335,365,1,0,0,0,1336,1337,3,62,23,0,1337,1338,1,0,0,0, - 1338,1339,6,175,11,0,1339,367,1,0,0,0,1340,1341,3,78,31,0,1341,1342,1,0, - 0,0,1342,1343,6,176,14,0,1343,1344,6,176,15,0,1344,369,1,0,0,0,1345,1346, - 3,66,25,0,1346,1347,1,0,0,0,1347,1348,6,177,20,0,1348,1349,6,177,15,0,1349, - 1350,6,177,31,0,1350,371,1,0,0,0,1351,1352,3,58,21,0,1352,1353,1,0,0,0, - 1353,1354,6,178,11,0,1354,373,1,0,0,0,1355,1356,3,60,22,0,1356,1357,1,0, - 0,0,1357,1358,6,179,11,0,1358,375,1,0,0,0,1359,1360,3,62,23,0,1360,1361, - 1,0,0,0,1361,1362,6,180,11,0,1362,377,1,0,0,0,1363,1364,3,116,50,0,1364, - 1365,1,0,0,0,1365,1366,6,181,17,0,1366,1367,6,181,15,0,1367,1368,6,181, - 7,0,1368,379,1,0,0,0,1369,1370,3,58,21,0,1370,1371,1,0,0,0,1371,1372,6, - 182,11,0,1372,381,1,0,0,0,1373,1374,3,60,22,0,1374,1375,1,0,0,0,1375,1376, - 6,183,11,0,1376,383,1,0,0,0,1377,1378,3,62,23,0,1378,1379,1,0,0,0,1379, - 1380,6,184,11,0,1380,385,1,0,0,0,1381,1382,3,184,84,0,1382,1383,1,0,0,0, - 1383,1384,6,185,15,0,1384,1385,6,185,0,0,1385,1386,6,185,25,0,1386,387, - 1,0,0,0,1387,1388,3,180,82,0,1388,1389,1,0,0,0,1389,1390,6,186,15,0,1390, - 1391,6,186,0,0,1391,1392,6,186,30,0,1392,389,1,0,0,0,1393,1394,3,106,45, - 0,1394,1395,1,0,0,0,1395,1396,6,187,15,0,1396,1397,6,187,0,0,1397,1398, - 6,187,32,0,1398,391,1,0,0,0,1399,1400,3,78,31,0,1400,1401,1,0,0,0,1401, - 1402,6,188,14,0,1402,1403,6,188,15,0,1403,393,1,0,0,0,62,0,1,2,3,4,5,6, - 7,8,9,10,11,12,13,14,15,566,576,580,583,592,594,605,612,617,656,661,670, - 677,682,684,695,703,706,708,713,718,724,731,736,742,745,753,757,890,895, - 900,902,908,993,997,1002,1007,1012,1014,1018,1020,1097,1101,1106,1324,1326, - 33,5,2,0,5,4,0,5,6,0,5,1,0,5,3,0,5,8,0,5,12,0,5,14,0,5,10,0,5,5,0,5,11, - 0,0,1,0,7,68,0,5,0,0,7,29,0,4,0,0,7,69,0,7,38,0,7,36,0,7,30,0,7,25,0,7, - 40,0,7,79,0,5,13,0,5,7,0,7,71,0,7,89,0,7,88,0,7,87,0,5,9,0,7,70,0,5,15, - 0,7,33,0]; + 2,187,7,187,2,188,7,188,2,189,7,189,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9, + 1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1, + 11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, + 1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1, + 14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,16, + 1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, + 1,20,4,20,567,8,20,11,20,12,20,568,1,20,1,20,1,21,1,21,1,21,1,21,5,21,577, + 8,21,10,21,12,21,580,9,21,1,21,3,21,583,8,21,1,21,3,21,586,8,21,1,21,1, + 21,1,22,1,22,1,22,1,22,1,22,5,22,595,8,22,10,22,12,22,598,9,22,1,22,1,22, + 1,22,1,22,1,22,1,23,4,23,606,8,23,11,23,12,23,607,1,23,1,23,1,24,1,24,1, + 24,3,24,615,8,24,1,25,4,25,618,8,25,11,25,12,25,619,1,26,1,26,1,26,1,26, + 1,26,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1, + 30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,34, + 1,35,1,35,1,36,1,36,3,36,659,8,36,1,36,4,36,662,8,36,11,36,12,36,663,1, + 37,1,37,1,38,1,38,1,39,1,39,1,39,3,39,673,8,39,1,40,1,40,1,41,1,41,1,41, + 3,41,680,8,41,1,42,1,42,1,42,5,42,685,8,42,10,42,12,42,688,9,42,1,42,1, + 42,1,42,1,42,1,42,1,42,5,42,696,8,42,10,42,12,42,699,9,42,1,42,1,42,1,42, + 1,42,1,42,3,42,706,8,42,1,42,3,42,709,8,42,3,42,711,8,42,1,43,4,43,714, + 8,43,11,43,12,43,715,1,44,4,44,719,8,44,11,44,12,44,720,1,44,1,44,5,44, + 725,8,44,10,44,12,44,728,9,44,1,44,1,44,4,44,732,8,44,11,44,12,44,733,1, + 44,4,44,737,8,44,11,44,12,44,738,1,44,1,44,5,44,743,8,44,10,44,12,44,746, + 9,44,3,44,748,8,44,1,44,1,44,1,44,1,44,4,44,754,8,44,11,44,12,44,755,1, + 44,1,44,3,44,760,8,44,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,47,1,47,1,47, + 1,47,1,48,1,48,1,49,1,49,1,49,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,1, + 52,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55, + 1,55,1,55,1,55,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,59,1, + 59,1,59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62, + 1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1, + 66,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,69,1,69,1,69,1,70,1,70,1,70, + 1,71,1,71,1,72,1,72,1,72,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,76,1,76,1, + 77,1,77,1,78,1,78,1,79,1,79,1,80,1,80,1,80,5,80,882,8,80,10,80,12,80,885, + 9,80,1,80,1,80,4,80,889,8,80,11,80,12,80,890,3,80,893,8,80,1,81,1,81,1, + 81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83,1,83,5,83,907,8,83,10,83,12, + 83,910,9,83,1,83,1,83,3,83,914,8,83,1,83,4,83,917,8,83,11,83,12,83,918, + 3,83,921,8,83,1,84,1,84,4,84,925,8,84,11,84,12,84,926,1,84,1,84,1,85,1, + 85,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,89,1,89, + 1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1, + 92,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95, + 1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1, + 98,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101, + 1,101,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103,3,103,1012,8,103, + 1,104,1,104,3,104,1016,8,104,1,104,5,104,1019,8,104,10,104,12,104,1022, + 9,104,1,104,1,104,3,104,1026,8,104,1,104,4,104,1029,8,104,11,104,12,104, + 1030,3,104,1033,8,104,1,105,1,105,4,105,1037,8,105,11,105,12,105,1038,1, + 106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1, + 109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,111,1,111,1,111,1, + 111,1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,114,1,114,1,114,1,114,1, + 115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1, + 118,1,118,1,118,1,118,1,118,1,119,1,119,1,119,1,119,1,119,1,120,1,120,1, + 120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1, + 123,4,123,1114,8,123,11,123,12,123,1115,1,123,1,123,3,123,1120,8,123,1, + 123,4,123,1123,8,123,11,123,12,123,1124,1,124,1,124,1,124,1,124,1,125,1, + 125,1,125,1,125,1,126,1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,128,1, + 128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,130,1,130,1,130,1, + 130,1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132,1,133,1,133,1,133,1, + 133,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,136,1,136,1,136,1, + 136,1,137,1,137,1,137,1,137,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1, + 139,1,139,1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,141,1,142,1,142,1, + 142,1,142,1,142,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,145,1, + 145,1,145,1,145,1,146,1,146,1,146,1,146,1,147,1,147,1,147,1,147,1,147,1, + 147,1,148,1,148,1,148,1,148,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1, + 150,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,153,1,153,1,153,1, + 153,1,154,1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,155,1,156,1,156,1, + 156,1,156,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,159,1,159,1, + 159,1,159,1,160,1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,162,1, + 162,1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1, + 165,1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,167,1,167,1,167,1, + 167,1,167,1,167,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,169,1, + 169,1,169,1,169,1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,171,1, + 172,1,172,1,173,1,173,1,173,1,173,1,173,4,173,1343,8,173,11,173,12,173, + 1344,1,174,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,176,1,176,1,176, + 1,176,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178,1,178,1,178, + 1,179,1,179,1,179,1,179,1,180,1,180,1,180,1,180,1,181,1,181,1,181,1,181, + 1,182,1,182,1,182,1,182,1,182,1,182,1,183,1,183,1,183,1,183,1,184,1,184, + 1,184,1,184,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1,186,1,186,1,186, + 1,187,1,187,1,187,1,187,1,187,1,187,1,188,1,188,1,188,1,188,1,188,1,188, + 1,189,1,189,1,189,1,189,1,189,2,596,697,0,190,16,1,18,2,20,3,22,4,24,5, + 26,6,28,7,30,8,32,9,34,10,36,11,38,12,40,13,42,14,44,15,46,16,48,17,50, + 18,52,19,54,20,56,21,58,22,60,23,62,24,64,0,66,25,68,0,70,0,72,26,74,27, + 76,28,78,29,80,0,82,0,84,0,86,0,88,0,90,0,92,0,94,0,96,0,98,0,100,30,102, + 31,104,32,106,33,108,34,110,35,112,36,114,37,116,38,118,39,120,40,122,41, + 124,42,126,43,128,44,130,45,132,46,134,47,136,48,138,49,140,50,142,51,144, + 52,146,53,148,54,150,55,152,56,154,57,156,58,158,59,160,60,162,61,164,62, + 166,63,168,64,170,65,172,66,174,67,176,68,178,69,180,70,182,71,184,0,186, + 72,188,73,190,74,192,75,194,0,196,0,198,0,200,0,202,0,204,0,206,76,208, + 0,210,77,212,78,214,79,216,0,218,0,220,0,222,0,224,0,226,80,228,81,230, + 82,232,83,234,0,236,0,238,0,240,0,242,84,244,0,246,85,248,86,250,87,252, + 0,254,0,256,88,258,89,260,0,262,90,264,0,266,0,268,91,270,92,272,93,274, + 0,276,0,278,0,280,0,282,0,284,0,286,0,288,94,290,95,292,96,294,0,296,0, + 298,0,300,0,302,0,304,97,306,98,308,99,310,0,312,0,314,0,316,0,318,100, + 320,101,322,102,324,0,326,0,328,0,330,0,332,103,334,104,336,105,338,0,340, + 106,342,107,344,108,346,109,348,0,350,110,352,111,354,112,356,113,358,0, + 360,114,362,115,364,116,366,117,368,118,370,0,372,0,374,119,376,120,378, + 121,380,0,382,122,384,123,386,124,388,0,390,0,392,0,394,0,16,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14,15,35,2,0,68,68,100,100,2,0,73,73,105,105,2,0, + 83,83,115,115,2,0,69,69,101,101,2,0,67,67,99,99,2,0,84,84,116,116,2,0,82, + 82,114,114,2,0,79,79,111,111,2,0,80,80,112,112,2,0,78,78,110,110,2,0,72, + 72,104,104,2,0,86,86,118,118,2,0,65,65,97,97,2,0,76,76,108,108,2,0,88,88, + 120,120,2,0,70,70,102,102,2,0,77,77,109,109,2,0,71,71,103,103,2,0,75,75, + 107,107,2,0,85,85,117,117,2,0,87,87,119,119,6,0,9,10,13,13,32,32,47,47, + 91,91,93,93,2,0,10,10,13,13,3,0,9,10,13,13,32,32,10,0,9,10,13,13,32,32, + 44,44,47,47,61,61,91,91,93,93,96,96,124,124,2,0,42,42,47,47,1,0,48,57,2, + 0,65,90,97,122,8,0,34,34,78,78,82,82,84,84,92,92,110,110,114,114,116,116, + 4,0,10,10,13,13,34,34,92,92,2,0,43,43,45,45,1,0,96,96,2,0,66,66,98,98,2, + 0,89,89,121,121,11,0,9,10,13,13,32,32,34,35,44,44,47,47,58,58,60,60,62, + 63,92,92,124,124,1448,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0, + 0,0,24,1,0,0,0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34, + 1,0,0,0,0,36,1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0, + 0,0,46,1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,0,56, + 1,0,0,0,0,58,1,0,0,0,0,60,1,0,0,0,0,62,1,0,0,0,0,66,1,0,0,0,1,68,1,0,0, + 0,1,70,1,0,0,0,1,72,1,0,0,0,1,74,1,0,0,0,1,76,1,0,0,0,2,78,1,0,0,0,2,100, + 1,0,0,0,2,102,1,0,0,0,2,104,1,0,0,0,2,106,1,0,0,0,2,108,1,0,0,0,2,110,1, + 0,0,0,2,112,1,0,0,0,2,114,1,0,0,0,2,116,1,0,0,0,2,118,1,0,0,0,2,120,1,0, + 0,0,2,122,1,0,0,0,2,124,1,0,0,0,2,126,1,0,0,0,2,128,1,0,0,0,2,130,1,0,0, + 0,2,132,1,0,0,0,2,134,1,0,0,0,2,136,1,0,0,0,2,138,1,0,0,0,2,140,1,0,0,0, + 2,142,1,0,0,0,2,144,1,0,0,0,2,146,1,0,0,0,2,148,1,0,0,0,2,150,1,0,0,0,2, + 152,1,0,0,0,2,154,1,0,0,0,2,156,1,0,0,0,2,158,1,0,0,0,2,160,1,0,0,0,2,162, + 1,0,0,0,2,164,1,0,0,0,2,166,1,0,0,0,2,168,1,0,0,0,2,170,1,0,0,0,2,172,1, + 0,0,0,2,174,1,0,0,0,2,176,1,0,0,0,2,178,1,0,0,0,2,180,1,0,0,0,2,182,1,0, + 0,0,2,186,1,0,0,0,2,188,1,0,0,0,2,190,1,0,0,0,2,192,1,0,0,0,3,194,1,0,0, + 0,3,196,1,0,0,0,3,198,1,0,0,0,3,200,1,0,0,0,3,202,1,0,0,0,3,204,1,0,0,0, + 3,206,1,0,0,0,3,208,1,0,0,0,3,210,1,0,0,0,3,212,1,0,0,0,3,214,1,0,0,0,4, + 216,1,0,0,0,4,218,1,0,0,0,4,220,1,0,0,0,4,226,1,0,0,0,4,228,1,0,0,0,4,230, + 1,0,0,0,4,232,1,0,0,0,5,234,1,0,0,0,5,236,1,0,0,0,5,238,1,0,0,0,5,240,1, + 0,0,0,5,242,1,0,0,0,5,244,1,0,0,0,5,246,1,0,0,0,5,248,1,0,0,0,5,250,1,0, + 0,0,6,252,1,0,0,0,6,254,1,0,0,0,6,256,1,0,0,0,6,258,1,0,0,0,6,262,1,0,0, + 0,6,264,1,0,0,0,6,266,1,0,0,0,6,268,1,0,0,0,6,270,1,0,0,0,6,272,1,0,0,0, + 7,274,1,0,0,0,7,276,1,0,0,0,7,278,1,0,0,0,7,280,1,0,0,0,7,282,1,0,0,0,7, + 284,1,0,0,0,7,286,1,0,0,0,7,288,1,0,0,0,7,290,1,0,0,0,7,292,1,0,0,0,8,294, + 1,0,0,0,8,296,1,0,0,0,8,298,1,0,0,0,8,300,1,0,0,0,8,302,1,0,0,0,8,304,1, + 0,0,0,8,306,1,0,0,0,8,308,1,0,0,0,9,310,1,0,0,0,9,312,1,0,0,0,9,314,1,0, + 0,0,9,316,1,0,0,0,9,318,1,0,0,0,9,320,1,0,0,0,9,322,1,0,0,0,10,324,1,0, + 0,0,10,326,1,0,0,0,10,328,1,0,0,0,10,330,1,0,0,0,10,332,1,0,0,0,10,334, + 1,0,0,0,10,336,1,0,0,0,11,338,1,0,0,0,11,340,1,0,0,0,11,342,1,0,0,0,11, + 344,1,0,0,0,11,346,1,0,0,0,12,348,1,0,0,0,12,350,1,0,0,0,12,352,1,0,0,0, + 12,354,1,0,0,0,12,356,1,0,0,0,13,358,1,0,0,0,13,360,1,0,0,0,13,362,1,0, + 0,0,13,364,1,0,0,0,13,366,1,0,0,0,13,368,1,0,0,0,14,370,1,0,0,0,14,372, + 1,0,0,0,14,374,1,0,0,0,14,376,1,0,0,0,14,378,1,0,0,0,15,380,1,0,0,0,15, + 382,1,0,0,0,15,384,1,0,0,0,15,386,1,0,0,0,15,388,1,0,0,0,15,390,1,0,0,0, + 15,392,1,0,0,0,15,394,1,0,0,0,16,396,1,0,0,0,18,406,1,0,0,0,20,413,1,0, + 0,0,22,422,1,0,0,0,24,429,1,0,0,0,26,439,1,0,0,0,28,446,1,0,0,0,30,453, + 1,0,0,0,32,467,1,0,0,0,34,474,1,0,0,0,36,482,1,0,0,0,38,491,1,0,0,0,40, + 498,1,0,0,0,42,508,1,0,0,0,44,520,1,0,0,0,46,529,1,0,0,0,48,535,1,0,0,0, + 50,542,1,0,0,0,52,549,1,0,0,0,54,557,1,0,0,0,56,566,1,0,0,0,58,572,1,0, + 0,0,60,589,1,0,0,0,62,605,1,0,0,0,64,614,1,0,0,0,66,617,1,0,0,0,68,621, + 1,0,0,0,70,626,1,0,0,0,72,631,1,0,0,0,74,635,1,0,0,0,76,639,1,0,0,0,78, + 643,1,0,0,0,80,647,1,0,0,0,82,649,1,0,0,0,84,651,1,0,0,0,86,654,1,0,0,0, + 88,656,1,0,0,0,90,665,1,0,0,0,92,667,1,0,0,0,94,672,1,0,0,0,96,674,1,0, + 0,0,98,679,1,0,0,0,100,710,1,0,0,0,102,713,1,0,0,0,104,759,1,0,0,0,106, + 761,1,0,0,0,108,764,1,0,0,0,110,768,1,0,0,0,112,772,1,0,0,0,114,774,1,0, + 0,0,116,777,1,0,0,0,118,779,1,0,0,0,120,784,1,0,0,0,122,786,1,0,0,0,124, + 792,1,0,0,0,126,798,1,0,0,0,128,803,1,0,0,0,130,805,1,0,0,0,132,808,1,0, + 0,0,134,811,1,0,0,0,136,816,1,0,0,0,138,820,1,0,0,0,140,825,1,0,0,0,142, + 831,1,0,0,0,144,834,1,0,0,0,146,836,1,0,0,0,148,842,1,0,0,0,150,844,1,0, + 0,0,152,849,1,0,0,0,154,852,1,0,0,0,156,855,1,0,0,0,158,858,1,0,0,0,160, + 860,1,0,0,0,162,863,1,0,0,0,164,865,1,0,0,0,166,868,1,0,0,0,168,870,1,0, + 0,0,170,872,1,0,0,0,172,874,1,0,0,0,174,876,1,0,0,0,176,892,1,0,0,0,178, + 894,1,0,0,0,180,899,1,0,0,0,182,920,1,0,0,0,184,922,1,0,0,0,186,930,1,0, + 0,0,188,932,1,0,0,0,190,936,1,0,0,0,192,940,1,0,0,0,194,944,1,0,0,0,196, + 949,1,0,0,0,198,953,1,0,0,0,200,957,1,0,0,0,202,961,1,0,0,0,204,965,1,0, + 0,0,206,969,1,0,0,0,208,978,1,0,0,0,210,982,1,0,0,0,212,986,1,0,0,0,214, + 990,1,0,0,0,216,994,1,0,0,0,218,999,1,0,0,0,220,1003,1,0,0,0,222,1011,1, + 0,0,0,224,1032,1,0,0,0,226,1036,1,0,0,0,228,1040,1,0,0,0,230,1044,1,0,0, + 0,232,1048,1,0,0,0,234,1052,1,0,0,0,236,1057,1,0,0,0,238,1061,1,0,0,0,240, + 1065,1,0,0,0,242,1069,1,0,0,0,244,1072,1,0,0,0,246,1076,1,0,0,0,248,1080, + 1,0,0,0,250,1084,1,0,0,0,252,1088,1,0,0,0,254,1093,1,0,0,0,256,1098,1,0, + 0,0,258,1103,1,0,0,0,260,1110,1,0,0,0,262,1119,1,0,0,0,264,1126,1,0,0,0, + 266,1130,1,0,0,0,268,1134,1,0,0,0,270,1138,1,0,0,0,272,1142,1,0,0,0,274, + 1146,1,0,0,0,276,1152,1,0,0,0,278,1156,1,0,0,0,280,1160,1,0,0,0,282,1164, + 1,0,0,0,284,1168,1,0,0,0,286,1172,1,0,0,0,288,1176,1,0,0,0,290,1180,1,0, + 0,0,292,1184,1,0,0,0,294,1188,1,0,0,0,296,1193,1,0,0,0,298,1197,1,0,0,0, + 300,1201,1,0,0,0,302,1206,1,0,0,0,304,1210,1,0,0,0,306,1214,1,0,0,0,308, + 1218,1,0,0,0,310,1222,1,0,0,0,312,1228,1,0,0,0,314,1232,1,0,0,0,316,1236, + 1,0,0,0,318,1240,1,0,0,0,320,1244,1,0,0,0,322,1248,1,0,0,0,324,1252,1,0, + 0,0,326,1257,1,0,0,0,328,1261,1,0,0,0,330,1265,1,0,0,0,332,1269,1,0,0,0, + 334,1273,1,0,0,0,336,1277,1,0,0,0,338,1281,1,0,0,0,340,1286,1,0,0,0,342, + 1291,1,0,0,0,344,1295,1,0,0,0,346,1299,1,0,0,0,348,1303,1,0,0,0,350,1308, + 1,0,0,0,352,1318,1,0,0,0,354,1322,1,0,0,0,356,1326,1,0,0,0,358,1330,1,0, + 0,0,360,1335,1,0,0,0,362,1342,1,0,0,0,364,1346,1,0,0,0,366,1350,1,0,0,0, + 368,1354,1,0,0,0,370,1358,1,0,0,0,372,1363,1,0,0,0,374,1369,1,0,0,0,376, + 1373,1,0,0,0,378,1377,1,0,0,0,380,1381,1,0,0,0,382,1387,1,0,0,0,384,1391, + 1,0,0,0,386,1395,1,0,0,0,388,1399,1,0,0,0,390,1405,1,0,0,0,392,1411,1,0, + 0,0,394,1417,1,0,0,0,396,397,7,0,0,0,397,398,7,1,0,0,398,399,7,2,0,0,399, + 400,7,2,0,0,400,401,7,3,0,0,401,402,7,4,0,0,402,403,7,5,0,0,403,404,1,0, + 0,0,404,405,6,0,0,0,405,17,1,0,0,0,406,407,7,0,0,0,407,408,7,6,0,0,408, + 409,7,7,0,0,409,410,7,8,0,0,410,411,1,0,0,0,411,412,6,1,1,0,412,19,1,0, + 0,0,413,414,7,3,0,0,414,415,7,9,0,0,415,416,7,6,0,0,416,417,7,1,0,0,417, + 418,7,4,0,0,418,419,7,10,0,0,419,420,1,0,0,0,420,421,6,2,2,0,421,21,1,0, + 0,0,422,423,7,3,0,0,423,424,7,11,0,0,424,425,7,12,0,0,425,426,7,13,0,0, + 426,427,1,0,0,0,427,428,6,3,0,0,428,23,1,0,0,0,429,430,7,3,0,0,430,431, + 7,14,0,0,431,432,7,8,0,0,432,433,7,13,0,0,433,434,7,12,0,0,434,435,7,1, + 0,0,435,436,7,9,0,0,436,437,1,0,0,0,437,438,6,4,3,0,438,25,1,0,0,0,439, + 440,7,15,0,0,440,441,7,6,0,0,441,442,7,7,0,0,442,443,7,16,0,0,443,444,1, + 0,0,0,444,445,6,5,4,0,445,27,1,0,0,0,446,447,7,17,0,0,447,448,7,6,0,0,448, + 449,7,7,0,0,449,450,7,18,0,0,450,451,1,0,0,0,451,452,6,6,0,0,452,29,1,0, + 0,0,453,454,7,1,0,0,454,455,7,9,0,0,455,456,7,13,0,0,456,457,7,1,0,0,457, + 458,7,9,0,0,458,459,7,3,0,0,459,460,7,2,0,0,460,461,7,5,0,0,461,462,7,12, + 0,0,462,463,7,5,0,0,463,464,7,2,0,0,464,465,1,0,0,0,465,466,6,7,0,0,466, + 31,1,0,0,0,467,468,7,18,0,0,468,469,7,3,0,0,469,470,7,3,0,0,470,471,7,8, + 0,0,471,472,1,0,0,0,472,473,6,8,1,0,473,33,1,0,0,0,474,475,7,13,0,0,475, + 476,7,1,0,0,476,477,7,16,0,0,477,478,7,1,0,0,478,479,7,5,0,0,479,480,1, + 0,0,0,480,481,6,9,0,0,481,35,1,0,0,0,482,483,7,13,0,0,483,484,7,7,0,0,484, + 485,7,7,0,0,485,486,7,18,0,0,486,487,7,19,0,0,487,488,7,8,0,0,488,489,1, + 0,0,0,489,490,6,10,5,0,490,37,1,0,0,0,491,492,7,16,0,0,492,493,7,3,0,0, + 493,494,7,5,0,0,494,495,7,12,0,0,495,496,1,0,0,0,496,497,6,11,6,0,497,39, + 1,0,0,0,498,499,7,16,0,0,499,500,7,3,0,0,500,501,7,5,0,0,501,502,7,6,0, + 0,502,503,7,1,0,0,503,504,7,4,0,0,504,505,7,2,0,0,505,506,1,0,0,0,506,507, + 6,12,7,0,507,41,1,0,0,0,508,509,7,16,0,0,509,510,7,11,0,0,510,511,5,95, + 0,0,511,512,7,3,0,0,512,513,7,14,0,0,513,514,7,8,0,0,514,515,7,12,0,0,515, + 516,7,9,0,0,516,517,7,0,0,0,517,518,1,0,0,0,518,519,6,13,8,0,519,43,1,0, + 0,0,520,521,7,6,0,0,521,522,7,3,0,0,522,523,7,9,0,0,523,524,7,12,0,0,524, + 525,7,16,0,0,525,526,7,3,0,0,526,527,1,0,0,0,527,528,6,14,9,0,528,45,1, + 0,0,0,529,530,7,6,0,0,530,531,7,7,0,0,531,532,7,20,0,0,532,533,1,0,0,0, + 533,534,6,15,0,0,534,47,1,0,0,0,535,536,7,2,0,0,536,537,7,10,0,0,537,538, + 7,7,0,0,538,539,7,20,0,0,539,540,1,0,0,0,540,541,6,16,10,0,541,49,1,0,0, + 0,542,543,7,2,0,0,543,544,7,7,0,0,544,545,7,6,0,0,545,546,7,5,0,0,546,547, + 1,0,0,0,547,548,6,17,0,0,548,51,1,0,0,0,549,550,7,2,0,0,550,551,7,5,0,0, + 551,552,7,12,0,0,552,553,7,5,0,0,553,554,7,2,0,0,554,555,1,0,0,0,555,556, + 6,18,0,0,556,53,1,0,0,0,557,558,7,20,0,0,558,559,7,10,0,0,559,560,7,3,0, + 0,560,561,7,6,0,0,561,562,7,3,0,0,562,563,1,0,0,0,563,564,6,19,0,0,564, + 55,1,0,0,0,565,567,8,21,0,0,566,565,1,0,0,0,567,568,1,0,0,0,568,566,1,0, + 0,0,568,569,1,0,0,0,569,570,1,0,0,0,570,571,6,20,0,0,571,57,1,0,0,0,572, + 573,5,47,0,0,573,574,5,47,0,0,574,578,1,0,0,0,575,577,8,22,0,0,576,575, + 1,0,0,0,577,580,1,0,0,0,578,576,1,0,0,0,578,579,1,0,0,0,579,582,1,0,0,0, + 580,578,1,0,0,0,581,583,5,13,0,0,582,581,1,0,0,0,582,583,1,0,0,0,583,585, + 1,0,0,0,584,586,5,10,0,0,585,584,1,0,0,0,585,586,1,0,0,0,586,587,1,0,0, + 0,587,588,6,21,11,0,588,59,1,0,0,0,589,590,5,47,0,0,590,591,5,42,0,0,591, + 596,1,0,0,0,592,595,3,60,22,0,593,595,9,0,0,0,594,592,1,0,0,0,594,593,1, + 0,0,0,595,598,1,0,0,0,596,597,1,0,0,0,596,594,1,0,0,0,597,599,1,0,0,0,598, + 596,1,0,0,0,599,600,5,42,0,0,600,601,5,47,0,0,601,602,1,0,0,0,602,603,6, + 22,11,0,603,61,1,0,0,0,604,606,7,23,0,0,605,604,1,0,0,0,606,607,1,0,0,0, + 607,605,1,0,0,0,607,608,1,0,0,0,608,609,1,0,0,0,609,610,6,23,11,0,610,63, + 1,0,0,0,611,615,8,24,0,0,612,613,5,47,0,0,613,615,8,25,0,0,614,611,1,0, + 0,0,614,612,1,0,0,0,615,65,1,0,0,0,616,618,3,64,24,0,617,616,1,0,0,0,618, + 619,1,0,0,0,619,617,1,0,0,0,619,620,1,0,0,0,620,67,1,0,0,0,621,622,3,178, + 81,0,622,623,1,0,0,0,623,624,6,26,12,0,624,625,6,26,13,0,625,69,1,0,0,0, + 626,627,3,78,31,0,627,628,1,0,0,0,628,629,6,27,14,0,629,630,6,27,15,0,630, + 71,1,0,0,0,631,632,3,62,23,0,632,633,1,0,0,0,633,634,6,28,11,0,634,73,1, + 0,0,0,635,636,3,58,21,0,636,637,1,0,0,0,637,638,6,29,11,0,638,75,1,0,0, + 0,639,640,3,60,22,0,640,641,1,0,0,0,641,642,6,30,11,0,642,77,1,0,0,0,643, + 644,5,124,0,0,644,645,1,0,0,0,645,646,6,31,15,0,646,79,1,0,0,0,647,648, + 7,26,0,0,648,81,1,0,0,0,649,650,7,27,0,0,650,83,1,0,0,0,651,652,5,92,0, + 0,652,653,7,28,0,0,653,85,1,0,0,0,654,655,8,29,0,0,655,87,1,0,0,0,656,658, + 7,3,0,0,657,659,7,30,0,0,658,657,1,0,0,0,658,659,1,0,0,0,659,661,1,0,0, + 0,660,662,3,80,32,0,661,660,1,0,0,0,662,663,1,0,0,0,663,661,1,0,0,0,663, + 664,1,0,0,0,664,89,1,0,0,0,665,666,5,64,0,0,666,91,1,0,0,0,667,668,5,96, + 0,0,668,93,1,0,0,0,669,673,8,31,0,0,670,671,5,96,0,0,671,673,5,96,0,0,672, + 669,1,0,0,0,672,670,1,0,0,0,673,95,1,0,0,0,674,675,5,95,0,0,675,97,1,0, + 0,0,676,680,3,82,33,0,677,680,3,80,32,0,678,680,3,96,40,0,679,676,1,0,0, + 0,679,677,1,0,0,0,679,678,1,0,0,0,680,99,1,0,0,0,681,686,5,34,0,0,682,685, + 3,84,34,0,683,685,3,86,35,0,684,682,1,0,0,0,684,683,1,0,0,0,685,688,1,0, + 0,0,686,684,1,0,0,0,686,687,1,0,0,0,687,689,1,0,0,0,688,686,1,0,0,0,689, + 711,5,34,0,0,690,691,5,34,0,0,691,692,5,34,0,0,692,693,5,34,0,0,693,697, + 1,0,0,0,694,696,8,22,0,0,695,694,1,0,0,0,696,699,1,0,0,0,697,698,1,0,0, + 0,697,695,1,0,0,0,698,700,1,0,0,0,699,697,1,0,0,0,700,701,5,34,0,0,701, + 702,5,34,0,0,702,703,5,34,0,0,703,705,1,0,0,0,704,706,5,34,0,0,705,704, + 1,0,0,0,705,706,1,0,0,0,706,708,1,0,0,0,707,709,5,34,0,0,708,707,1,0,0, + 0,708,709,1,0,0,0,709,711,1,0,0,0,710,681,1,0,0,0,710,690,1,0,0,0,711,101, + 1,0,0,0,712,714,3,80,32,0,713,712,1,0,0,0,714,715,1,0,0,0,715,713,1,0,0, + 0,715,716,1,0,0,0,716,103,1,0,0,0,717,719,3,80,32,0,718,717,1,0,0,0,719, + 720,1,0,0,0,720,718,1,0,0,0,720,721,1,0,0,0,721,722,1,0,0,0,722,726,3,120, + 52,0,723,725,3,80,32,0,724,723,1,0,0,0,725,728,1,0,0,0,726,724,1,0,0,0, + 726,727,1,0,0,0,727,760,1,0,0,0,728,726,1,0,0,0,729,731,3,120,52,0,730, + 732,3,80,32,0,731,730,1,0,0,0,732,733,1,0,0,0,733,731,1,0,0,0,733,734,1, + 0,0,0,734,760,1,0,0,0,735,737,3,80,32,0,736,735,1,0,0,0,737,738,1,0,0,0, + 738,736,1,0,0,0,738,739,1,0,0,0,739,747,1,0,0,0,740,744,3,120,52,0,741, + 743,3,80,32,0,742,741,1,0,0,0,743,746,1,0,0,0,744,742,1,0,0,0,744,745,1, + 0,0,0,745,748,1,0,0,0,746,744,1,0,0,0,747,740,1,0,0,0,747,748,1,0,0,0,748, + 749,1,0,0,0,749,750,3,88,36,0,750,760,1,0,0,0,751,753,3,120,52,0,752,754, + 3,80,32,0,753,752,1,0,0,0,754,755,1,0,0,0,755,753,1,0,0,0,755,756,1,0,0, + 0,756,757,1,0,0,0,757,758,3,88,36,0,758,760,1,0,0,0,759,718,1,0,0,0,759, + 729,1,0,0,0,759,736,1,0,0,0,759,751,1,0,0,0,760,105,1,0,0,0,761,762,7,32, + 0,0,762,763,7,33,0,0,763,107,1,0,0,0,764,765,7,12,0,0,765,766,7,9,0,0,766, + 767,7,0,0,0,767,109,1,0,0,0,768,769,7,12,0,0,769,770,7,2,0,0,770,771,7, + 4,0,0,771,111,1,0,0,0,772,773,5,61,0,0,773,113,1,0,0,0,774,775,5,58,0,0, + 775,776,5,58,0,0,776,115,1,0,0,0,777,778,5,44,0,0,778,117,1,0,0,0,779,780, + 7,0,0,0,780,781,7,3,0,0,781,782,7,2,0,0,782,783,7,4,0,0,783,119,1,0,0,0, + 784,785,5,46,0,0,785,121,1,0,0,0,786,787,7,15,0,0,787,788,7,12,0,0,788, + 789,7,13,0,0,789,790,7,2,0,0,790,791,7,3,0,0,791,123,1,0,0,0,792,793,7, + 15,0,0,793,794,7,1,0,0,794,795,7,6,0,0,795,796,7,2,0,0,796,797,7,5,0,0, + 797,125,1,0,0,0,798,799,7,13,0,0,799,800,7,12,0,0,800,801,7,2,0,0,801,802, + 7,5,0,0,802,127,1,0,0,0,803,804,5,40,0,0,804,129,1,0,0,0,805,806,7,1,0, + 0,806,807,7,9,0,0,807,131,1,0,0,0,808,809,7,1,0,0,809,810,7,2,0,0,810,133, + 1,0,0,0,811,812,7,13,0,0,812,813,7,1,0,0,813,814,7,18,0,0,814,815,7,3,0, + 0,815,135,1,0,0,0,816,817,7,9,0,0,817,818,7,7,0,0,818,819,7,5,0,0,819,137, + 1,0,0,0,820,821,7,9,0,0,821,822,7,19,0,0,822,823,7,13,0,0,823,824,7,13, + 0,0,824,139,1,0,0,0,825,826,7,9,0,0,826,827,7,19,0,0,827,828,7,13,0,0,828, + 829,7,13,0,0,829,830,7,2,0,0,830,141,1,0,0,0,831,832,7,7,0,0,832,833,7, + 6,0,0,833,143,1,0,0,0,834,835,5,63,0,0,835,145,1,0,0,0,836,837,7,6,0,0, + 837,838,7,13,0,0,838,839,7,1,0,0,839,840,7,18,0,0,840,841,7,3,0,0,841,147, + 1,0,0,0,842,843,5,41,0,0,843,149,1,0,0,0,844,845,7,5,0,0,845,846,7,6,0, + 0,846,847,7,19,0,0,847,848,7,3,0,0,848,151,1,0,0,0,849,850,5,61,0,0,850, + 851,5,61,0,0,851,153,1,0,0,0,852,853,5,61,0,0,853,854,5,126,0,0,854,155, + 1,0,0,0,855,856,5,33,0,0,856,857,5,61,0,0,857,157,1,0,0,0,858,859,5,60, + 0,0,859,159,1,0,0,0,860,861,5,60,0,0,861,862,5,61,0,0,862,161,1,0,0,0,863, + 864,5,62,0,0,864,163,1,0,0,0,865,866,5,62,0,0,866,867,5,61,0,0,867,165, + 1,0,0,0,868,869,5,43,0,0,869,167,1,0,0,0,870,871,5,45,0,0,871,169,1,0,0, + 0,872,873,5,42,0,0,873,171,1,0,0,0,874,875,5,47,0,0,875,173,1,0,0,0,876, + 877,5,37,0,0,877,175,1,0,0,0,878,879,3,144,64,0,879,883,3,82,33,0,880,882, + 3,98,41,0,881,880,1,0,0,0,882,885,1,0,0,0,883,881,1,0,0,0,883,884,1,0,0, + 0,884,893,1,0,0,0,885,883,1,0,0,0,886,888,3,144,64,0,887,889,3,80,32,0, + 888,887,1,0,0,0,889,890,1,0,0,0,890,888,1,0,0,0,890,891,1,0,0,0,891,893, + 1,0,0,0,892,878,1,0,0,0,892,886,1,0,0,0,893,177,1,0,0,0,894,895,5,91,0, + 0,895,896,1,0,0,0,896,897,6,81,0,0,897,898,6,81,0,0,898,179,1,0,0,0,899, + 900,5,93,0,0,900,901,1,0,0,0,901,902,6,82,15,0,902,903,6,82,15,0,903,181, + 1,0,0,0,904,908,3,82,33,0,905,907,3,98,41,0,906,905,1,0,0,0,907,910,1,0, + 0,0,908,906,1,0,0,0,908,909,1,0,0,0,909,921,1,0,0,0,910,908,1,0,0,0,911, + 914,3,96,40,0,912,914,3,90,37,0,913,911,1,0,0,0,913,912,1,0,0,0,914,916, + 1,0,0,0,915,917,3,98,41,0,916,915,1,0,0,0,917,918,1,0,0,0,918,916,1,0,0, + 0,918,919,1,0,0,0,919,921,1,0,0,0,920,904,1,0,0,0,920,913,1,0,0,0,921,183, + 1,0,0,0,922,924,3,92,38,0,923,925,3,94,39,0,924,923,1,0,0,0,925,926,1,0, + 0,0,926,924,1,0,0,0,926,927,1,0,0,0,927,928,1,0,0,0,928,929,3,92,38,0,929, + 185,1,0,0,0,930,931,3,184,84,0,931,187,1,0,0,0,932,933,3,58,21,0,933,934, + 1,0,0,0,934,935,6,86,11,0,935,189,1,0,0,0,936,937,3,60,22,0,937,938,1,0, + 0,0,938,939,6,87,11,0,939,191,1,0,0,0,940,941,3,62,23,0,941,942,1,0,0,0, + 942,943,6,88,11,0,943,193,1,0,0,0,944,945,3,78,31,0,945,946,1,0,0,0,946, + 947,6,89,14,0,947,948,6,89,15,0,948,195,1,0,0,0,949,950,3,178,81,0,950, + 951,1,0,0,0,951,952,6,90,12,0,952,197,1,0,0,0,953,954,3,180,82,0,954,955, + 1,0,0,0,955,956,6,91,16,0,956,199,1,0,0,0,957,958,3,116,50,0,958,959,1, + 0,0,0,959,960,6,92,17,0,960,201,1,0,0,0,961,962,3,112,48,0,962,963,1,0, + 0,0,963,964,6,93,18,0,964,203,1,0,0,0,965,966,3,100,42,0,966,967,1,0,0, + 0,967,968,6,94,19,0,968,205,1,0,0,0,969,970,7,16,0,0,970,971,7,3,0,0,971, + 972,7,5,0,0,972,973,7,12,0,0,973,974,7,0,0,0,974,975,7,12,0,0,975,976,7, + 5,0,0,976,977,7,12,0,0,977,207,1,0,0,0,978,979,3,66,25,0,979,980,1,0,0, + 0,980,981,6,96,20,0,981,209,1,0,0,0,982,983,3,58,21,0,983,984,1,0,0,0,984, + 985,6,97,11,0,985,211,1,0,0,0,986,987,3,60,22,0,987,988,1,0,0,0,988,989, + 6,98,11,0,989,213,1,0,0,0,990,991,3,62,23,0,991,992,1,0,0,0,992,993,6,99, + 11,0,993,215,1,0,0,0,994,995,3,78,31,0,995,996,1,0,0,0,996,997,6,100,14, + 0,997,998,6,100,15,0,998,217,1,0,0,0,999,1000,3,120,52,0,1000,1001,1,0, + 0,0,1001,1002,6,101,21,0,1002,219,1,0,0,0,1003,1004,3,116,50,0,1004,1005, + 1,0,0,0,1005,1006,6,102,17,0,1006,221,1,0,0,0,1007,1012,3,82,33,0,1008, + 1012,3,80,32,0,1009,1012,3,96,40,0,1010,1012,3,170,77,0,1011,1007,1,0,0, + 0,1011,1008,1,0,0,0,1011,1009,1,0,0,0,1011,1010,1,0,0,0,1012,223,1,0,0, + 0,1013,1016,3,82,33,0,1014,1016,3,170,77,0,1015,1013,1,0,0,0,1015,1014, + 1,0,0,0,1016,1020,1,0,0,0,1017,1019,3,222,103,0,1018,1017,1,0,0,0,1019, + 1022,1,0,0,0,1020,1018,1,0,0,0,1020,1021,1,0,0,0,1021,1033,1,0,0,0,1022, + 1020,1,0,0,0,1023,1026,3,96,40,0,1024,1026,3,90,37,0,1025,1023,1,0,0,0, + 1025,1024,1,0,0,0,1026,1028,1,0,0,0,1027,1029,3,222,103,0,1028,1027,1,0, + 0,0,1029,1030,1,0,0,0,1030,1028,1,0,0,0,1030,1031,1,0,0,0,1031,1033,1,0, + 0,0,1032,1015,1,0,0,0,1032,1025,1,0,0,0,1033,225,1,0,0,0,1034,1037,3,224, + 104,0,1035,1037,3,184,84,0,1036,1034,1,0,0,0,1036,1035,1,0,0,0,1037,1038, + 1,0,0,0,1038,1036,1,0,0,0,1038,1039,1,0,0,0,1039,227,1,0,0,0,1040,1041, + 3,58,21,0,1041,1042,1,0,0,0,1042,1043,6,106,11,0,1043,229,1,0,0,0,1044, + 1045,3,60,22,0,1045,1046,1,0,0,0,1046,1047,6,107,11,0,1047,231,1,0,0,0, + 1048,1049,3,62,23,0,1049,1050,1,0,0,0,1050,1051,6,108,11,0,1051,233,1,0, + 0,0,1052,1053,3,78,31,0,1053,1054,1,0,0,0,1054,1055,6,109,14,0,1055,1056, + 6,109,15,0,1056,235,1,0,0,0,1057,1058,3,112,48,0,1058,1059,1,0,0,0,1059, + 1060,6,110,18,0,1060,237,1,0,0,0,1061,1062,3,116,50,0,1062,1063,1,0,0,0, + 1063,1064,6,111,17,0,1064,239,1,0,0,0,1065,1066,3,120,52,0,1066,1067,1, + 0,0,0,1067,1068,6,112,21,0,1068,241,1,0,0,0,1069,1070,7,12,0,0,1070,1071, + 7,2,0,0,1071,243,1,0,0,0,1072,1073,3,226,105,0,1073,1074,1,0,0,0,1074,1075, + 6,114,22,0,1075,245,1,0,0,0,1076,1077,3,58,21,0,1077,1078,1,0,0,0,1078, + 1079,6,115,11,0,1079,247,1,0,0,0,1080,1081,3,60,22,0,1081,1082,1,0,0,0, + 1082,1083,6,116,11,0,1083,249,1,0,0,0,1084,1085,3,62,23,0,1085,1086,1,0, + 0,0,1086,1087,6,117,11,0,1087,251,1,0,0,0,1088,1089,3,78,31,0,1089,1090, + 1,0,0,0,1090,1091,6,118,14,0,1091,1092,6,118,15,0,1092,253,1,0,0,0,1093, + 1094,3,178,81,0,1094,1095,1,0,0,0,1095,1096,6,119,12,0,1096,1097,6,119, + 23,0,1097,255,1,0,0,0,1098,1099,7,7,0,0,1099,1100,7,9,0,0,1100,1101,1,0, + 0,0,1101,1102,6,120,24,0,1102,257,1,0,0,0,1103,1104,7,20,0,0,1104,1105, + 7,1,0,0,1105,1106,7,5,0,0,1106,1107,7,10,0,0,1107,1108,1,0,0,0,1108,1109, + 6,121,24,0,1109,259,1,0,0,0,1110,1111,8,34,0,0,1111,261,1,0,0,0,1112,1114, + 3,260,122,0,1113,1112,1,0,0,0,1114,1115,1,0,0,0,1115,1113,1,0,0,0,1115, + 1116,1,0,0,0,1116,1117,1,0,0,0,1117,1118,3,360,172,0,1118,1120,1,0,0,0, + 1119,1113,1,0,0,0,1119,1120,1,0,0,0,1120,1122,1,0,0,0,1121,1123,3,260,122, + 0,1122,1121,1,0,0,0,1123,1124,1,0,0,0,1124,1122,1,0,0,0,1124,1125,1,0,0, + 0,1125,263,1,0,0,0,1126,1127,3,186,85,0,1127,1128,1,0,0,0,1128,1129,6,124, + 25,0,1129,265,1,0,0,0,1130,1131,3,262,123,0,1131,1132,1,0,0,0,1132,1133, + 6,125,26,0,1133,267,1,0,0,0,1134,1135,3,58,21,0,1135,1136,1,0,0,0,1136, + 1137,6,126,11,0,1137,269,1,0,0,0,1138,1139,3,60,22,0,1139,1140,1,0,0,0, + 1140,1141,6,127,11,0,1141,271,1,0,0,0,1142,1143,3,62,23,0,1143,1144,1,0, + 0,0,1144,1145,6,128,11,0,1145,273,1,0,0,0,1146,1147,3,78,31,0,1147,1148, + 1,0,0,0,1148,1149,6,129,14,0,1149,1150,6,129,15,0,1150,1151,6,129,15,0, + 1151,275,1,0,0,0,1152,1153,3,112,48,0,1153,1154,1,0,0,0,1154,1155,6,130, + 18,0,1155,277,1,0,0,0,1156,1157,3,116,50,0,1157,1158,1,0,0,0,1158,1159, + 6,131,17,0,1159,279,1,0,0,0,1160,1161,3,120,52,0,1161,1162,1,0,0,0,1162, + 1163,6,132,21,0,1163,281,1,0,0,0,1164,1165,3,258,121,0,1165,1166,1,0,0, + 0,1166,1167,6,133,27,0,1167,283,1,0,0,0,1168,1169,3,226,105,0,1169,1170, + 1,0,0,0,1170,1171,6,134,22,0,1171,285,1,0,0,0,1172,1173,3,186,85,0,1173, + 1174,1,0,0,0,1174,1175,6,135,25,0,1175,287,1,0,0,0,1176,1177,3,58,21,0, + 1177,1178,1,0,0,0,1178,1179,6,136,11,0,1179,289,1,0,0,0,1180,1181,3,60, + 22,0,1181,1182,1,0,0,0,1182,1183,6,137,11,0,1183,291,1,0,0,0,1184,1185, + 3,62,23,0,1185,1186,1,0,0,0,1186,1187,6,138,11,0,1187,293,1,0,0,0,1188, + 1189,3,78,31,0,1189,1190,1,0,0,0,1190,1191,6,139,14,0,1191,1192,6,139,15, + 0,1192,295,1,0,0,0,1193,1194,3,116,50,0,1194,1195,1,0,0,0,1195,1196,6,140, + 17,0,1196,297,1,0,0,0,1197,1198,3,120,52,0,1198,1199,1,0,0,0,1199,1200, + 6,141,21,0,1200,299,1,0,0,0,1201,1202,3,256,120,0,1202,1203,1,0,0,0,1203, + 1204,6,142,28,0,1204,1205,6,142,29,0,1205,301,1,0,0,0,1206,1207,3,66,25, + 0,1207,1208,1,0,0,0,1208,1209,6,143,20,0,1209,303,1,0,0,0,1210,1211,3,58, + 21,0,1211,1212,1,0,0,0,1212,1213,6,144,11,0,1213,305,1,0,0,0,1214,1215, + 3,60,22,0,1215,1216,1,0,0,0,1216,1217,6,145,11,0,1217,307,1,0,0,0,1218, + 1219,3,62,23,0,1219,1220,1,0,0,0,1220,1221,6,146,11,0,1221,309,1,0,0,0, + 1222,1223,3,78,31,0,1223,1224,1,0,0,0,1224,1225,6,147,14,0,1225,1226,6, + 147,15,0,1226,1227,6,147,15,0,1227,311,1,0,0,0,1228,1229,3,116,50,0,1229, + 1230,1,0,0,0,1230,1231,6,148,17,0,1231,313,1,0,0,0,1232,1233,3,120,52,0, + 1233,1234,1,0,0,0,1234,1235,6,149,21,0,1235,315,1,0,0,0,1236,1237,3,226, + 105,0,1237,1238,1,0,0,0,1238,1239,6,150,22,0,1239,317,1,0,0,0,1240,1241, + 3,58,21,0,1241,1242,1,0,0,0,1242,1243,6,151,11,0,1243,319,1,0,0,0,1244, + 1245,3,60,22,0,1245,1246,1,0,0,0,1246,1247,6,152,11,0,1247,321,1,0,0,0, + 1248,1249,3,62,23,0,1249,1250,1,0,0,0,1250,1251,6,153,11,0,1251,323,1,0, + 0,0,1252,1253,3,78,31,0,1253,1254,1,0,0,0,1254,1255,6,154,14,0,1255,1256, + 6,154,15,0,1256,325,1,0,0,0,1257,1258,3,120,52,0,1258,1259,1,0,0,0,1259, + 1260,6,155,21,0,1260,327,1,0,0,0,1261,1262,3,186,85,0,1262,1263,1,0,0,0, + 1263,1264,6,156,25,0,1264,329,1,0,0,0,1265,1266,3,182,83,0,1266,1267,1, + 0,0,0,1267,1268,6,157,30,0,1268,331,1,0,0,0,1269,1270,3,58,21,0,1270,1271, + 1,0,0,0,1271,1272,6,158,11,0,1272,333,1,0,0,0,1273,1274,3,60,22,0,1274, + 1275,1,0,0,0,1275,1276,6,159,11,0,1276,335,1,0,0,0,1277,1278,3,62,23,0, + 1278,1279,1,0,0,0,1279,1280,6,160,11,0,1280,337,1,0,0,0,1281,1282,3,78, + 31,0,1282,1283,1,0,0,0,1283,1284,6,161,14,0,1284,1285,6,161,15,0,1285,339, + 1,0,0,0,1286,1287,7,1,0,0,1287,1288,7,9,0,0,1288,1289,7,15,0,0,1289,1290, + 7,7,0,0,1290,341,1,0,0,0,1291,1292,3,58,21,0,1292,1293,1,0,0,0,1293,1294, + 6,163,11,0,1294,343,1,0,0,0,1295,1296,3,60,22,0,1296,1297,1,0,0,0,1297, + 1298,6,164,11,0,1298,345,1,0,0,0,1299,1300,3,62,23,0,1300,1301,1,0,0,0, + 1301,1302,6,165,11,0,1302,347,1,0,0,0,1303,1304,3,78,31,0,1304,1305,1,0, + 0,0,1305,1306,6,166,14,0,1306,1307,6,166,15,0,1307,349,1,0,0,0,1308,1309, + 7,15,0,0,1309,1310,7,19,0,0,1310,1311,7,9,0,0,1311,1312,7,4,0,0,1312,1313, + 7,5,0,0,1313,1314,7,1,0,0,1314,1315,7,7,0,0,1315,1316,7,9,0,0,1316,1317, + 7,2,0,0,1317,351,1,0,0,0,1318,1319,3,58,21,0,1319,1320,1,0,0,0,1320,1321, + 6,168,11,0,1321,353,1,0,0,0,1322,1323,3,60,22,0,1323,1324,1,0,0,0,1324, + 1325,6,169,11,0,1325,355,1,0,0,0,1326,1327,3,62,23,0,1327,1328,1,0,0,0, + 1328,1329,6,170,11,0,1329,357,1,0,0,0,1330,1331,3,180,82,0,1331,1332,1, + 0,0,0,1332,1333,6,171,16,0,1333,1334,6,171,15,0,1334,359,1,0,0,0,1335,1336, + 5,58,0,0,1336,361,1,0,0,0,1337,1343,3,90,37,0,1338,1343,3,80,32,0,1339, + 1343,3,120,52,0,1340,1343,3,82,33,0,1341,1343,3,96,40,0,1342,1337,1,0,0, + 0,1342,1338,1,0,0,0,1342,1339,1,0,0,0,1342,1340,1,0,0,0,1342,1341,1,0,0, + 0,1343,1344,1,0,0,0,1344,1342,1,0,0,0,1344,1345,1,0,0,0,1345,363,1,0,0, + 0,1346,1347,3,58,21,0,1347,1348,1,0,0,0,1348,1349,6,174,11,0,1349,365,1, + 0,0,0,1350,1351,3,60,22,0,1351,1352,1,0,0,0,1352,1353,6,175,11,0,1353,367, + 1,0,0,0,1354,1355,3,62,23,0,1355,1356,1,0,0,0,1356,1357,6,176,11,0,1357, + 369,1,0,0,0,1358,1359,3,78,31,0,1359,1360,1,0,0,0,1360,1361,6,177,14,0, + 1361,1362,6,177,15,0,1362,371,1,0,0,0,1363,1364,3,66,25,0,1364,1365,1,0, + 0,0,1365,1366,6,178,20,0,1366,1367,6,178,15,0,1367,1368,6,178,31,0,1368, + 373,1,0,0,0,1369,1370,3,58,21,0,1370,1371,1,0,0,0,1371,1372,6,179,11,0, + 1372,375,1,0,0,0,1373,1374,3,60,22,0,1374,1375,1,0,0,0,1375,1376,6,180, + 11,0,1376,377,1,0,0,0,1377,1378,3,62,23,0,1378,1379,1,0,0,0,1379,1380,6, + 181,11,0,1380,379,1,0,0,0,1381,1382,3,116,50,0,1382,1383,1,0,0,0,1383,1384, + 6,182,17,0,1384,1385,6,182,15,0,1385,1386,6,182,7,0,1386,381,1,0,0,0,1387, + 1388,3,58,21,0,1388,1389,1,0,0,0,1389,1390,6,183,11,0,1390,383,1,0,0,0, + 1391,1392,3,60,22,0,1392,1393,1,0,0,0,1393,1394,6,184,11,0,1394,385,1,0, + 0,0,1395,1396,3,62,23,0,1396,1397,1,0,0,0,1397,1398,6,185,11,0,1398,387, + 1,0,0,0,1399,1400,3,186,85,0,1400,1401,1,0,0,0,1401,1402,6,186,15,0,1402, + 1403,6,186,0,0,1403,1404,6,186,25,0,1404,389,1,0,0,0,1405,1406,3,182,83, + 0,1406,1407,1,0,0,0,1407,1408,6,187,15,0,1408,1409,6,187,0,0,1409,1410, + 6,187,30,0,1410,391,1,0,0,0,1411,1412,3,106,45,0,1412,1413,1,0,0,0,1413, + 1414,6,188,15,0,1414,1415,6,188,0,0,1415,1416,6,188,32,0,1416,393,1,0,0, + 0,1417,1418,3,78,31,0,1418,1419,1,0,0,0,1419,1420,6,189,14,0,1420,1421, + 6,189,15,0,1421,395,1,0,0,0,65,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,568, + 578,582,585,594,596,607,614,619,658,663,672,679,684,686,697,705,708,710, + 715,720,726,733,738,744,747,755,759,883,890,892,908,913,918,920,926,1011, + 1015,1020,1025,1030,1032,1036,1038,1115,1119,1124,1342,1344,33,5,2,0,5, + 4,0,5,6,0,5,1,0,5,3,0,5,8,0,5,12,0,5,14,0,5,10,0,5,5,0,5,11,0,0,1,0,7,69, + 0,5,0,0,7,29,0,4,0,0,7,70,0,7,38,0,7,36,0,7,30,0,7,25,0,7,40,0,7,80,0,5, + 13,0,5,7,0,7,72,0,7,90,0,7,89,0,7,88,0,5,9,0,7,71,0,5,15,0,7,33,0]; private static __ATN: ATN; public static get _ATN(): ATN { diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser.g4 b/packages/kbn-esql-ast/src/antlr/esql_parser.g4 index d4f9de9dccd9e..59c9ee6ca5770 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser.g4 +++ b/packages/kbn-esql-ast/src/antlr/esql_parser.g4 @@ -179,13 +179,18 @@ constant | decimalValue #decimalLiteral | integerValue #integerLiteral | booleanValue #booleanLiteral - | PARAM #inputParam + | params #inputParams | string #stringLiteral | OPENING_BRACKET numericValue (COMMA numericValue)* CLOSING_BRACKET #numericArrayLiteral | OPENING_BRACKET booleanValue (COMMA booleanValue)* CLOSING_BRACKET #booleanArrayLiteral | OPENING_BRACKET string (COMMA string)* CLOSING_BRACKET #stringArrayLiteral ; +params + : PARAM #inputParam + | NAMED_OR_POSITIONAL_PARAM #inputNamedOrPositionalParam + ; + limitCommand : LIMIT INTEGER_LITERAL ; diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser.interp b/packages/kbn-esql-ast/src/antlr/esql_parser.interp index 76663717c5624..5900020590110 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser.interp +++ b/packages/kbn-esql-ast/src/antlr/esql_parser.interp @@ -68,6 +68,7 @@ null '/' '%' null +null ']' null null @@ -193,6 +194,7 @@ MINUS ASTERISK SLASH PERCENT +NAMED_OR_POSITIONAL_PARAM OPENING_BRACKET CLOSING_BRACKET UNQUOTED_IDENTIFIER @@ -281,6 +283,7 @@ qualifiedNamePatterns identifier identifierPattern constant +params limitCommand sortCommand orderExpression @@ -309,4 +312,4 @@ lookupCommand atn: -[4, 1, 123, 548, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 120, 8, 1, 10, 1, 12, 1, 123, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 131, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 147, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 159, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 166, 8, 5, 10, 5, 12, 5, 169, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 176, 8, 5, 1, 5, 1, 5, 3, 5, 180, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 188, 8, 5, 10, 5, 12, 5, 191, 9, 5, 1, 6, 1, 6, 3, 6, 195, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 202, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 207, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 214, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 220, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 228, 8, 8, 10, 8, 12, 8, 231, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 241, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 246, 8, 9, 10, 9, 12, 9, 249, 9, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 257, 8, 10, 10, 10, 12, 10, 260, 9, 10, 3, 10, 262, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 5, 13, 274, 8, 13, 10, 13, 12, 13, 277, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 284, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 290, 8, 15, 10, 15, 12, 15, 293, 9, 15, 1, 15, 3, 15, 296, 8, 15, 1, 16, 1, 16, 1, 17, 1, 17, 3, 17, 302, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 308, 8, 18, 10, 18, 12, 18, 311, 9, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 321, 8, 20, 10, 20, 12, 20, 324, 9, 20, 1, 20, 3, 20, 327, 8, 20, 1, 20, 1, 20, 3, 20, 331, 8, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 3, 22, 338, 8, 22, 1, 22, 1, 22, 3, 22, 342, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 348, 8, 23, 1, 24, 1, 24, 1, 24, 5, 24, 353, 8, 24, 10, 24, 12, 24, 356, 9, 24, 1, 25, 1, 25, 1, 25, 5, 25, 361, 8, 25, 10, 25, 12, 25, 364, 9, 25, 1, 26, 1, 26, 1, 26, 5, 26, 369, 8, 26, 10, 26, 12, 26, 372, 9, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 391, 8, 29, 10, 29, 12, 29, 394, 9, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 402, 8, 29, 10, 29, 12, 29, 405, 9, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 413, 8, 29, 10, 29, 12, 29, 416, 9, 29, 1, 29, 1, 29, 3, 29, 420, 8, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 429, 8, 31, 10, 31, 12, 31, 432, 9, 31, 1, 32, 1, 32, 3, 32, 436, 8, 32, 1, 32, 1, 32, 3, 32, 440, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 452, 8, 35, 10, 35, 12, 35, 455, 9, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 465, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 5, 40, 477, 8, 40, 10, 40, 12, 40, 480, 9, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 3, 43, 490, 8, 43, 1, 44, 3, 44, 493, 8, 44, 1, 44, 1, 44, 1, 45, 3, 45, 498, 8, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 523, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 529, 8, 52, 10, 52, 12, 52, 532, 9, 52, 3, 52, 534, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 539, 8, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 0, 4, 2, 10, 16, 18, 55, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 0, 7, 1, 0, 63, 64, 1, 0, 65, 67, 1, 0, 70, 71, 2, 0, 35, 35, 39, 39, 1, 0, 42, 43, 2, 0, 41, 41, 55, 55, 2, 0, 56, 56, 58, 62, 574, 0, 110, 1, 0, 0, 0, 2, 113, 1, 0, 0, 0, 4, 130, 1, 0, 0, 0, 6, 146, 1, 0, 0, 0, 8, 148, 1, 0, 0, 0, 10, 179, 1, 0, 0, 0, 12, 206, 1, 0, 0, 0, 14, 213, 1, 0, 0, 0, 16, 219, 1, 0, 0, 0, 18, 240, 1, 0, 0, 0, 20, 250, 1, 0, 0, 0, 22, 265, 1, 0, 0, 0, 24, 267, 1, 0, 0, 0, 26, 270, 1, 0, 0, 0, 28, 283, 1, 0, 0, 0, 30, 285, 1, 0, 0, 0, 32, 297, 1, 0, 0, 0, 34, 301, 1, 0, 0, 0, 36, 303, 1, 0, 0, 0, 38, 312, 1, 0, 0, 0, 40, 316, 1, 0, 0, 0, 42, 332, 1, 0, 0, 0, 44, 335, 1, 0, 0, 0, 46, 343, 1, 0, 0, 0, 48, 349, 1, 0, 0, 0, 50, 357, 1, 0, 0, 0, 52, 365, 1, 0, 0, 0, 54, 373, 1, 0, 0, 0, 56, 375, 1, 0, 0, 0, 58, 419, 1, 0, 0, 0, 60, 421, 1, 0, 0, 0, 62, 424, 1, 0, 0, 0, 64, 433, 1, 0, 0, 0, 66, 441, 1, 0, 0, 0, 68, 444, 1, 0, 0, 0, 70, 447, 1, 0, 0, 0, 72, 456, 1, 0, 0, 0, 74, 460, 1, 0, 0, 0, 76, 466, 1, 0, 0, 0, 78, 470, 1, 0, 0, 0, 80, 473, 1, 0, 0, 0, 82, 481, 1, 0, 0, 0, 84, 485, 1, 0, 0, 0, 86, 489, 1, 0, 0, 0, 88, 492, 1, 0, 0, 0, 90, 497, 1, 0, 0, 0, 92, 501, 1, 0, 0, 0, 94, 503, 1, 0, 0, 0, 96, 505, 1, 0, 0, 0, 98, 508, 1, 0, 0, 0, 100, 512, 1, 0, 0, 0, 102, 515, 1, 0, 0, 0, 104, 518, 1, 0, 0, 0, 106, 538, 1, 0, 0, 0, 108, 542, 1, 0, 0, 0, 110, 111, 3, 2, 1, 0, 111, 112, 5, 0, 0, 1, 112, 1, 1, 0, 0, 0, 113, 114, 6, 1, -1, 0, 114, 115, 3, 4, 2, 0, 115, 121, 1, 0, 0, 0, 116, 117, 10, 1, 0, 0, 117, 118, 5, 29, 0, 0, 118, 120, 3, 6, 3, 0, 119, 116, 1, 0, 0, 0, 120, 123, 1, 0, 0, 0, 121, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 3, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 124, 131, 3, 96, 48, 0, 125, 131, 3, 30, 15, 0, 126, 131, 3, 24, 12, 0, 127, 131, 3, 40, 20, 0, 128, 131, 3, 100, 50, 0, 129, 131, 3, 102, 51, 0, 130, 124, 1, 0, 0, 0, 130, 125, 1, 0, 0, 0, 130, 126, 1, 0, 0, 0, 130, 127, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 129, 1, 0, 0, 0, 131, 5, 1, 0, 0, 0, 132, 147, 3, 42, 21, 0, 133, 147, 3, 46, 23, 0, 134, 147, 3, 60, 30, 0, 135, 147, 3, 108, 54, 0, 136, 147, 3, 66, 33, 0, 137, 147, 3, 62, 31, 0, 138, 147, 3, 44, 22, 0, 139, 147, 3, 8, 4, 0, 140, 147, 3, 68, 34, 0, 141, 147, 3, 70, 35, 0, 142, 147, 3, 74, 37, 0, 143, 147, 3, 76, 38, 0, 144, 147, 3, 104, 52, 0, 145, 147, 3, 78, 39, 0, 146, 132, 1, 0, 0, 0, 146, 133, 1, 0, 0, 0, 146, 134, 1, 0, 0, 0, 146, 135, 1, 0, 0, 0, 146, 136, 1, 0, 0, 0, 146, 137, 1, 0, 0, 0, 146, 138, 1, 0, 0, 0, 146, 139, 1, 0, 0, 0, 146, 140, 1, 0, 0, 0, 146, 141, 1, 0, 0, 0, 146, 142, 1, 0, 0, 0, 146, 143, 1, 0, 0, 0, 146, 144, 1, 0, 0, 0, 146, 145, 1, 0, 0, 0, 147, 7, 1, 0, 0, 0, 148, 149, 5, 20, 0, 0, 149, 150, 3, 10, 5, 0, 150, 9, 1, 0, 0, 0, 151, 152, 6, 5, -1, 0, 152, 153, 5, 48, 0, 0, 153, 180, 3, 10, 5, 7, 154, 180, 3, 14, 7, 0, 155, 180, 3, 12, 6, 0, 156, 158, 3, 14, 7, 0, 157, 159, 5, 48, 0, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 161, 5, 45, 0, 0, 161, 162, 5, 44, 0, 0, 162, 167, 3, 14, 7, 0, 163, 164, 5, 38, 0, 0, 164, 166, 3, 14, 7, 0, 165, 163, 1, 0, 0, 0, 166, 169, 1, 0, 0, 0, 167, 165, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, 168, 170, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 170, 171, 5, 54, 0, 0, 171, 180, 1, 0, 0, 0, 172, 173, 3, 14, 7, 0, 173, 175, 5, 46, 0, 0, 174, 176, 5, 48, 0, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 178, 5, 49, 0, 0, 178, 180, 1, 0, 0, 0, 179, 151, 1, 0, 0, 0, 179, 154, 1, 0, 0, 0, 179, 155, 1, 0, 0, 0, 179, 156, 1, 0, 0, 0, 179, 172, 1, 0, 0, 0, 180, 189, 1, 0, 0, 0, 181, 182, 10, 4, 0, 0, 182, 183, 5, 34, 0, 0, 183, 188, 3, 10, 5, 5, 184, 185, 10, 3, 0, 0, 185, 186, 5, 51, 0, 0, 186, 188, 3, 10, 5, 4, 187, 181, 1, 0, 0, 0, 187, 184, 1, 0, 0, 0, 188, 191, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 11, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 192, 194, 3, 14, 7, 0, 193, 195, 5, 48, 0, 0, 194, 193, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 197, 5, 47, 0, 0, 197, 198, 3, 92, 46, 0, 198, 207, 1, 0, 0, 0, 199, 201, 3, 14, 7, 0, 200, 202, 5, 48, 0, 0, 201, 200, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 204, 5, 53, 0, 0, 204, 205, 3, 92, 46, 0, 205, 207, 1, 0, 0, 0, 206, 192, 1, 0, 0, 0, 206, 199, 1, 0, 0, 0, 207, 13, 1, 0, 0, 0, 208, 214, 3, 16, 8, 0, 209, 210, 3, 16, 8, 0, 210, 211, 3, 94, 47, 0, 211, 212, 3, 16, 8, 0, 212, 214, 1, 0, 0, 0, 213, 208, 1, 0, 0, 0, 213, 209, 1, 0, 0, 0, 214, 15, 1, 0, 0, 0, 215, 216, 6, 8, -1, 0, 216, 220, 3, 18, 9, 0, 217, 218, 7, 0, 0, 0, 218, 220, 3, 16, 8, 3, 219, 215, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, 220, 229, 1, 0, 0, 0, 221, 222, 10, 2, 0, 0, 222, 223, 7, 1, 0, 0, 223, 228, 3, 16, 8, 3, 224, 225, 10, 1, 0, 0, 225, 226, 7, 0, 0, 0, 226, 228, 3, 16, 8, 2, 227, 221, 1, 0, 0, 0, 227, 224, 1, 0, 0, 0, 228, 231, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 17, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 232, 233, 6, 9, -1, 0, 233, 241, 3, 58, 29, 0, 234, 241, 3, 48, 24, 0, 235, 241, 3, 20, 10, 0, 236, 237, 5, 44, 0, 0, 237, 238, 3, 10, 5, 0, 238, 239, 5, 54, 0, 0, 239, 241, 1, 0, 0, 0, 240, 232, 1, 0, 0, 0, 240, 234, 1, 0, 0, 0, 240, 235, 1, 0, 0, 0, 240, 236, 1, 0, 0, 0, 241, 247, 1, 0, 0, 0, 242, 243, 10, 1, 0, 0, 243, 244, 5, 37, 0, 0, 244, 246, 3, 22, 11, 0, 245, 242, 1, 0, 0, 0, 246, 249, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 19, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 250, 251, 3, 54, 27, 0, 251, 261, 5, 44, 0, 0, 252, 262, 5, 65, 0, 0, 253, 258, 3, 10, 5, 0, 254, 255, 5, 38, 0, 0, 255, 257, 3, 10, 5, 0, 256, 254, 1, 0, 0, 0, 257, 260, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 261, 252, 1, 0, 0, 0, 261, 253, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 264, 5, 54, 0, 0, 264, 21, 1, 0, 0, 0, 265, 266, 3, 54, 27, 0, 266, 23, 1, 0, 0, 0, 267, 268, 5, 16, 0, 0, 268, 269, 3, 26, 13, 0, 269, 25, 1, 0, 0, 0, 270, 275, 3, 28, 14, 0, 271, 272, 5, 38, 0, 0, 272, 274, 3, 28, 14, 0, 273, 271, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 27, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 284, 3, 10, 5, 0, 279, 280, 3, 48, 24, 0, 280, 281, 5, 36, 0, 0, 281, 282, 3, 10, 5, 0, 282, 284, 1, 0, 0, 0, 283, 278, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 284, 29, 1, 0, 0, 0, 285, 286, 5, 6, 0, 0, 286, 291, 3, 32, 16, 0, 287, 288, 5, 38, 0, 0, 288, 290, 3, 32, 16, 0, 289, 287, 1, 0, 0, 0, 290, 293, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 295, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 294, 296, 3, 34, 17, 0, 295, 294, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 31, 1, 0, 0, 0, 297, 298, 5, 25, 0, 0, 298, 33, 1, 0, 0, 0, 299, 302, 3, 36, 18, 0, 300, 302, 3, 38, 19, 0, 301, 299, 1, 0, 0, 0, 301, 300, 1, 0, 0, 0, 302, 35, 1, 0, 0, 0, 303, 304, 5, 75, 0, 0, 304, 309, 3, 32, 16, 0, 305, 306, 5, 38, 0, 0, 306, 308, 3, 32, 16, 0, 307, 305, 1, 0, 0, 0, 308, 311, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 37, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 312, 313, 5, 68, 0, 0, 313, 314, 3, 36, 18, 0, 314, 315, 5, 69, 0, 0, 315, 39, 1, 0, 0, 0, 316, 317, 5, 13, 0, 0, 317, 322, 3, 32, 16, 0, 318, 319, 5, 38, 0, 0, 319, 321, 3, 32, 16, 0, 320, 318, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 325, 327, 3, 26, 13, 0, 326, 325, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 330, 1, 0, 0, 0, 328, 329, 5, 33, 0, 0, 329, 331, 3, 26, 13, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 41, 1, 0, 0, 0, 332, 333, 5, 4, 0, 0, 333, 334, 3, 26, 13, 0, 334, 43, 1, 0, 0, 0, 335, 337, 5, 19, 0, 0, 336, 338, 3, 26, 13, 0, 337, 336, 1, 0, 0, 0, 337, 338, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 340, 5, 33, 0, 0, 340, 342, 3, 26, 13, 0, 341, 339, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 45, 1, 0, 0, 0, 343, 344, 5, 8, 0, 0, 344, 347, 3, 26, 13, 0, 345, 346, 5, 33, 0, 0, 346, 348, 3, 26, 13, 0, 347, 345, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, 47, 1, 0, 0, 0, 349, 354, 3, 54, 27, 0, 350, 351, 5, 40, 0, 0, 351, 353, 3, 54, 27, 0, 352, 350, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 49, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 362, 3, 56, 28, 0, 358, 359, 5, 40, 0, 0, 359, 361, 3, 56, 28, 0, 360, 358, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 51, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 365, 370, 3, 50, 25, 0, 366, 367, 5, 38, 0, 0, 367, 369, 3, 50, 25, 0, 368, 366, 1, 0, 0, 0, 369, 372, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 53, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 373, 374, 7, 2, 0, 0, 374, 55, 1, 0, 0, 0, 375, 376, 5, 79, 0, 0, 376, 57, 1, 0, 0, 0, 377, 420, 5, 49, 0, 0, 378, 379, 3, 90, 45, 0, 379, 380, 5, 70, 0, 0, 380, 420, 1, 0, 0, 0, 381, 420, 3, 88, 44, 0, 382, 420, 3, 90, 45, 0, 383, 420, 3, 84, 42, 0, 384, 420, 5, 52, 0, 0, 385, 420, 3, 92, 46, 0, 386, 387, 5, 68, 0, 0, 387, 392, 3, 86, 43, 0, 388, 389, 5, 38, 0, 0, 389, 391, 3, 86, 43, 0, 390, 388, 1, 0, 0, 0, 391, 394, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 395, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 395, 396, 5, 69, 0, 0, 396, 420, 1, 0, 0, 0, 397, 398, 5, 68, 0, 0, 398, 403, 3, 84, 42, 0, 399, 400, 5, 38, 0, 0, 400, 402, 3, 84, 42, 0, 401, 399, 1, 0, 0, 0, 402, 405, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 406, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 406, 407, 5, 69, 0, 0, 407, 420, 1, 0, 0, 0, 408, 409, 5, 68, 0, 0, 409, 414, 3, 92, 46, 0, 410, 411, 5, 38, 0, 0, 411, 413, 3, 92, 46, 0, 412, 410, 1, 0, 0, 0, 413, 416, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 418, 5, 69, 0, 0, 418, 420, 1, 0, 0, 0, 419, 377, 1, 0, 0, 0, 419, 378, 1, 0, 0, 0, 419, 381, 1, 0, 0, 0, 419, 382, 1, 0, 0, 0, 419, 383, 1, 0, 0, 0, 419, 384, 1, 0, 0, 0, 419, 385, 1, 0, 0, 0, 419, 386, 1, 0, 0, 0, 419, 397, 1, 0, 0, 0, 419, 408, 1, 0, 0, 0, 420, 59, 1, 0, 0, 0, 421, 422, 5, 10, 0, 0, 422, 423, 5, 31, 0, 0, 423, 61, 1, 0, 0, 0, 424, 425, 5, 18, 0, 0, 425, 430, 3, 64, 32, 0, 426, 427, 5, 38, 0, 0, 427, 429, 3, 64, 32, 0, 428, 426, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 63, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 435, 3, 10, 5, 0, 434, 436, 7, 3, 0, 0, 435, 434, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 439, 1, 0, 0, 0, 437, 438, 5, 50, 0, 0, 438, 440, 7, 4, 0, 0, 439, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 65, 1, 0, 0, 0, 441, 442, 5, 9, 0, 0, 442, 443, 3, 52, 26, 0, 443, 67, 1, 0, 0, 0, 444, 445, 5, 2, 0, 0, 445, 446, 3, 52, 26, 0, 446, 69, 1, 0, 0, 0, 447, 448, 5, 15, 0, 0, 448, 453, 3, 72, 36, 0, 449, 450, 5, 38, 0, 0, 450, 452, 3, 72, 36, 0, 451, 449, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 71, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 5, 83, 0, 0, 458, 459, 3, 50, 25, 0, 459, 73, 1, 0, 0, 0, 460, 461, 5, 1, 0, 0, 461, 462, 3, 18, 9, 0, 462, 464, 3, 92, 46, 0, 463, 465, 3, 80, 40, 0, 464, 463, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 75, 1, 0, 0, 0, 466, 467, 5, 7, 0, 0, 467, 468, 3, 18, 9, 0, 468, 469, 3, 92, 46, 0, 469, 77, 1, 0, 0, 0, 470, 471, 5, 14, 0, 0, 471, 472, 3, 48, 24, 0, 472, 79, 1, 0, 0, 0, 473, 478, 3, 82, 41, 0, 474, 475, 5, 38, 0, 0, 475, 477, 3, 82, 41, 0, 476, 474, 1, 0, 0, 0, 477, 480, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 81, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 481, 482, 3, 54, 27, 0, 482, 483, 5, 36, 0, 0, 483, 484, 3, 58, 29, 0, 484, 83, 1, 0, 0, 0, 485, 486, 7, 5, 0, 0, 486, 85, 1, 0, 0, 0, 487, 490, 3, 88, 44, 0, 488, 490, 3, 90, 45, 0, 489, 487, 1, 0, 0, 0, 489, 488, 1, 0, 0, 0, 490, 87, 1, 0, 0, 0, 491, 493, 7, 0, 0, 0, 492, 491, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 495, 5, 32, 0, 0, 495, 89, 1, 0, 0, 0, 496, 498, 7, 0, 0, 0, 497, 496, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 500, 5, 31, 0, 0, 500, 91, 1, 0, 0, 0, 501, 502, 5, 30, 0, 0, 502, 93, 1, 0, 0, 0, 503, 504, 7, 6, 0, 0, 504, 95, 1, 0, 0, 0, 505, 506, 5, 5, 0, 0, 506, 507, 3, 98, 49, 0, 507, 97, 1, 0, 0, 0, 508, 509, 5, 68, 0, 0, 509, 510, 3, 2, 1, 0, 510, 511, 5, 69, 0, 0, 511, 99, 1, 0, 0, 0, 512, 513, 5, 17, 0, 0, 513, 514, 5, 105, 0, 0, 514, 101, 1, 0, 0, 0, 515, 516, 5, 12, 0, 0, 516, 517, 5, 109, 0, 0, 517, 103, 1, 0, 0, 0, 518, 519, 5, 3, 0, 0, 519, 522, 5, 89, 0, 0, 520, 521, 5, 87, 0, 0, 521, 523, 3, 50, 25, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 533, 1, 0, 0, 0, 524, 525, 5, 88, 0, 0, 525, 530, 3, 106, 53, 0, 526, 527, 5, 38, 0, 0, 527, 529, 3, 106, 53, 0, 528, 526, 1, 0, 0, 0, 529, 532, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 533, 524, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 105, 1, 0, 0, 0, 535, 536, 3, 50, 25, 0, 536, 537, 5, 36, 0, 0, 537, 539, 1, 0, 0, 0, 538, 535, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 3, 50, 25, 0, 541, 107, 1, 0, 0, 0, 542, 543, 5, 11, 0, 0, 543, 544, 5, 25, 0, 0, 544, 545, 5, 87, 0, 0, 545, 546, 3, 52, 26, 0, 546, 109, 1, 0, 0, 0, 52, 121, 130, 146, 158, 167, 175, 179, 187, 189, 194, 201, 206, 213, 219, 227, 229, 240, 247, 258, 261, 275, 283, 291, 295, 301, 309, 322, 326, 330, 337, 341, 347, 354, 362, 370, 392, 403, 414, 419, 430, 435, 439, 453, 464, 478, 489, 492, 497, 522, 530, 533, 538] \ No newline at end of file +[4, 1, 124, 554, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 122, 8, 1, 10, 1, 12, 1, 125, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 133, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 149, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 161, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 168, 8, 5, 10, 5, 12, 5, 171, 9, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 178, 8, 5, 1, 5, 1, 5, 3, 5, 182, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 190, 8, 5, 10, 5, 12, 5, 193, 9, 5, 1, 6, 1, 6, 3, 6, 197, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 204, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 209, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 216, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 222, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 230, 8, 8, 10, 8, 12, 8, 233, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 243, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 248, 8, 9, 10, 9, 12, 9, 251, 9, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 259, 8, 10, 10, 10, 12, 10, 262, 9, 10, 3, 10, 264, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 5, 13, 276, 8, 13, 10, 13, 12, 13, 279, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 286, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 292, 8, 15, 10, 15, 12, 15, 295, 9, 15, 1, 15, 3, 15, 298, 8, 15, 1, 16, 1, 16, 1, 17, 1, 17, 3, 17, 304, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 310, 8, 18, 10, 18, 12, 18, 313, 9, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 323, 8, 20, 10, 20, 12, 20, 326, 9, 20, 1, 20, 3, 20, 329, 8, 20, 1, 20, 1, 20, 3, 20, 333, 8, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 3, 22, 340, 8, 22, 1, 22, 1, 22, 3, 22, 344, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 350, 8, 23, 1, 24, 1, 24, 1, 24, 5, 24, 355, 8, 24, 10, 24, 12, 24, 358, 9, 24, 1, 25, 1, 25, 1, 25, 5, 25, 363, 8, 25, 10, 25, 12, 25, 366, 9, 25, 1, 26, 1, 26, 1, 26, 5, 26, 371, 8, 26, 10, 26, 12, 26, 374, 9, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 393, 8, 29, 10, 29, 12, 29, 396, 9, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 404, 8, 29, 10, 29, 12, 29, 407, 9, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 415, 8, 29, 10, 29, 12, 29, 418, 9, 29, 1, 29, 1, 29, 3, 29, 422, 8, 29, 1, 30, 1, 30, 3, 30, 426, 8, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 435, 8, 32, 10, 32, 12, 32, 438, 9, 32, 1, 33, 1, 33, 3, 33, 442, 8, 33, 1, 33, 1, 33, 3, 33, 446, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 5, 36, 458, 8, 36, 10, 36, 12, 36, 461, 9, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 471, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 483, 8, 41, 10, 41, 12, 41, 486, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 496, 8, 44, 1, 45, 3, 45, 499, 8, 45, 1, 45, 1, 45, 1, 46, 3, 46, 504, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 529, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 535, 8, 53, 10, 53, 12, 53, 538, 9, 53, 3, 53, 540, 8, 53, 1, 54, 1, 54, 1, 54, 3, 54, 545, 8, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 0, 4, 2, 10, 16, 18, 56, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 0, 7, 1, 0, 63, 64, 1, 0, 65, 67, 1, 0, 71, 72, 2, 0, 35, 35, 39, 39, 1, 0, 42, 43, 2, 0, 41, 41, 55, 55, 2, 0, 56, 56, 58, 62, 580, 0, 112, 1, 0, 0, 0, 2, 115, 1, 0, 0, 0, 4, 132, 1, 0, 0, 0, 6, 148, 1, 0, 0, 0, 8, 150, 1, 0, 0, 0, 10, 181, 1, 0, 0, 0, 12, 208, 1, 0, 0, 0, 14, 215, 1, 0, 0, 0, 16, 221, 1, 0, 0, 0, 18, 242, 1, 0, 0, 0, 20, 252, 1, 0, 0, 0, 22, 267, 1, 0, 0, 0, 24, 269, 1, 0, 0, 0, 26, 272, 1, 0, 0, 0, 28, 285, 1, 0, 0, 0, 30, 287, 1, 0, 0, 0, 32, 299, 1, 0, 0, 0, 34, 303, 1, 0, 0, 0, 36, 305, 1, 0, 0, 0, 38, 314, 1, 0, 0, 0, 40, 318, 1, 0, 0, 0, 42, 334, 1, 0, 0, 0, 44, 337, 1, 0, 0, 0, 46, 345, 1, 0, 0, 0, 48, 351, 1, 0, 0, 0, 50, 359, 1, 0, 0, 0, 52, 367, 1, 0, 0, 0, 54, 375, 1, 0, 0, 0, 56, 377, 1, 0, 0, 0, 58, 421, 1, 0, 0, 0, 60, 425, 1, 0, 0, 0, 62, 427, 1, 0, 0, 0, 64, 430, 1, 0, 0, 0, 66, 439, 1, 0, 0, 0, 68, 447, 1, 0, 0, 0, 70, 450, 1, 0, 0, 0, 72, 453, 1, 0, 0, 0, 74, 462, 1, 0, 0, 0, 76, 466, 1, 0, 0, 0, 78, 472, 1, 0, 0, 0, 80, 476, 1, 0, 0, 0, 82, 479, 1, 0, 0, 0, 84, 487, 1, 0, 0, 0, 86, 491, 1, 0, 0, 0, 88, 495, 1, 0, 0, 0, 90, 498, 1, 0, 0, 0, 92, 503, 1, 0, 0, 0, 94, 507, 1, 0, 0, 0, 96, 509, 1, 0, 0, 0, 98, 511, 1, 0, 0, 0, 100, 514, 1, 0, 0, 0, 102, 518, 1, 0, 0, 0, 104, 521, 1, 0, 0, 0, 106, 524, 1, 0, 0, 0, 108, 544, 1, 0, 0, 0, 110, 548, 1, 0, 0, 0, 112, 113, 3, 2, 1, 0, 113, 114, 5, 0, 0, 1, 114, 1, 1, 0, 0, 0, 115, 116, 6, 1, -1, 0, 116, 117, 3, 4, 2, 0, 117, 123, 1, 0, 0, 0, 118, 119, 10, 1, 0, 0, 119, 120, 5, 29, 0, 0, 120, 122, 3, 6, 3, 0, 121, 118, 1, 0, 0, 0, 122, 125, 1, 0, 0, 0, 123, 121, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 3, 1, 0, 0, 0, 125, 123, 1, 0, 0, 0, 126, 133, 3, 98, 49, 0, 127, 133, 3, 30, 15, 0, 128, 133, 3, 24, 12, 0, 129, 133, 3, 40, 20, 0, 130, 133, 3, 102, 51, 0, 131, 133, 3, 104, 52, 0, 132, 126, 1, 0, 0, 0, 132, 127, 1, 0, 0, 0, 132, 128, 1, 0, 0, 0, 132, 129, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 131, 1, 0, 0, 0, 133, 5, 1, 0, 0, 0, 134, 149, 3, 42, 21, 0, 135, 149, 3, 46, 23, 0, 136, 149, 3, 62, 31, 0, 137, 149, 3, 110, 55, 0, 138, 149, 3, 68, 34, 0, 139, 149, 3, 64, 32, 0, 140, 149, 3, 44, 22, 0, 141, 149, 3, 8, 4, 0, 142, 149, 3, 70, 35, 0, 143, 149, 3, 72, 36, 0, 144, 149, 3, 76, 38, 0, 145, 149, 3, 78, 39, 0, 146, 149, 3, 106, 53, 0, 147, 149, 3, 80, 40, 0, 148, 134, 1, 0, 0, 0, 148, 135, 1, 0, 0, 0, 148, 136, 1, 0, 0, 0, 148, 137, 1, 0, 0, 0, 148, 138, 1, 0, 0, 0, 148, 139, 1, 0, 0, 0, 148, 140, 1, 0, 0, 0, 148, 141, 1, 0, 0, 0, 148, 142, 1, 0, 0, 0, 148, 143, 1, 0, 0, 0, 148, 144, 1, 0, 0, 0, 148, 145, 1, 0, 0, 0, 148, 146, 1, 0, 0, 0, 148, 147, 1, 0, 0, 0, 149, 7, 1, 0, 0, 0, 150, 151, 5, 20, 0, 0, 151, 152, 3, 10, 5, 0, 152, 9, 1, 0, 0, 0, 153, 154, 6, 5, -1, 0, 154, 155, 5, 48, 0, 0, 155, 182, 3, 10, 5, 7, 156, 182, 3, 14, 7, 0, 157, 182, 3, 12, 6, 0, 158, 160, 3, 14, 7, 0, 159, 161, 5, 48, 0, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 163, 5, 45, 0, 0, 163, 164, 5, 44, 0, 0, 164, 169, 3, 14, 7, 0, 165, 166, 5, 38, 0, 0, 166, 168, 3, 14, 7, 0, 167, 165, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 5, 54, 0, 0, 173, 182, 1, 0, 0, 0, 174, 175, 3, 14, 7, 0, 175, 177, 5, 46, 0, 0, 176, 178, 5, 48, 0, 0, 177, 176, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 5, 49, 0, 0, 180, 182, 1, 0, 0, 0, 181, 153, 1, 0, 0, 0, 181, 156, 1, 0, 0, 0, 181, 157, 1, 0, 0, 0, 181, 158, 1, 0, 0, 0, 181, 174, 1, 0, 0, 0, 182, 191, 1, 0, 0, 0, 183, 184, 10, 4, 0, 0, 184, 185, 5, 34, 0, 0, 185, 190, 3, 10, 5, 5, 186, 187, 10, 3, 0, 0, 187, 188, 5, 51, 0, 0, 188, 190, 3, 10, 5, 4, 189, 183, 1, 0, 0, 0, 189, 186, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 11, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 194, 196, 3, 14, 7, 0, 195, 197, 5, 48, 0, 0, 196, 195, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 199, 5, 47, 0, 0, 199, 200, 3, 94, 47, 0, 200, 209, 1, 0, 0, 0, 201, 203, 3, 14, 7, 0, 202, 204, 5, 48, 0, 0, 203, 202, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 5, 53, 0, 0, 206, 207, 3, 94, 47, 0, 207, 209, 1, 0, 0, 0, 208, 194, 1, 0, 0, 0, 208, 201, 1, 0, 0, 0, 209, 13, 1, 0, 0, 0, 210, 216, 3, 16, 8, 0, 211, 212, 3, 16, 8, 0, 212, 213, 3, 96, 48, 0, 213, 214, 3, 16, 8, 0, 214, 216, 1, 0, 0, 0, 215, 210, 1, 0, 0, 0, 215, 211, 1, 0, 0, 0, 216, 15, 1, 0, 0, 0, 217, 218, 6, 8, -1, 0, 218, 222, 3, 18, 9, 0, 219, 220, 7, 0, 0, 0, 220, 222, 3, 16, 8, 3, 221, 217, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 222, 231, 1, 0, 0, 0, 223, 224, 10, 2, 0, 0, 224, 225, 7, 1, 0, 0, 225, 230, 3, 16, 8, 3, 226, 227, 10, 1, 0, 0, 227, 228, 7, 0, 0, 0, 228, 230, 3, 16, 8, 2, 229, 223, 1, 0, 0, 0, 229, 226, 1, 0, 0, 0, 230, 233, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 17, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 234, 235, 6, 9, -1, 0, 235, 243, 3, 58, 29, 0, 236, 243, 3, 48, 24, 0, 237, 243, 3, 20, 10, 0, 238, 239, 5, 44, 0, 0, 239, 240, 3, 10, 5, 0, 240, 241, 5, 54, 0, 0, 241, 243, 1, 0, 0, 0, 242, 234, 1, 0, 0, 0, 242, 236, 1, 0, 0, 0, 242, 237, 1, 0, 0, 0, 242, 238, 1, 0, 0, 0, 243, 249, 1, 0, 0, 0, 244, 245, 10, 1, 0, 0, 245, 246, 5, 37, 0, 0, 246, 248, 3, 22, 11, 0, 247, 244, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 19, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 253, 3, 54, 27, 0, 253, 263, 5, 44, 0, 0, 254, 264, 5, 65, 0, 0, 255, 260, 3, 10, 5, 0, 256, 257, 5, 38, 0, 0, 257, 259, 3, 10, 5, 0, 258, 256, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 264, 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 263, 254, 1, 0, 0, 0, 263, 255, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 266, 5, 54, 0, 0, 266, 21, 1, 0, 0, 0, 267, 268, 3, 54, 27, 0, 268, 23, 1, 0, 0, 0, 269, 270, 5, 16, 0, 0, 270, 271, 3, 26, 13, 0, 271, 25, 1, 0, 0, 0, 272, 277, 3, 28, 14, 0, 273, 274, 5, 38, 0, 0, 274, 276, 3, 28, 14, 0, 275, 273, 1, 0, 0, 0, 276, 279, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 27, 1, 0, 0, 0, 279, 277, 1, 0, 0, 0, 280, 286, 3, 10, 5, 0, 281, 282, 3, 48, 24, 0, 282, 283, 5, 36, 0, 0, 283, 284, 3, 10, 5, 0, 284, 286, 1, 0, 0, 0, 285, 280, 1, 0, 0, 0, 285, 281, 1, 0, 0, 0, 286, 29, 1, 0, 0, 0, 287, 288, 5, 6, 0, 0, 288, 293, 3, 32, 16, 0, 289, 290, 5, 38, 0, 0, 290, 292, 3, 32, 16, 0, 291, 289, 1, 0, 0, 0, 292, 295, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 297, 1, 0, 0, 0, 295, 293, 1, 0, 0, 0, 296, 298, 3, 34, 17, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 31, 1, 0, 0, 0, 299, 300, 5, 25, 0, 0, 300, 33, 1, 0, 0, 0, 301, 304, 3, 36, 18, 0, 302, 304, 3, 38, 19, 0, 303, 301, 1, 0, 0, 0, 303, 302, 1, 0, 0, 0, 304, 35, 1, 0, 0, 0, 305, 306, 5, 76, 0, 0, 306, 311, 3, 32, 16, 0, 307, 308, 5, 38, 0, 0, 308, 310, 3, 32, 16, 0, 309, 307, 1, 0, 0, 0, 310, 313, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 37, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 315, 5, 69, 0, 0, 315, 316, 3, 36, 18, 0, 316, 317, 5, 70, 0, 0, 317, 39, 1, 0, 0, 0, 318, 319, 5, 13, 0, 0, 319, 324, 3, 32, 16, 0, 320, 321, 5, 38, 0, 0, 321, 323, 3, 32, 16, 0, 322, 320, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 327, 329, 3, 26, 13, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 331, 5, 33, 0, 0, 331, 333, 3, 26, 13, 0, 332, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 41, 1, 0, 0, 0, 334, 335, 5, 4, 0, 0, 335, 336, 3, 26, 13, 0, 336, 43, 1, 0, 0, 0, 337, 339, 5, 19, 0, 0, 338, 340, 3, 26, 13, 0, 339, 338, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 343, 1, 0, 0, 0, 341, 342, 5, 33, 0, 0, 342, 344, 3, 26, 13, 0, 343, 341, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 45, 1, 0, 0, 0, 345, 346, 5, 8, 0, 0, 346, 349, 3, 26, 13, 0, 347, 348, 5, 33, 0, 0, 348, 350, 3, 26, 13, 0, 349, 347, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 47, 1, 0, 0, 0, 351, 356, 3, 54, 27, 0, 352, 353, 5, 40, 0, 0, 353, 355, 3, 54, 27, 0, 354, 352, 1, 0, 0, 0, 355, 358, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 49, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 359, 364, 3, 56, 28, 0, 360, 361, 5, 40, 0, 0, 361, 363, 3, 56, 28, 0, 362, 360, 1, 0, 0, 0, 363, 366, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 51, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 367, 372, 3, 50, 25, 0, 368, 369, 5, 38, 0, 0, 369, 371, 3, 50, 25, 0, 370, 368, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 53, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 376, 7, 2, 0, 0, 376, 55, 1, 0, 0, 0, 377, 378, 5, 80, 0, 0, 378, 57, 1, 0, 0, 0, 379, 422, 5, 49, 0, 0, 380, 381, 3, 92, 46, 0, 381, 382, 5, 71, 0, 0, 382, 422, 1, 0, 0, 0, 383, 422, 3, 90, 45, 0, 384, 422, 3, 92, 46, 0, 385, 422, 3, 86, 43, 0, 386, 422, 3, 60, 30, 0, 387, 422, 3, 94, 47, 0, 388, 389, 5, 69, 0, 0, 389, 394, 3, 88, 44, 0, 390, 391, 5, 38, 0, 0, 391, 393, 3, 88, 44, 0, 392, 390, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 5, 70, 0, 0, 398, 422, 1, 0, 0, 0, 399, 400, 5, 69, 0, 0, 400, 405, 3, 86, 43, 0, 401, 402, 5, 38, 0, 0, 402, 404, 3, 86, 43, 0, 403, 401, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 408, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 408, 409, 5, 70, 0, 0, 409, 422, 1, 0, 0, 0, 410, 411, 5, 69, 0, 0, 411, 416, 3, 94, 47, 0, 412, 413, 5, 38, 0, 0, 413, 415, 3, 94, 47, 0, 414, 412, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 419, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 420, 5, 70, 0, 0, 420, 422, 1, 0, 0, 0, 421, 379, 1, 0, 0, 0, 421, 380, 1, 0, 0, 0, 421, 383, 1, 0, 0, 0, 421, 384, 1, 0, 0, 0, 421, 385, 1, 0, 0, 0, 421, 386, 1, 0, 0, 0, 421, 387, 1, 0, 0, 0, 421, 388, 1, 0, 0, 0, 421, 399, 1, 0, 0, 0, 421, 410, 1, 0, 0, 0, 422, 59, 1, 0, 0, 0, 423, 426, 5, 52, 0, 0, 424, 426, 5, 68, 0, 0, 425, 423, 1, 0, 0, 0, 425, 424, 1, 0, 0, 0, 426, 61, 1, 0, 0, 0, 427, 428, 5, 10, 0, 0, 428, 429, 5, 31, 0, 0, 429, 63, 1, 0, 0, 0, 430, 431, 5, 18, 0, 0, 431, 436, 3, 66, 33, 0, 432, 433, 5, 38, 0, 0, 433, 435, 3, 66, 33, 0, 434, 432, 1, 0, 0, 0, 435, 438, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 65, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 441, 3, 10, 5, 0, 440, 442, 7, 3, 0, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 444, 5, 50, 0, 0, 444, 446, 7, 4, 0, 0, 445, 443, 1, 0, 0, 0, 445, 446, 1, 0, 0, 0, 446, 67, 1, 0, 0, 0, 447, 448, 5, 9, 0, 0, 448, 449, 3, 52, 26, 0, 449, 69, 1, 0, 0, 0, 450, 451, 5, 2, 0, 0, 451, 452, 3, 52, 26, 0, 452, 71, 1, 0, 0, 0, 453, 454, 5, 15, 0, 0, 454, 459, 3, 74, 37, 0, 455, 456, 5, 38, 0, 0, 456, 458, 3, 74, 37, 0, 457, 455, 1, 0, 0, 0, 458, 461, 1, 0, 0, 0, 459, 457, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 73, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 462, 463, 3, 50, 25, 0, 463, 464, 5, 84, 0, 0, 464, 465, 3, 50, 25, 0, 465, 75, 1, 0, 0, 0, 466, 467, 5, 1, 0, 0, 467, 468, 3, 18, 9, 0, 468, 470, 3, 94, 47, 0, 469, 471, 3, 82, 41, 0, 470, 469, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 77, 1, 0, 0, 0, 472, 473, 5, 7, 0, 0, 473, 474, 3, 18, 9, 0, 474, 475, 3, 94, 47, 0, 475, 79, 1, 0, 0, 0, 476, 477, 5, 14, 0, 0, 477, 478, 3, 48, 24, 0, 478, 81, 1, 0, 0, 0, 479, 484, 3, 84, 42, 0, 480, 481, 5, 38, 0, 0, 481, 483, 3, 84, 42, 0, 482, 480, 1, 0, 0, 0, 483, 486, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 83, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 487, 488, 3, 54, 27, 0, 488, 489, 5, 36, 0, 0, 489, 490, 3, 58, 29, 0, 490, 85, 1, 0, 0, 0, 491, 492, 7, 5, 0, 0, 492, 87, 1, 0, 0, 0, 493, 496, 3, 90, 45, 0, 494, 496, 3, 92, 46, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 89, 1, 0, 0, 0, 497, 499, 7, 0, 0, 0, 498, 497, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 5, 32, 0, 0, 501, 91, 1, 0, 0, 0, 502, 504, 7, 0, 0, 0, 503, 502, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 5, 31, 0, 0, 506, 93, 1, 0, 0, 0, 507, 508, 5, 30, 0, 0, 508, 95, 1, 0, 0, 0, 509, 510, 7, 6, 0, 0, 510, 97, 1, 0, 0, 0, 511, 512, 5, 5, 0, 0, 512, 513, 3, 100, 50, 0, 513, 99, 1, 0, 0, 0, 514, 515, 5, 69, 0, 0, 515, 516, 3, 2, 1, 0, 516, 517, 5, 70, 0, 0, 517, 101, 1, 0, 0, 0, 518, 519, 5, 17, 0, 0, 519, 520, 5, 106, 0, 0, 520, 103, 1, 0, 0, 0, 521, 522, 5, 12, 0, 0, 522, 523, 5, 110, 0, 0, 523, 105, 1, 0, 0, 0, 524, 525, 5, 3, 0, 0, 525, 528, 5, 90, 0, 0, 526, 527, 5, 88, 0, 0, 527, 529, 3, 50, 25, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 539, 1, 0, 0, 0, 530, 531, 5, 89, 0, 0, 531, 536, 3, 108, 54, 0, 532, 533, 5, 38, 0, 0, 533, 535, 3, 108, 54, 0, 534, 532, 1, 0, 0, 0, 535, 538, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 540, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 530, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 107, 1, 0, 0, 0, 541, 542, 3, 50, 25, 0, 542, 543, 5, 36, 0, 0, 543, 545, 1, 0, 0, 0, 544, 541, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 547, 3, 50, 25, 0, 547, 109, 1, 0, 0, 0, 548, 549, 5, 11, 0, 0, 549, 550, 5, 25, 0, 0, 550, 551, 5, 88, 0, 0, 551, 552, 3, 52, 26, 0, 552, 111, 1, 0, 0, 0, 53, 123, 132, 148, 160, 169, 177, 181, 189, 191, 196, 203, 208, 215, 221, 229, 231, 242, 249, 260, 263, 277, 285, 293, 297, 303, 311, 324, 328, 332, 339, 343, 349, 356, 364, 372, 394, 405, 416, 421, 425, 436, 441, 445, 459, 470, 484, 495, 498, 503, 528, 536, 539, 544] \ No newline at end of file diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser.tokens b/packages/kbn-esql-ast/src/antlr/esql_parser.tokens index 30ce0d5eea55b..04798fc3dca8a 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser.tokens +++ b/packages/kbn-esql-ast/src/antlr/esql_parser.tokens @@ -65,62 +65,63 @@ MINUS=64 ASTERISK=65 SLASH=66 PERCENT=67 -OPENING_BRACKET=68 -CLOSING_BRACKET=69 -UNQUOTED_IDENTIFIER=70 -QUOTED_IDENTIFIER=71 -EXPR_LINE_COMMENT=72 -EXPR_MULTILINE_COMMENT=73 -EXPR_WS=74 -METADATA=75 -FROM_LINE_COMMENT=76 -FROM_MULTILINE_COMMENT=77 -FROM_WS=78 -ID_PATTERN=79 -PROJECT_LINE_COMMENT=80 -PROJECT_MULTILINE_COMMENT=81 -PROJECT_WS=82 -AS=83 -RENAME_LINE_COMMENT=84 -RENAME_MULTILINE_COMMENT=85 -RENAME_WS=86 -ON=87 -WITH=88 -ENRICH_POLICY_NAME=89 -ENRICH_LINE_COMMENT=90 -ENRICH_MULTILINE_COMMENT=91 -ENRICH_WS=92 -ENRICH_FIELD_LINE_COMMENT=93 -ENRICH_FIELD_MULTILINE_COMMENT=94 -ENRICH_FIELD_WS=95 -LOOKUP_LINE_COMMENT=96 -LOOKUP_MULTILINE_COMMENT=97 -LOOKUP_WS=98 -LOOKUP_FIELD_LINE_COMMENT=99 -LOOKUP_FIELD_MULTILINE_COMMENT=100 -LOOKUP_FIELD_WS=101 -MVEXPAND_LINE_COMMENT=102 -MVEXPAND_MULTILINE_COMMENT=103 -MVEXPAND_WS=104 -INFO=105 -SHOW_LINE_COMMENT=106 -SHOW_MULTILINE_COMMENT=107 -SHOW_WS=108 -FUNCTIONS=109 -META_LINE_COMMENT=110 -META_MULTILINE_COMMENT=111 -META_WS=112 -COLON=113 -SETTING=114 -SETTING_LINE_COMMENT=115 -SETTTING_MULTILINE_COMMENT=116 -SETTING_WS=117 -METRICS_LINE_COMMENT=118 -METRICS_MULTILINE_COMMENT=119 -METRICS_WS=120 -CLOSING_METRICS_LINE_COMMENT=121 -CLOSING_METRICS_MULTILINE_COMMENT=122 -CLOSING_METRICS_WS=123 +NAMED_OR_POSITIONAL_PARAM=68 +OPENING_BRACKET=69 +CLOSING_BRACKET=70 +UNQUOTED_IDENTIFIER=71 +QUOTED_IDENTIFIER=72 +EXPR_LINE_COMMENT=73 +EXPR_MULTILINE_COMMENT=74 +EXPR_WS=75 +METADATA=76 +FROM_LINE_COMMENT=77 +FROM_MULTILINE_COMMENT=78 +FROM_WS=79 +ID_PATTERN=80 +PROJECT_LINE_COMMENT=81 +PROJECT_MULTILINE_COMMENT=82 +PROJECT_WS=83 +AS=84 +RENAME_LINE_COMMENT=85 +RENAME_MULTILINE_COMMENT=86 +RENAME_WS=87 +ON=88 +WITH=89 +ENRICH_POLICY_NAME=90 +ENRICH_LINE_COMMENT=91 +ENRICH_MULTILINE_COMMENT=92 +ENRICH_WS=93 +ENRICH_FIELD_LINE_COMMENT=94 +ENRICH_FIELD_MULTILINE_COMMENT=95 +ENRICH_FIELD_WS=96 +LOOKUP_LINE_COMMENT=97 +LOOKUP_MULTILINE_COMMENT=98 +LOOKUP_WS=99 +LOOKUP_FIELD_LINE_COMMENT=100 +LOOKUP_FIELD_MULTILINE_COMMENT=101 +LOOKUP_FIELD_WS=102 +MVEXPAND_LINE_COMMENT=103 +MVEXPAND_MULTILINE_COMMENT=104 +MVEXPAND_WS=105 +INFO=106 +SHOW_LINE_COMMENT=107 +SHOW_MULTILINE_COMMENT=108 +SHOW_WS=109 +FUNCTIONS=110 +META_LINE_COMMENT=111 +META_MULTILINE_COMMENT=112 +META_WS=113 +COLON=114 +SETTING=115 +SETTING_LINE_COMMENT=116 +SETTTING_MULTILINE_COMMENT=117 +SETTING_WS=118 +METRICS_LINE_COMMENT=119 +METRICS_MULTILINE_COMMENT=120 +METRICS_WS=121 +CLOSING_METRICS_LINE_COMMENT=122 +CLOSING_METRICS_MULTILINE_COMMENT=123 +CLOSING_METRICS_WS=124 'dissect'=1 'drop'=2 'enrich'=3 @@ -177,11 +178,11 @@ CLOSING_METRICS_WS=123 '*'=65 '/'=66 '%'=67 -']'=69 -'metadata'=75 -'as'=83 -'on'=87 -'with'=88 -'info'=105 -'functions'=109 -':'=113 +']'=70 +'metadata'=76 +'as'=84 +'on'=88 +'with'=89 +'info'=106 +'functions'=110 +':'=114 diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser.ts b/packages/kbn-esql-ast/src/antlr/esql_parser.ts index 7b132ef4a3358..5181349c62c88 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser.ts +++ b/packages/kbn-esql-ast/src/antlr/esql_parser.ts @@ -85,62 +85,63 @@ export default class esql_parser extends Parser { public static readonly ASTERISK = 65; public static readonly SLASH = 66; public static readonly PERCENT = 67; - public static readonly OPENING_BRACKET = 68; - public static readonly CLOSING_BRACKET = 69; - public static readonly UNQUOTED_IDENTIFIER = 70; - public static readonly QUOTED_IDENTIFIER = 71; - public static readonly EXPR_LINE_COMMENT = 72; - public static readonly EXPR_MULTILINE_COMMENT = 73; - public static readonly EXPR_WS = 74; - public static readonly METADATA = 75; - public static readonly FROM_LINE_COMMENT = 76; - public static readonly FROM_MULTILINE_COMMENT = 77; - public static readonly FROM_WS = 78; - public static readonly ID_PATTERN = 79; - public static readonly PROJECT_LINE_COMMENT = 80; - public static readonly PROJECT_MULTILINE_COMMENT = 81; - public static readonly PROJECT_WS = 82; - public static readonly AS = 83; - public static readonly RENAME_LINE_COMMENT = 84; - public static readonly RENAME_MULTILINE_COMMENT = 85; - public static readonly RENAME_WS = 86; - public static readonly ON = 87; - public static readonly WITH = 88; - public static readonly ENRICH_POLICY_NAME = 89; - public static readonly ENRICH_LINE_COMMENT = 90; - public static readonly ENRICH_MULTILINE_COMMENT = 91; - public static readonly ENRICH_WS = 92; - public static readonly ENRICH_FIELD_LINE_COMMENT = 93; - public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 94; - public static readonly ENRICH_FIELD_WS = 95; - public static readonly LOOKUP_LINE_COMMENT = 96; - public static readonly LOOKUP_MULTILINE_COMMENT = 97; - public static readonly LOOKUP_WS = 98; - public static readonly LOOKUP_FIELD_LINE_COMMENT = 99; - public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 100; - public static readonly LOOKUP_FIELD_WS = 101; - public static readonly MVEXPAND_LINE_COMMENT = 102; - public static readonly MVEXPAND_MULTILINE_COMMENT = 103; - public static readonly MVEXPAND_WS = 104; - public static readonly INFO = 105; - public static readonly SHOW_LINE_COMMENT = 106; - public static readonly SHOW_MULTILINE_COMMENT = 107; - public static readonly SHOW_WS = 108; - public static readonly FUNCTIONS = 109; - public static readonly META_LINE_COMMENT = 110; - public static readonly META_MULTILINE_COMMENT = 111; - public static readonly META_WS = 112; - public static readonly COLON = 113; - public static readonly SETTING = 114; - public static readonly SETTING_LINE_COMMENT = 115; - public static readonly SETTTING_MULTILINE_COMMENT = 116; - public static readonly SETTING_WS = 117; - public static readonly METRICS_LINE_COMMENT = 118; - public static readonly METRICS_MULTILINE_COMMENT = 119; - public static readonly METRICS_WS = 120; - public static readonly CLOSING_METRICS_LINE_COMMENT = 121; - public static readonly CLOSING_METRICS_MULTILINE_COMMENT = 122; - public static readonly CLOSING_METRICS_WS = 123; + public static readonly NAMED_OR_POSITIONAL_PARAM = 68; + public static readonly OPENING_BRACKET = 69; + public static readonly CLOSING_BRACKET = 70; + public static readonly UNQUOTED_IDENTIFIER = 71; + public static readonly QUOTED_IDENTIFIER = 72; + public static readonly EXPR_LINE_COMMENT = 73; + public static readonly EXPR_MULTILINE_COMMENT = 74; + public static readonly EXPR_WS = 75; + public static readonly METADATA = 76; + public static readonly FROM_LINE_COMMENT = 77; + public static readonly FROM_MULTILINE_COMMENT = 78; + public static readonly FROM_WS = 79; + public static readonly ID_PATTERN = 80; + public static readonly PROJECT_LINE_COMMENT = 81; + public static readonly PROJECT_MULTILINE_COMMENT = 82; + public static readonly PROJECT_WS = 83; + public static readonly AS = 84; + public static readonly RENAME_LINE_COMMENT = 85; + public static readonly RENAME_MULTILINE_COMMENT = 86; + public static readonly RENAME_WS = 87; + public static readonly ON = 88; + public static readonly WITH = 89; + public static readonly ENRICH_POLICY_NAME = 90; + public static readonly ENRICH_LINE_COMMENT = 91; + public static readonly ENRICH_MULTILINE_COMMENT = 92; + public static readonly ENRICH_WS = 93; + public static readonly ENRICH_FIELD_LINE_COMMENT = 94; + public static readonly ENRICH_FIELD_MULTILINE_COMMENT = 95; + public static readonly ENRICH_FIELD_WS = 96; + public static readonly LOOKUP_LINE_COMMENT = 97; + public static readonly LOOKUP_MULTILINE_COMMENT = 98; + public static readonly LOOKUP_WS = 99; + public static readonly LOOKUP_FIELD_LINE_COMMENT = 100; + public static readonly LOOKUP_FIELD_MULTILINE_COMMENT = 101; + public static readonly LOOKUP_FIELD_WS = 102; + public static readonly MVEXPAND_LINE_COMMENT = 103; + public static readonly MVEXPAND_MULTILINE_COMMENT = 104; + public static readonly MVEXPAND_WS = 105; + public static readonly INFO = 106; + public static readonly SHOW_LINE_COMMENT = 107; + public static readonly SHOW_MULTILINE_COMMENT = 108; + public static readonly SHOW_WS = 109; + public static readonly FUNCTIONS = 110; + public static readonly META_LINE_COMMENT = 111; + public static readonly META_MULTILINE_COMMENT = 112; + public static readonly META_WS = 113; + public static readonly COLON = 114; + public static readonly SETTING = 115; + public static readonly SETTING_LINE_COMMENT = 116; + public static readonly SETTTING_MULTILINE_COMMENT = 117; + public static readonly SETTING_WS = 118; + public static readonly METRICS_LINE_COMMENT = 119; + public static readonly METRICS_MULTILINE_COMMENT = 120; + public static readonly METRICS_WS = 121; + public static readonly CLOSING_METRICS_LINE_COMMENT = 122; + public static readonly CLOSING_METRICS_MULTILINE_COMMENT = 123; + public static readonly CLOSING_METRICS_WS = 124; public static readonly EOF = Token.EOF; public static readonly RULE_singleStatement = 0; public static readonly RULE_query = 1; @@ -172,31 +173,32 @@ export default class esql_parser extends Parser { public static readonly RULE_identifier = 27; public static readonly RULE_identifierPattern = 28; public static readonly RULE_constant = 29; - public static readonly RULE_limitCommand = 30; - public static readonly RULE_sortCommand = 31; - public static readonly RULE_orderExpression = 32; - public static readonly RULE_keepCommand = 33; - public static readonly RULE_dropCommand = 34; - public static readonly RULE_renameCommand = 35; - public static readonly RULE_renameClause = 36; - public static readonly RULE_dissectCommand = 37; - public static readonly RULE_grokCommand = 38; - public static readonly RULE_mvExpandCommand = 39; - public static readonly RULE_commandOptions = 40; - public static readonly RULE_commandOption = 41; - public static readonly RULE_booleanValue = 42; - public static readonly RULE_numericValue = 43; - public static readonly RULE_decimalValue = 44; - public static readonly RULE_integerValue = 45; - public static readonly RULE_string = 46; - public static readonly RULE_comparisonOperator = 47; - public static readonly RULE_explainCommand = 48; - public static readonly RULE_subqueryExpression = 49; - public static readonly RULE_showCommand = 50; - public static readonly RULE_metaCommand = 51; - public static readonly RULE_enrichCommand = 52; - public static readonly RULE_enrichWithClause = 53; - public static readonly RULE_lookupCommand = 54; + public static readonly RULE_params = 30; + public static readonly RULE_limitCommand = 31; + public static readonly RULE_sortCommand = 32; + public static readonly RULE_orderExpression = 33; + public static readonly RULE_keepCommand = 34; + public static readonly RULE_dropCommand = 35; + public static readonly RULE_renameCommand = 36; + public static readonly RULE_renameClause = 37; + public static readonly RULE_dissectCommand = 38; + public static readonly RULE_grokCommand = 39; + public static readonly RULE_mvExpandCommand = 40; + public static readonly RULE_commandOptions = 41; + public static readonly RULE_commandOption = 42; + public static readonly RULE_booleanValue = 43; + public static readonly RULE_numericValue = 44; + public static readonly RULE_decimalValue = 45; + public static readonly RULE_integerValue = 46; + public static readonly RULE_string = 47; + public static readonly RULE_comparisonOperator = 48; + public static readonly RULE_explainCommand = 49; + public static readonly RULE_subqueryExpression = 50; + public static readonly RULE_showCommand = 51; + public static readonly RULE_metaCommand = 52; + public static readonly RULE_enrichCommand = 53; + public static readonly RULE_enrichWithClause = 54; + public static readonly RULE_lookupCommand = 55; public static readonly literalNames: (string | null)[] = [ null, "'dissect'", "'drop'", "'enrich'", "'eval'", "'explain'", @@ -233,10 +235,11 @@ export default class esql_parser extends Parser { "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", - null, "']'", null, null, + "']'", null, null, null, - null, "'metadata'", + null, null, + "'metadata'", null, null, null, null, null, null, @@ -296,6 +299,7 @@ export default class esql_parser extends Parser { "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", + "NAMED_OR_POSITIONAL_PARAM", "OPENING_BRACKET", "CLOSING_BRACKET", "UNQUOTED_IDENTIFIER", @@ -356,9 +360,9 @@ export default class esql_parser extends Parser { "field", "fromCommand", "indexIdentifier", "metadata", "metadataOption", "deprecated_metadata", "metricsCommand", "evalCommand", "statsCommand", "inlinestatsCommand", "qualifiedName", "qualifiedNamePattern", "qualifiedNamePatterns", - "identifier", "identifierPattern", "constant", "limitCommand", "sortCommand", - "orderExpression", "keepCommand", "dropCommand", "renameCommand", "renameClause", - "dissectCommand", "grokCommand", "mvExpandCommand", "commandOptions", + "identifier", "identifierPattern", "constant", "params", "limitCommand", + "sortCommand", "orderExpression", "keepCommand", "dropCommand", "renameCommand", + "renameClause", "dissectCommand", "grokCommand", "mvExpandCommand", "commandOptions", "commandOption", "booleanValue", "numericValue", "decimalValue", "integerValue", "string", "comparisonOperator", "explainCommand", "subqueryExpression", "showCommand", "metaCommand", "enrichCommand", "enrichWithClause", "lookupCommand", @@ -384,9 +388,9 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 110; + this.state = 112; this.query(0); - this.state = 111; + this.state = 113; this.match(esql_parser.EOF); } } @@ -428,11 +432,11 @@ export default class esql_parser extends Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 114; + this.state = 116; this.sourceCommand(); } this._ctx.stop = this._input.LT(-1); - this.state = 121; + this.state = 123; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 0, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -445,18 +449,18 @@ export default class esql_parser extends Parser { { localctx = new CompositeQueryContext(this, new QueryContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_query); - this.state = 116; + this.state = 118; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 117; + this.state = 119; this.match(esql_parser.PIPE); - this.state = 118; + this.state = 120; this.processingCommand(); } } } - this.state = 123; + this.state = 125; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 0, this._ctx); } @@ -481,48 +485,48 @@ export default class esql_parser extends Parser { let localctx: SourceCommandContext = new SourceCommandContext(this, this._ctx, this.state); this.enterRule(localctx, 4, esql_parser.RULE_sourceCommand); try { - this.state = 130; + this.state = 132; this._errHandler.sync(this); switch (this._input.LA(1)) { case 5: this.enterOuterAlt(localctx, 1); { - this.state = 124; + this.state = 126; this.explainCommand(); } break; case 6: this.enterOuterAlt(localctx, 2); { - this.state = 125; + this.state = 127; this.fromCommand(); } break; case 16: this.enterOuterAlt(localctx, 3); { - this.state = 126; + this.state = 128; this.rowCommand(); } break; case 13: this.enterOuterAlt(localctx, 4); { - this.state = 127; + this.state = 129; this.metricsCommand(); } break; case 17: this.enterOuterAlt(localctx, 5); { - this.state = 128; + this.state = 130; this.showCommand(); } break; case 12: this.enterOuterAlt(localctx, 6); { - this.state = 129; + this.state = 131; this.metaCommand(); } break; @@ -549,104 +553,104 @@ export default class esql_parser extends Parser { let localctx: ProcessingCommandContext = new ProcessingCommandContext(this, this._ctx, this.state); this.enterRule(localctx, 6, esql_parser.RULE_processingCommand); try { - this.state = 146; + this.state = 148; this._errHandler.sync(this); switch (this._input.LA(1)) { case 4: this.enterOuterAlt(localctx, 1); { - this.state = 132; + this.state = 134; this.evalCommand(); } break; case 8: this.enterOuterAlt(localctx, 2); { - this.state = 133; + this.state = 135; this.inlinestatsCommand(); } break; case 10: this.enterOuterAlt(localctx, 3); { - this.state = 134; + this.state = 136; this.limitCommand(); } break; case 11: this.enterOuterAlt(localctx, 4); { - this.state = 135; + this.state = 137; this.lookupCommand(); } break; case 9: this.enterOuterAlt(localctx, 5); { - this.state = 136; + this.state = 138; this.keepCommand(); } break; case 18: this.enterOuterAlt(localctx, 6); { - this.state = 137; + this.state = 139; this.sortCommand(); } break; case 19: this.enterOuterAlt(localctx, 7); { - this.state = 138; + this.state = 140; this.statsCommand(); } break; case 20: this.enterOuterAlt(localctx, 8); { - this.state = 139; + this.state = 141; this.whereCommand(); } break; case 2: this.enterOuterAlt(localctx, 9); { - this.state = 140; + this.state = 142; this.dropCommand(); } break; case 15: this.enterOuterAlt(localctx, 10); { - this.state = 141; + this.state = 143; this.renameCommand(); } break; case 1: this.enterOuterAlt(localctx, 11); { - this.state = 142; + this.state = 144; this.dissectCommand(); } break; case 7: this.enterOuterAlt(localctx, 12); { - this.state = 143; + this.state = 145; this.grokCommand(); } break; case 3: this.enterOuterAlt(localctx, 13); { - this.state = 144; + this.state = 146; this.enrichCommand(); } break; case 14: this.enterOuterAlt(localctx, 14); { - this.state = 145; + this.state = 147; this.mvExpandCommand(); } break; @@ -675,9 +679,9 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 148; + this.state = 150; this.match(esql_parser.WHERE); - this.state = 149; + this.state = 151; this.booleanExpression(0); } } @@ -715,7 +719,7 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 179; + this.state = 181; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 6, this._ctx) ) { case 1: @@ -724,9 +728,9 @@ export default class esql_parser extends Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 152; + this.state = 154; this.match(esql_parser.NOT); - this.state = 153; + this.state = 155; this.booleanExpression(7); } break; @@ -735,7 +739,7 @@ export default class esql_parser extends Parser { localctx = new BooleanDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 154; + this.state = 156; this.valueExpression(); } break; @@ -744,7 +748,7 @@ export default class esql_parser extends Parser { localctx = new RegexExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 155; + this.state = 157; this.regexBooleanExpression(); } break; @@ -753,41 +757,41 @@ export default class esql_parser extends Parser { localctx = new LogicalInContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 156; - this.valueExpression(); this.state = 158; + this.valueExpression(); + this.state = 160; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===48) { { - this.state = 157; + this.state = 159; this.match(esql_parser.NOT); } } - this.state = 160; + this.state = 162; this.match(esql_parser.IN); - this.state = 161; + this.state = 163; this.match(esql_parser.LP); - this.state = 162; + this.state = 164; this.valueExpression(); - this.state = 167; + this.state = 169; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===38) { { { - this.state = 163; + this.state = 165; this.match(esql_parser.COMMA); - this.state = 164; + this.state = 166; this.valueExpression(); } } - this.state = 169; + this.state = 171; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 170; + this.state = 172; this.match(esql_parser.RP); } break; @@ -796,27 +800,27 @@ export default class esql_parser extends Parser { localctx = new IsNullContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 172; + this.state = 174; this.valueExpression(); - this.state = 173; - this.match(esql_parser.IS); this.state = 175; + this.match(esql_parser.IS); + this.state = 177; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===48) { { - this.state = 174; + this.state = 176; this.match(esql_parser.NOT); } } - this.state = 177; + this.state = 179; this.match(esql_parser.NULL); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 189; + this.state = 191; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 8, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -826,7 +830,7 @@ export default class esql_parser extends Parser { } _prevctx = localctx; { - this.state = 187; + this.state = 189; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 7, this._ctx) ) { case 1: @@ -834,13 +838,13 @@ export default class esql_parser extends Parser { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 181; + this.state = 183; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 182; + this.state = 184; (localctx as LogicalBinaryContext)._operator = this.match(esql_parser.AND); - this.state = 183; + this.state = 185; (localctx as LogicalBinaryContext)._right = this.booleanExpression(5); } break; @@ -849,20 +853,20 @@ export default class esql_parser extends Parser { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_booleanExpression); - this.state = 184; + this.state = 186; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 185; + this.state = 187; (localctx as LogicalBinaryContext)._operator = this.match(esql_parser.OR); - this.state = 186; + this.state = 188; (localctx as LogicalBinaryContext)._right = this.booleanExpression(4); } break; } } } - this.state = 191; + this.state = 193; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 8, this._ctx); } @@ -888,48 +892,48 @@ export default class esql_parser extends Parser { this.enterRule(localctx, 12, esql_parser.RULE_regexBooleanExpression); let _la: number; try { - this.state = 206; + this.state = 208; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 11, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 192; - this.valueExpression(); this.state = 194; + this.valueExpression(); + this.state = 196; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===48) { { - this.state = 193; + this.state = 195; this.match(esql_parser.NOT); } } - this.state = 196; + this.state = 198; localctx._kind = this.match(esql_parser.LIKE); - this.state = 197; + this.state = 199; localctx._pattern = this.string_(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 199; - this.valueExpression(); this.state = 201; + this.valueExpression(); + this.state = 203; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===48) { { - this.state = 200; + this.state = 202; this.match(esql_parser.NOT); } } - this.state = 203; + this.state = 205; localctx._kind = this.match(esql_parser.RLIKE); - this.state = 204; + this.state = 206; localctx._pattern = this.string_(); } break; @@ -954,14 +958,14 @@ export default class esql_parser extends Parser { let localctx: ValueExpressionContext = new ValueExpressionContext(this, this._ctx, this.state); this.enterRule(localctx, 14, esql_parser.RULE_valueExpression); try { - this.state = 213; + this.state = 215; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 12, this._ctx) ) { case 1: localctx = new ValueExpressionDefaultContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 208; + this.state = 210; this.operatorExpression(0); } break; @@ -969,11 +973,11 @@ export default class esql_parser extends Parser { localctx = new ComparisonContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 209; + this.state = 211; (localctx as ComparisonContext)._left = this.operatorExpression(0); - this.state = 210; + this.state = 212; this.comparisonOperator(); - this.state = 211; + this.state = 213; (localctx as ComparisonContext)._right = this.operatorExpression(0); } break; @@ -1013,7 +1017,7 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 219; + this.state = 221; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 13, this._ctx) ) { case 1: @@ -1022,7 +1026,7 @@ export default class esql_parser extends Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 216; + this.state = 218; this.primaryExpression(0); } break; @@ -1031,7 +1035,7 @@ export default class esql_parser extends Parser { localctx = new ArithmeticUnaryContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 217; + this.state = 219; (localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(_la===63 || _la===64)) { @@ -1041,13 +1045,13 @@ export default class esql_parser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 218; + this.state = 220; this.operatorExpression(3); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 229; + this.state = 231; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 15, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -1057,7 +1061,7 @@ export default class esql_parser extends Parser { } _prevctx = localctx; { - this.state = 227; + this.state = 229; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 14, this._ctx) ) { case 1: @@ -1065,11 +1069,11 @@ export default class esql_parser extends Parser { localctx = new ArithmeticBinaryContext(this, new OperatorExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 221; + this.state = 223; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 222; + this.state = 224; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 7) !== 0))) { @@ -1079,7 +1083,7 @@ export default class esql_parser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 223; + this.state = 225; (localctx as ArithmeticBinaryContext)._right = this.operatorExpression(3); } break; @@ -1088,11 +1092,11 @@ export default class esql_parser extends Parser { localctx = new ArithmeticBinaryContext(this, new OperatorExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_operatorExpression); - this.state = 224; + this.state = 226; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 225; + this.state = 227; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(_la===63 || _la===64)) { @@ -1102,14 +1106,14 @@ export default class esql_parser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 226; + this.state = 228; (localctx as ArithmeticBinaryContext)._right = this.operatorExpression(2); } break; } } } - this.state = 231; + this.state = 233; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 15, this._ctx); } @@ -1148,7 +1152,7 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 240; + this.state = 242; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 16, this._ctx) ) { case 1: @@ -1157,7 +1161,7 @@ export default class esql_parser extends Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 233; + this.state = 235; this.constant(); } break; @@ -1166,7 +1170,7 @@ export default class esql_parser extends Parser { localctx = new DereferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 234; + this.state = 236; this.qualifiedName(); } break; @@ -1175,7 +1179,7 @@ export default class esql_parser extends Parser { localctx = new FunctionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 235; + this.state = 237; this.functionExpression(); } break; @@ -1184,17 +1188,17 @@ export default class esql_parser extends Parser { localctx = new ParenthesizedExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 236; + this.state = 238; this.match(esql_parser.LP); - this.state = 237; + this.state = 239; this.booleanExpression(0); - this.state = 238; + this.state = 240; this.match(esql_parser.RP); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 247; + this.state = 249; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 17, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -1207,18 +1211,18 @@ export default class esql_parser extends Parser { { localctx = new InlineCastContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); this.pushNewRecursionContext(localctx, _startState, esql_parser.RULE_primaryExpression); - this.state = 242; + this.state = 244; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 243; + this.state = 245; this.match(esql_parser.CAST_OP); - this.state = 244; + this.state = 246; this.dataType(); } } } - this.state = 249; + this.state = 251; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 17, this._ctx); } @@ -1246,16 +1250,16 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 250; + this.state = 252; this.identifier(); - this.state = 251; + this.state = 253; this.match(esql_parser.LP); - this.state = 261; + this.state = 263; this._errHandler.sync(this); switch (this._input.LA(1)) { case 65: { - this.state = 252; + this.state = 254; this.match(esql_parser.ASTERISK); } break; @@ -1271,25 +1275,26 @@ export default class esql_parser extends Parser { case 63: case 64: case 68: - case 70: + case 69: case 71: + case 72: { { - this.state = 253; + this.state = 255; this.booleanExpression(0); - this.state = 258; + this.state = 260; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===38) { { { - this.state = 254; + this.state = 256; this.match(esql_parser.COMMA); - this.state = 255; + this.state = 257; this.booleanExpression(0); } } - this.state = 260; + this.state = 262; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1301,7 +1306,7 @@ export default class esql_parser extends Parser { default: break; } - this.state = 263; + this.state = 265; this.match(esql_parser.RP); } } @@ -1327,7 +1332,7 @@ export default class esql_parser extends Parser { localctx = new ToDataTypeContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 265; + this.state = 267; this.identifier(); } } @@ -1352,9 +1357,9 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 267; + this.state = 269; this.match(esql_parser.ROW); - this.state = 268; + this.state = 270; this.fields(); } } @@ -1380,23 +1385,23 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 270; + this.state = 272; this.field(); - this.state = 275; + this.state = 277; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 20, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 271; + this.state = 273; this.match(esql_parser.COMMA); - this.state = 272; + this.state = 274; this.field(); } } } - this.state = 277; + this.state = 279; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 20, this._ctx); } @@ -1421,24 +1426,24 @@ export default class esql_parser extends Parser { let localctx: FieldContext = new FieldContext(this, this._ctx, this.state); this.enterRule(localctx, 28, esql_parser.RULE_field); try { - this.state = 283; + this.state = 285; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 21, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 278; + this.state = 280; this.booleanExpression(0); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 279; + this.state = 281; this.qualifiedName(); - this.state = 280; + this.state = 282; this.match(esql_parser.ASSIGN); - this.state = 281; + this.state = 283; this.booleanExpression(0); } break; @@ -1466,34 +1471,34 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 285; + this.state = 287; this.match(esql_parser.FROM); - this.state = 286; + this.state = 288; this.indexIdentifier(); - this.state = 291; + this.state = 293; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 22, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 287; + this.state = 289; this.match(esql_parser.COMMA); - this.state = 288; + this.state = 290; this.indexIdentifier(); } } } - this.state = 293; + this.state = 295; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 22, this._ctx); } - this.state = 295; + this.state = 297; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 23, this._ctx) ) { case 1: { - this.state = 294; + this.state = 296; this.metadata(); } break; @@ -1521,7 +1526,7 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 297; + this.state = 299; this.match(esql_parser.INDEX_UNQUOTED_IDENTIFIER); } } @@ -1544,20 +1549,20 @@ export default class esql_parser extends Parser { let localctx: MetadataContext = new MetadataContext(this, this._ctx, this.state); this.enterRule(localctx, 34, esql_parser.RULE_metadata); try { - this.state = 301; + this.state = 303; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 75: + case 76: this.enterOuterAlt(localctx, 1); { - this.state = 299; + this.state = 301; this.metadataOption(); } break; - case 68: + case 69: this.enterOuterAlt(localctx, 2); { - this.state = 300; + this.state = 302; this.deprecated_metadata(); } break; @@ -1587,25 +1592,25 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 303; + this.state = 305; this.match(esql_parser.METADATA); - this.state = 304; + this.state = 306; this.indexIdentifier(); - this.state = 309; + this.state = 311; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 25, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 305; + this.state = 307; this.match(esql_parser.COMMA); - this.state = 306; + this.state = 308; this.indexIdentifier(); } } } - this.state = 311; + this.state = 313; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 25, this._ctx); } @@ -1632,11 +1637,11 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 312; + this.state = 314; this.match(esql_parser.OPENING_BRACKET); - this.state = 313; + this.state = 315; this.metadataOption(); - this.state = 314; + this.state = 316; this.match(esql_parser.CLOSING_BRACKET); } } @@ -1662,46 +1667,46 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 316; + this.state = 318; this.match(esql_parser.METRICS); - this.state = 317; + this.state = 319; this.indexIdentifier(); - this.state = 322; + this.state = 324; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 26, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 318; + this.state = 320; this.match(esql_parser.COMMA); - this.state = 319; + this.state = 321; this.indexIdentifier(); } } } - this.state = 324; + this.state = 326; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 26, this._ctx); } - this.state = 326; + this.state = 328; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 27, this._ctx) ) { case 1: { - this.state = 325; + this.state = 327; localctx._aggregates = this.fields(); } break; } - this.state = 330; + this.state = 332; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 28, this._ctx) ) { case 1: { - this.state = 328; + this.state = 330; this.match(esql_parser.BY); - this.state = 329; + this.state = 331; localctx._grouping = this.fields(); } break; @@ -1729,9 +1734,9 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 332; + this.state = 334; this.match(esql_parser.EVAL); - this.state = 333; + this.state = 335; this.fields(); } } @@ -1756,26 +1761,26 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 335; - this.match(esql_parser.STATS); this.state = 337; + this.match(esql_parser.STATS); + this.state = 339; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 29, this._ctx) ) { case 1: { - this.state = 336; + this.state = 338; localctx._stats = this.fields(); } break; } - this.state = 341; + this.state = 343; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 30, this._ctx) ) { case 1: { - this.state = 339; + this.state = 341; this.match(esql_parser.BY); - this.state = 340; + this.state = 342; localctx._grouping = this.fields(); } break; @@ -1803,18 +1808,18 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 343; + this.state = 345; this.match(esql_parser.INLINESTATS); - this.state = 344; + this.state = 346; localctx._stats = this.fields(); - this.state = 347; + this.state = 349; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 31, this._ctx) ) { case 1: { - this.state = 345; + this.state = 347; this.match(esql_parser.BY); - this.state = 346; + this.state = 348; localctx._grouping = this.fields(); } break; @@ -1843,23 +1848,23 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 349; + this.state = 351; this.identifier(); - this.state = 354; + this.state = 356; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 32, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 350; + this.state = 352; this.match(esql_parser.DOT); - this.state = 351; + this.state = 353; this.identifier(); } } } - this.state = 356; + this.state = 358; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 32, this._ctx); } @@ -1887,23 +1892,23 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 357; + this.state = 359; this.identifierPattern(); - this.state = 362; + this.state = 364; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 33, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 358; + this.state = 360; this.match(esql_parser.DOT); - this.state = 359; + this.state = 361; this.identifierPattern(); } } } - this.state = 364; + this.state = 366; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 33, this._ctx); } @@ -1931,23 +1936,23 @@ export default class esql_parser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 365; + this.state = 367; this.qualifiedNamePattern(); - this.state = 370; + this.state = 372; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 34, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 366; + this.state = 368; this.match(esql_parser.COMMA); - this.state = 367; + this.state = 369; this.qualifiedNamePattern(); } } } - this.state = 372; + this.state = 374; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 34, this._ctx); } @@ -1975,9 +1980,9 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 373; + this.state = 375; _la = this._input.LA(1); - if(!(_la===70 || _la===71)) { + if(!(_la===71 || _la===72)) { this._errHandler.recoverInline(this); } else { @@ -2007,7 +2012,7 @@ export default class esql_parser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 375; + this.state = 377; this.match(esql_parser.ID_PATTERN); } } @@ -2031,14 +2036,14 @@ export default class esql_parser extends Parser { this.enterRule(localctx, 58, esql_parser.RULE_constant); let _la: number; try { - this.state = 419; + this.state = 421; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 38, this._ctx) ) { case 1: localctx = new NullLiteralContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 377; + this.state = 379; this.match(esql_parser.NULL); } break; @@ -2046,9 +2051,9 @@ export default class esql_parser extends Parser { localctx = new QualifiedIntegerLiteralContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 378; + this.state = 380; this.integerValue(); - this.state = 379; + this.state = 381; this.match(esql_parser.UNQUOTED_IDENTIFIER); } break; @@ -2056,7 +2061,7 @@ export default class esql_parser extends Parser { localctx = new DecimalLiteralContext(this, localctx); this.enterOuterAlt(localctx, 3); { - this.state = 381; + this.state = 383; this.decimalValue(); } break; @@ -2064,7 +2069,7 @@ export default class esql_parser extends Parser { localctx = new IntegerLiteralContext(this, localctx); this.enterOuterAlt(localctx, 4); { - this.state = 382; + this.state = 384; this.integerValue(); } break; @@ -2072,23 +2077,23 @@ export default class esql_parser extends Parser { localctx = new BooleanLiteralContext(this, localctx); this.enterOuterAlt(localctx, 5); { - this.state = 383; + this.state = 385; this.booleanValue(); } break; case 6: - localctx = new InputParamContext(this, localctx); + localctx = new InputParamsContext(this, localctx); this.enterOuterAlt(localctx, 6); { - this.state = 384; - this.match(esql_parser.PARAM); + this.state = 386; + this.params(); } break; case 7: localctx = new StringLiteralContext(this, localctx); this.enterOuterAlt(localctx, 7); { - this.state = 385; + this.state = 387; this.string_(); } break; @@ -2096,27 +2101,27 @@ export default class esql_parser extends Parser { localctx = new NumericArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 8); { - this.state = 386; + this.state = 388; this.match(esql_parser.OPENING_BRACKET); - this.state = 387; + this.state = 389; this.numericValue(); - this.state = 392; + this.state = 394; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===38) { { { - this.state = 388; + this.state = 390; this.match(esql_parser.COMMA); - this.state = 389; + this.state = 391; this.numericValue(); } } - this.state = 394; + this.state = 396; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 395; + this.state = 397; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -2124,27 +2129,27 @@ export default class esql_parser extends Parser { localctx = new BooleanArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 9); { - this.state = 397; + this.state = 399; this.match(esql_parser.OPENING_BRACKET); - this.state = 398; + this.state = 400; this.booleanValue(); - this.state = 403; + this.state = 405; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===38) { { { - this.state = 399; + this.state = 401; this.match(esql_parser.COMMA); - this.state = 400; + this.state = 402; this.booleanValue(); } } - this.state = 405; + this.state = 407; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 406; + this.state = 408; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -2152,27 +2157,27 @@ export default class esql_parser extends Parser { localctx = new StringArrayLiteralContext(this, localctx); this.enterOuterAlt(localctx, 10); { - this.state = 408; + this.state = 410; this.match(esql_parser.OPENING_BRACKET); - this.state = 409; + this.state = 411; this.string_(); - this.state = 414; + this.state = 416; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===38) { { { - this.state = 410; + this.state = 412; this.match(esql_parser.COMMA); - this.state = 411; + this.state = 413; this.string_(); } } - this.state = 416; + this.state = 418; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 417; + this.state = 419; this.match(esql_parser.CLOSING_BRACKET); } break; @@ -2193,15 +2198,57 @@ export default class esql_parser extends Parser { return localctx; } // @RuleVersion(0) + public params(): ParamsContext { + let localctx: ParamsContext = new ParamsContext(this, this._ctx, this.state); + this.enterRule(localctx, 60, esql_parser.RULE_params); + try { + this.state = 425; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 52: + localctx = new InputParamContext(this, localctx); + this.enterOuterAlt(localctx, 1); + { + this.state = 423; + this.match(esql_parser.PARAM); + } + break; + case 68: + localctx = new InputNamedOrPositionalParamContext(this, localctx); + this.enterOuterAlt(localctx, 2); + { + this.state = 424; + this.match(esql_parser.NAMED_OR_POSITIONAL_PARAM); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) public limitCommand(): LimitCommandContext { let localctx: LimitCommandContext = new LimitCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 60, esql_parser.RULE_limitCommand); + this.enterRule(localctx, 62, esql_parser.RULE_limitCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 421; + this.state = 427; this.match(esql_parser.LIMIT); - this.state = 422; + this.state = 428; this.match(esql_parser.INTEGER_LITERAL); } } @@ -2222,32 +2269,32 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public sortCommand(): SortCommandContext { let localctx: SortCommandContext = new SortCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 62, esql_parser.RULE_sortCommand); + this.enterRule(localctx, 64, esql_parser.RULE_sortCommand); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 424; + this.state = 430; this.match(esql_parser.SORT); - this.state = 425; + this.state = 431; this.orderExpression(); - this.state = 430; + this.state = 436; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 39, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 40, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 426; + this.state = 432; this.match(esql_parser.COMMA); - this.state = 427; + this.state = 433; this.orderExpression(); } } } - this.state = 432; + this.state = 438; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 39, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 40, this._ctx); } } } @@ -2268,19 +2315,19 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public orderExpression(): OrderExpressionContext { let localctx: OrderExpressionContext = new OrderExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 64, esql_parser.RULE_orderExpression); + this.enterRule(localctx, 66, esql_parser.RULE_orderExpression); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 433; + this.state = 439; this.booleanExpression(0); - this.state = 435; + this.state = 441; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 40, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 41, this._ctx) ) { case 1: { - this.state = 434; + this.state = 440; localctx._ordering = this._input.LT(1); _la = this._input.LA(1); if(!(_la===35 || _la===39)) { @@ -2293,14 +2340,14 @@ export default class esql_parser extends Parser { } break; } - this.state = 439; + this.state = 445; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 41, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 42, this._ctx) ) { case 1: { - this.state = 437; + this.state = 443; this.match(esql_parser.NULLS); - this.state = 438; + this.state = 444; localctx._nullOrdering = this._input.LT(1); _la = this._input.LA(1); if(!(_la===42 || _la===43)) { @@ -2332,13 +2379,13 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public keepCommand(): KeepCommandContext { let localctx: KeepCommandContext = new KeepCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 66, esql_parser.RULE_keepCommand); + this.enterRule(localctx, 68, esql_parser.RULE_keepCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 441; + this.state = 447; this.match(esql_parser.KEEP); - this.state = 442; + this.state = 448; this.qualifiedNamePatterns(); } } @@ -2359,13 +2406,13 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public dropCommand(): DropCommandContext { let localctx: DropCommandContext = new DropCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 68, esql_parser.RULE_dropCommand); + this.enterRule(localctx, 70, esql_parser.RULE_dropCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 444; + this.state = 450; this.match(esql_parser.DROP); - this.state = 445; + this.state = 451; this.qualifiedNamePatterns(); } } @@ -2386,32 +2433,32 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public renameCommand(): RenameCommandContext { let localctx: RenameCommandContext = new RenameCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 70, esql_parser.RULE_renameCommand); + this.enterRule(localctx, 72, esql_parser.RULE_renameCommand); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 447; + this.state = 453; this.match(esql_parser.RENAME); - this.state = 448; + this.state = 454; this.renameClause(); - this.state = 453; + this.state = 459; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 42, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 43, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 449; + this.state = 455; this.match(esql_parser.COMMA); - this.state = 450; + this.state = 456; this.renameClause(); } } } - this.state = 455; + this.state = 461; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 42, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 43, this._ctx); } } } @@ -2432,15 +2479,15 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public renameClause(): RenameClauseContext { let localctx: RenameClauseContext = new RenameClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 72, esql_parser.RULE_renameClause); + this.enterRule(localctx, 74, esql_parser.RULE_renameClause); try { this.enterOuterAlt(localctx, 1); { - this.state = 456; + this.state = 462; localctx._oldName = this.qualifiedNamePattern(); - this.state = 457; + this.state = 463; this.match(esql_parser.AS); - this.state = 458; + this.state = 464; localctx._newName = this.qualifiedNamePattern(); } } @@ -2461,22 +2508,22 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public dissectCommand(): DissectCommandContext { let localctx: DissectCommandContext = new DissectCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 74, esql_parser.RULE_dissectCommand); + this.enterRule(localctx, 76, esql_parser.RULE_dissectCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 460; + this.state = 466; this.match(esql_parser.DISSECT); - this.state = 461; + this.state = 467; this.primaryExpression(0); - this.state = 462; + this.state = 468; this.string_(); - this.state = 464; + this.state = 470; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 43, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 44, this._ctx) ) { case 1: { - this.state = 463; + this.state = 469; this.commandOptions(); } break; @@ -2500,15 +2547,15 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public grokCommand(): GrokCommandContext { let localctx: GrokCommandContext = new GrokCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 76, esql_parser.RULE_grokCommand); + this.enterRule(localctx, 78, esql_parser.RULE_grokCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 466; + this.state = 472; this.match(esql_parser.GROK); - this.state = 467; + this.state = 473; this.primaryExpression(0); - this.state = 468; + this.state = 474; this.string_(); } } @@ -2529,13 +2576,13 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public mvExpandCommand(): MvExpandCommandContext { let localctx: MvExpandCommandContext = new MvExpandCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 78, esql_parser.RULE_mvExpandCommand); + this.enterRule(localctx, 80, esql_parser.RULE_mvExpandCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 470; + this.state = 476; this.match(esql_parser.MV_EXPAND); - this.state = 471; + this.state = 477; this.qualifiedName(); } } @@ -2556,30 +2603,30 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public commandOptions(): CommandOptionsContext { let localctx: CommandOptionsContext = new CommandOptionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 80, esql_parser.RULE_commandOptions); + this.enterRule(localctx, 82, esql_parser.RULE_commandOptions); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 473; + this.state = 479; this.commandOption(); - this.state = 478; + this.state = 484; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 44, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 45, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 474; + this.state = 480; this.match(esql_parser.COMMA); - this.state = 475; + this.state = 481; this.commandOption(); } } } - this.state = 480; + this.state = 486; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 44, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 45, this._ctx); } } } @@ -2600,15 +2647,15 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public commandOption(): CommandOptionContext { let localctx: CommandOptionContext = new CommandOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 82, esql_parser.RULE_commandOption); + this.enterRule(localctx, 84, esql_parser.RULE_commandOption); try { this.enterOuterAlt(localctx, 1); { - this.state = 481; + this.state = 487; this.identifier(); - this.state = 482; + this.state = 488; this.match(esql_parser.ASSIGN); - this.state = 483; + this.state = 489; this.constant(); } } @@ -2629,12 +2676,12 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public booleanValue(): BooleanValueContext { let localctx: BooleanValueContext = new BooleanValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 84, esql_parser.RULE_booleanValue); + this.enterRule(localctx, 86, esql_parser.RULE_booleanValue); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 485; + this.state = 491; _la = this._input.LA(1); if(!(_la===41 || _la===55)) { this._errHandler.recoverInline(this); @@ -2662,22 +2709,22 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public numericValue(): NumericValueContext { let localctx: NumericValueContext = new NumericValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 86, esql_parser.RULE_numericValue); + this.enterRule(localctx, 88, esql_parser.RULE_numericValue); try { - this.state = 489; + this.state = 495; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 45, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 46, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 487; + this.state = 493; this.decimalValue(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 488; + this.state = 494; this.integerValue(); } break; @@ -2700,17 +2747,17 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public decimalValue(): DecimalValueContext { let localctx: DecimalValueContext = new DecimalValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 88, esql_parser.RULE_decimalValue); + this.enterRule(localctx, 90, esql_parser.RULE_decimalValue); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 492; + this.state = 498; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===63 || _la===64) { { - this.state = 491; + this.state = 497; _la = this._input.LA(1); if(!(_la===63 || _la===64)) { this._errHandler.recoverInline(this); @@ -2722,7 +2769,7 @@ export default class esql_parser extends Parser { } } - this.state = 494; + this.state = 500; this.match(esql_parser.DECIMAL_LITERAL); } } @@ -2743,17 +2790,17 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public integerValue(): IntegerValueContext { let localctx: IntegerValueContext = new IntegerValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 90, esql_parser.RULE_integerValue); + this.enterRule(localctx, 92, esql_parser.RULE_integerValue); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 497; + this.state = 503; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===63 || _la===64) { { - this.state = 496; + this.state = 502; _la = this._input.LA(1); if(!(_la===63 || _la===64)) { this._errHandler.recoverInline(this); @@ -2765,7 +2812,7 @@ export default class esql_parser extends Parser { } } - this.state = 499; + this.state = 505; this.match(esql_parser.INTEGER_LITERAL); } } @@ -2786,11 +2833,11 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public string_(): StringContext { let localctx: StringContext = new StringContext(this, this._ctx, this.state); - this.enterRule(localctx, 92, esql_parser.RULE_string); + this.enterRule(localctx, 94, esql_parser.RULE_string); try { this.enterOuterAlt(localctx, 1); { - this.state = 501; + this.state = 507; this.match(esql_parser.QUOTED_STRING); } } @@ -2811,12 +2858,12 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public comparisonOperator(): ComparisonOperatorContext { let localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 94, esql_parser.RULE_comparisonOperator); + this.enterRule(localctx, 96, esql_parser.RULE_comparisonOperator); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 503; + this.state = 509; _la = this._input.LA(1); if(!(((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & 125) !== 0))) { this._errHandler.recoverInline(this); @@ -2844,13 +2891,13 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public explainCommand(): ExplainCommandContext { let localctx: ExplainCommandContext = new ExplainCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 96, esql_parser.RULE_explainCommand); + this.enterRule(localctx, 98, esql_parser.RULE_explainCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 505; + this.state = 511; this.match(esql_parser.EXPLAIN); - this.state = 506; + this.state = 512; this.subqueryExpression(); } } @@ -2871,15 +2918,15 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public subqueryExpression(): SubqueryExpressionContext { let localctx: SubqueryExpressionContext = new SubqueryExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 98, esql_parser.RULE_subqueryExpression); + this.enterRule(localctx, 100, esql_parser.RULE_subqueryExpression); try { this.enterOuterAlt(localctx, 1); { - this.state = 508; + this.state = 514; this.match(esql_parser.OPENING_BRACKET); - this.state = 509; + this.state = 515; this.query(0); - this.state = 510; + this.state = 516; this.match(esql_parser.CLOSING_BRACKET); } } @@ -2900,14 +2947,14 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public showCommand(): ShowCommandContext { let localctx: ShowCommandContext = new ShowCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 100, esql_parser.RULE_showCommand); + this.enterRule(localctx, 102, esql_parser.RULE_showCommand); try { localctx = new ShowInfoContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 512; + this.state = 518; this.match(esql_parser.SHOW); - this.state = 513; + this.state = 519; this.match(esql_parser.INFO); } } @@ -2928,14 +2975,14 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public metaCommand(): MetaCommandContext { let localctx: MetaCommandContext = new MetaCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 102, esql_parser.RULE_metaCommand); + this.enterRule(localctx, 104, esql_parser.RULE_metaCommand); try { localctx = new MetaFunctionsContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 515; + this.state = 521; this.match(esql_parser.META); - this.state = 516; + this.state = 522; this.match(esql_parser.FUNCTIONS); } } @@ -2956,53 +3003,53 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public enrichCommand(): EnrichCommandContext { let localctx: EnrichCommandContext = new EnrichCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 104, esql_parser.RULE_enrichCommand); + this.enterRule(localctx, 106, esql_parser.RULE_enrichCommand); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 518; + this.state = 524; this.match(esql_parser.ENRICH); - this.state = 519; + this.state = 525; localctx._policyName = this.match(esql_parser.ENRICH_POLICY_NAME); - this.state = 522; + this.state = 528; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 48, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 49, this._ctx) ) { case 1: { - this.state = 520; + this.state = 526; this.match(esql_parser.ON); - this.state = 521; + this.state = 527; localctx._matchField = this.qualifiedNamePattern(); } break; } - this.state = 533; + this.state = 539; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 50, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 51, this._ctx) ) { case 1: { - this.state = 524; + this.state = 530; this.match(esql_parser.WITH); - this.state = 525; + this.state = 531; this.enrichWithClause(); - this.state = 530; + this.state = 536; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 49, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 50, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 526; + this.state = 532; this.match(esql_parser.COMMA); - this.state = 527; + this.state = 533; this.enrichWithClause(); } } } - this.state = 532; + this.state = 538; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 49, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 50, this._ctx); } } break; @@ -3026,23 +3073,23 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public enrichWithClause(): EnrichWithClauseContext { let localctx: EnrichWithClauseContext = new EnrichWithClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 106, esql_parser.RULE_enrichWithClause); + this.enterRule(localctx, 108, esql_parser.RULE_enrichWithClause); try { this.enterOuterAlt(localctx, 1); { - this.state = 538; + this.state = 544; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 51, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 52, this._ctx) ) { case 1: { - this.state = 535; + this.state = 541; localctx._newName = this.qualifiedNamePattern(); - this.state = 536; + this.state = 542; this.match(esql_parser.ASSIGN); } break; } - this.state = 540; + this.state = 546; localctx._enrichField = this.qualifiedNamePattern(); } } @@ -3063,17 +3110,17 @@ export default class esql_parser extends Parser { // @RuleVersion(0) public lookupCommand(): LookupCommandContext { let localctx: LookupCommandContext = new LookupCommandContext(this, this._ctx, this.state); - this.enterRule(localctx, 108, esql_parser.RULE_lookupCommand); + this.enterRule(localctx, 110, esql_parser.RULE_lookupCommand); try { this.enterOuterAlt(localctx, 1); { - this.state = 542; + this.state = 548; this.match(esql_parser.LOOKUP); - this.state = 543; + this.state = 549; localctx._tableName = this.match(esql_parser.INDEX_UNQUOTED_IDENTIFIER); - this.state = 544; + this.state = 550; this.match(esql_parser.ON); - this.state = 545; + this.state = 551; localctx._matchFields = this.qualifiedNamePatterns(); } } @@ -3138,7 +3185,7 @@ export default class esql_parser extends Parser { return true; } - public static readonly _serializedATN: number[] = [4,1,123,548,2,0,7,0, + public static readonly _serializedATN: number[] = [4,1,124,554,2,0,7,0, 2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9, 2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2, 17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24, @@ -3146,177 +3193,179 @@ export default class esql_parser extends Parser { 31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, 2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53, - 7,53,2,54,7,54,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,5,1,120,8,1,10,1,12, - 1,123,9,1,1,2,1,2,1,2,1,2,1,2,1,2,3,2,131,8,2,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,147,8,3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1, - 5,1,5,1,5,3,5,159,8,5,1,5,1,5,1,5,1,5,1,5,5,5,166,8,5,10,5,12,5,169,9,5, - 1,5,1,5,1,5,1,5,1,5,3,5,176,8,5,1,5,1,5,3,5,180,8,5,1,5,1,5,1,5,1,5,1,5, - 1,5,5,5,188,8,5,10,5,12,5,191,9,5,1,6,1,6,3,6,195,8,6,1,6,1,6,1,6,1,6,1, - 6,3,6,202,8,6,1,6,1,6,1,6,3,6,207,8,6,1,7,1,7,1,7,1,7,1,7,3,7,214,8,7,1, - 8,1,8,1,8,1,8,3,8,220,8,8,1,8,1,8,1,8,1,8,1,8,1,8,5,8,228,8,8,10,8,12,8, - 231,9,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,241,8,9,1,9,1,9,1,9,5,9,246, - 8,9,10,9,12,9,249,9,9,1,10,1,10,1,10,1,10,1,10,1,10,5,10,257,8,10,10,10, - 12,10,260,9,10,3,10,262,8,10,1,10,1,10,1,11,1,11,1,12,1,12,1,12,1,13,1, - 13,1,13,5,13,274,8,13,10,13,12,13,277,9,13,1,14,1,14,1,14,1,14,1,14,3,14, - 284,8,14,1,15,1,15,1,15,1,15,5,15,290,8,15,10,15,12,15,293,9,15,1,15,3, - 15,296,8,15,1,16,1,16,1,17,1,17,3,17,302,8,17,1,18,1,18,1,18,1,18,5,18, - 308,8,18,10,18,12,18,311,9,18,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,5, - 20,321,8,20,10,20,12,20,324,9,20,1,20,3,20,327,8,20,1,20,1,20,3,20,331, - 8,20,1,21,1,21,1,21,1,22,1,22,3,22,338,8,22,1,22,1,22,3,22,342,8,22,1,23, - 1,23,1,23,1,23,3,23,348,8,23,1,24,1,24,1,24,5,24,353,8,24,10,24,12,24,356, - 9,24,1,25,1,25,1,25,5,25,361,8,25,10,25,12,25,364,9,25,1,26,1,26,1,26,5, - 26,369,8,26,10,26,12,26,372,9,26,1,27,1,27,1,28,1,28,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,391,8,29,10,29,12,29, - 394,9,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,402,8,29,10,29,12,29,405,9, - 29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,413,8,29,10,29,12,29,416,9,29,1,29, - 1,29,3,29,420,8,29,1,30,1,30,1,30,1,31,1,31,1,31,1,31,5,31,429,8,31,10, - 31,12,31,432,9,31,1,32,1,32,3,32,436,8,32,1,32,1,32,3,32,440,8,32,1,33, - 1,33,1,33,1,34,1,34,1,34,1,35,1,35,1,35,1,35,5,35,452,8,35,10,35,12,35, - 455,9,35,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,3,37,465,8,37,1,38,1,38, - 1,38,1,38,1,39,1,39,1,39,1,40,1,40,1,40,5,40,477,8,40,10,40,12,40,480,9, - 40,1,41,1,41,1,41,1,41,1,42,1,42,1,43,1,43,3,43,490,8,43,1,44,3,44,493, - 8,44,1,44,1,44,1,45,3,45,498,8,45,1,45,1,45,1,46,1,46,1,47,1,47,1,48,1, - 48,1,48,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,51,1,51,1,51,1,52,1,52,1,52, - 1,52,3,52,523,8,52,1,52,1,52,1,52,1,52,5,52,529,8,52,10,52,12,52,532,9, - 52,3,52,534,8,52,1,53,1,53,1,53,3,53,539,8,53,1,53,1,53,1,54,1,54,1,54, - 1,54,1,54,1,54,0,4,2,10,16,18,55,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28, - 30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76, - 78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,0,7,1,0,63,64,1,0, - 65,67,1,0,70,71,2,0,35,35,39,39,1,0,42,43,2,0,41,41,55,55,2,0,56,56,58, - 62,574,0,110,1,0,0,0,2,113,1,0,0,0,4,130,1,0,0,0,6,146,1,0,0,0,8,148,1, - 0,0,0,10,179,1,0,0,0,12,206,1,0,0,0,14,213,1,0,0,0,16,219,1,0,0,0,18,240, - 1,0,0,0,20,250,1,0,0,0,22,265,1,0,0,0,24,267,1,0,0,0,26,270,1,0,0,0,28, - 283,1,0,0,0,30,285,1,0,0,0,32,297,1,0,0,0,34,301,1,0,0,0,36,303,1,0,0,0, - 38,312,1,0,0,0,40,316,1,0,0,0,42,332,1,0,0,0,44,335,1,0,0,0,46,343,1,0, - 0,0,48,349,1,0,0,0,50,357,1,0,0,0,52,365,1,0,0,0,54,373,1,0,0,0,56,375, - 1,0,0,0,58,419,1,0,0,0,60,421,1,0,0,0,62,424,1,0,0,0,64,433,1,0,0,0,66, - 441,1,0,0,0,68,444,1,0,0,0,70,447,1,0,0,0,72,456,1,0,0,0,74,460,1,0,0,0, - 76,466,1,0,0,0,78,470,1,0,0,0,80,473,1,0,0,0,82,481,1,0,0,0,84,485,1,0, - 0,0,86,489,1,0,0,0,88,492,1,0,0,0,90,497,1,0,0,0,92,501,1,0,0,0,94,503, - 1,0,0,0,96,505,1,0,0,0,98,508,1,0,0,0,100,512,1,0,0,0,102,515,1,0,0,0,104, - 518,1,0,0,0,106,538,1,0,0,0,108,542,1,0,0,0,110,111,3,2,1,0,111,112,5,0, - 0,1,112,1,1,0,0,0,113,114,6,1,-1,0,114,115,3,4,2,0,115,121,1,0,0,0,116, - 117,10,1,0,0,117,118,5,29,0,0,118,120,3,6,3,0,119,116,1,0,0,0,120,123,1, - 0,0,0,121,119,1,0,0,0,121,122,1,0,0,0,122,3,1,0,0,0,123,121,1,0,0,0,124, - 131,3,96,48,0,125,131,3,30,15,0,126,131,3,24,12,0,127,131,3,40,20,0,128, - 131,3,100,50,0,129,131,3,102,51,0,130,124,1,0,0,0,130,125,1,0,0,0,130,126, - 1,0,0,0,130,127,1,0,0,0,130,128,1,0,0,0,130,129,1,0,0,0,131,5,1,0,0,0,132, - 147,3,42,21,0,133,147,3,46,23,0,134,147,3,60,30,0,135,147,3,108,54,0,136, - 147,3,66,33,0,137,147,3,62,31,0,138,147,3,44,22,0,139,147,3,8,4,0,140,147, - 3,68,34,0,141,147,3,70,35,0,142,147,3,74,37,0,143,147,3,76,38,0,144,147, - 3,104,52,0,145,147,3,78,39,0,146,132,1,0,0,0,146,133,1,0,0,0,146,134,1, - 0,0,0,146,135,1,0,0,0,146,136,1,0,0,0,146,137,1,0,0,0,146,138,1,0,0,0,146, - 139,1,0,0,0,146,140,1,0,0,0,146,141,1,0,0,0,146,142,1,0,0,0,146,143,1,0, - 0,0,146,144,1,0,0,0,146,145,1,0,0,0,147,7,1,0,0,0,148,149,5,20,0,0,149, - 150,3,10,5,0,150,9,1,0,0,0,151,152,6,5,-1,0,152,153,5,48,0,0,153,180,3, - 10,5,7,154,180,3,14,7,0,155,180,3,12,6,0,156,158,3,14,7,0,157,159,5,48, - 0,0,158,157,1,0,0,0,158,159,1,0,0,0,159,160,1,0,0,0,160,161,5,45,0,0,161, - 162,5,44,0,0,162,167,3,14,7,0,163,164,5,38,0,0,164,166,3,14,7,0,165,163, - 1,0,0,0,166,169,1,0,0,0,167,165,1,0,0,0,167,168,1,0,0,0,168,170,1,0,0,0, - 169,167,1,0,0,0,170,171,5,54,0,0,171,180,1,0,0,0,172,173,3,14,7,0,173,175, - 5,46,0,0,174,176,5,48,0,0,175,174,1,0,0,0,175,176,1,0,0,0,176,177,1,0,0, - 0,177,178,5,49,0,0,178,180,1,0,0,0,179,151,1,0,0,0,179,154,1,0,0,0,179, - 155,1,0,0,0,179,156,1,0,0,0,179,172,1,0,0,0,180,189,1,0,0,0,181,182,10, - 4,0,0,182,183,5,34,0,0,183,188,3,10,5,5,184,185,10,3,0,0,185,186,5,51,0, - 0,186,188,3,10,5,4,187,181,1,0,0,0,187,184,1,0,0,0,188,191,1,0,0,0,189, - 187,1,0,0,0,189,190,1,0,0,0,190,11,1,0,0,0,191,189,1,0,0,0,192,194,3,14, - 7,0,193,195,5,48,0,0,194,193,1,0,0,0,194,195,1,0,0,0,195,196,1,0,0,0,196, - 197,5,47,0,0,197,198,3,92,46,0,198,207,1,0,0,0,199,201,3,14,7,0,200,202, - 5,48,0,0,201,200,1,0,0,0,201,202,1,0,0,0,202,203,1,0,0,0,203,204,5,53,0, - 0,204,205,3,92,46,0,205,207,1,0,0,0,206,192,1,0,0,0,206,199,1,0,0,0,207, - 13,1,0,0,0,208,214,3,16,8,0,209,210,3,16,8,0,210,211,3,94,47,0,211,212, - 3,16,8,0,212,214,1,0,0,0,213,208,1,0,0,0,213,209,1,0,0,0,214,15,1,0,0,0, - 215,216,6,8,-1,0,216,220,3,18,9,0,217,218,7,0,0,0,218,220,3,16,8,3,219, - 215,1,0,0,0,219,217,1,0,0,0,220,229,1,0,0,0,221,222,10,2,0,0,222,223,7, - 1,0,0,223,228,3,16,8,3,224,225,10,1,0,0,225,226,7,0,0,0,226,228,3,16,8, - 2,227,221,1,0,0,0,227,224,1,0,0,0,228,231,1,0,0,0,229,227,1,0,0,0,229,230, - 1,0,0,0,230,17,1,0,0,0,231,229,1,0,0,0,232,233,6,9,-1,0,233,241,3,58,29, - 0,234,241,3,48,24,0,235,241,3,20,10,0,236,237,5,44,0,0,237,238,3,10,5,0, - 238,239,5,54,0,0,239,241,1,0,0,0,240,232,1,0,0,0,240,234,1,0,0,0,240,235, - 1,0,0,0,240,236,1,0,0,0,241,247,1,0,0,0,242,243,10,1,0,0,243,244,5,37,0, - 0,244,246,3,22,11,0,245,242,1,0,0,0,246,249,1,0,0,0,247,245,1,0,0,0,247, - 248,1,0,0,0,248,19,1,0,0,0,249,247,1,0,0,0,250,251,3,54,27,0,251,261,5, - 44,0,0,252,262,5,65,0,0,253,258,3,10,5,0,254,255,5,38,0,0,255,257,3,10, - 5,0,256,254,1,0,0,0,257,260,1,0,0,0,258,256,1,0,0,0,258,259,1,0,0,0,259, - 262,1,0,0,0,260,258,1,0,0,0,261,252,1,0,0,0,261,253,1,0,0,0,261,262,1,0, - 0,0,262,263,1,0,0,0,263,264,5,54,0,0,264,21,1,0,0,0,265,266,3,54,27,0,266, - 23,1,0,0,0,267,268,5,16,0,0,268,269,3,26,13,0,269,25,1,0,0,0,270,275,3, - 28,14,0,271,272,5,38,0,0,272,274,3,28,14,0,273,271,1,0,0,0,274,277,1,0, - 0,0,275,273,1,0,0,0,275,276,1,0,0,0,276,27,1,0,0,0,277,275,1,0,0,0,278, - 284,3,10,5,0,279,280,3,48,24,0,280,281,5,36,0,0,281,282,3,10,5,0,282,284, - 1,0,0,0,283,278,1,0,0,0,283,279,1,0,0,0,284,29,1,0,0,0,285,286,5,6,0,0, - 286,291,3,32,16,0,287,288,5,38,0,0,288,290,3,32,16,0,289,287,1,0,0,0,290, - 293,1,0,0,0,291,289,1,0,0,0,291,292,1,0,0,0,292,295,1,0,0,0,293,291,1,0, - 0,0,294,296,3,34,17,0,295,294,1,0,0,0,295,296,1,0,0,0,296,31,1,0,0,0,297, - 298,5,25,0,0,298,33,1,0,0,0,299,302,3,36,18,0,300,302,3,38,19,0,301,299, - 1,0,0,0,301,300,1,0,0,0,302,35,1,0,0,0,303,304,5,75,0,0,304,309,3,32,16, - 0,305,306,5,38,0,0,306,308,3,32,16,0,307,305,1,0,0,0,308,311,1,0,0,0,309, - 307,1,0,0,0,309,310,1,0,0,0,310,37,1,0,0,0,311,309,1,0,0,0,312,313,5,68, - 0,0,313,314,3,36,18,0,314,315,5,69,0,0,315,39,1,0,0,0,316,317,5,13,0,0, - 317,322,3,32,16,0,318,319,5,38,0,0,319,321,3,32,16,0,320,318,1,0,0,0,321, - 324,1,0,0,0,322,320,1,0,0,0,322,323,1,0,0,0,323,326,1,0,0,0,324,322,1,0, - 0,0,325,327,3,26,13,0,326,325,1,0,0,0,326,327,1,0,0,0,327,330,1,0,0,0,328, - 329,5,33,0,0,329,331,3,26,13,0,330,328,1,0,0,0,330,331,1,0,0,0,331,41,1, - 0,0,0,332,333,5,4,0,0,333,334,3,26,13,0,334,43,1,0,0,0,335,337,5,19,0,0, - 336,338,3,26,13,0,337,336,1,0,0,0,337,338,1,0,0,0,338,341,1,0,0,0,339,340, - 5,33,0,0,340,342,3,26,13,0,341,339,1,0,0,0,341,342,1,0,0,0,342,45,1,0,0, - 0,343,344,5,8,0,0,344,347,3,26,13,0,345,346,5,33,0,0,346,348,3,26,13,0, - 347,345,1,0,0,0,347,348,1,0,0,0,348,47,1,0,0,0,349,354,3,54,27,0,350,351, - 5,40,0,0,351,353,3,54,27,0,352,350,1,0,0,0,353,356,1,0,0,0,354,352,1,0, - 0,0,354,355,1,0,0,0,355,49,1,0,0,0,356,354,1,0,0,0,357,362,3,56,28,0,358, - 359,5,40,0,0,359,361,3,56,28,0,360,358,1,0,0,0,361,364,1,0,0,0,362,360, - 1,0,0,0,362,363,1,0,0,0,363,51,1,0,0,0,364,362,1,0,0,0,365,370,3,50,25, - 0,366,367,5,38,0,0,367,369,3,50,25,0,368,366,1,0,0,0,369,372,1,0,0,0,370, - 368,1,0,0,0,370,371,1,0,0,0,371,53,1,0,0,0,372,370,1,0,0,0,373,374,7,2, - 0,0,374,55,1,0,0,0,375,376,5,79,0,0,376,57,1,0,0,0,377,420,5,49,0,0,378, - 379,3,90,45,0,379,380,5,70,0,0,380,420,1,0,0,0,381,420,3,88,44,0,382,420, - 3,90,45,0,383,420,3,84,42,0,384,420,5,52,0,0,385,420,3,92,46,0,386,387, - 5,68,0,0,387,392,3,86,43,0,388,389,5,38,0,0,389,391,3,86,43,0,390,388,1, - 0,0,0,391,394,1,0,0,0,392,390,1,0,0,0,392,393,1,0,0,0,393,395,1,0,0,0,394, - 392,1,0,0,0,395,396,5,69,0,0,396,420,1,0,0,0,397,398,5,68,0,0,398,403,3, - 84,42,0,399,400,5,38,0,0,400,402,3,84,42,0,401,399,1,0,0,0,402,405,1,0, - 0,0,403,401,1,0,0,0,403,404,1,0,0,0,404,406,1,0,0,0,405,403,1,0,0,0,406, - 407,5,69,0,0,407,420,1,0,0,0,408,409,5,68,0,0,409,414,3,92,46,0,410,411, - 5,38,0,0,411,413,3,92,46,0,412,410,1,0,0,0,413,416,1,0,0,0,414,412,1,0, - 0,0,414,415,1,0,0,0,415,417,1,0,0,0,416,414,1,0,0,0,417,418,5,69,0,0,418, - 420,1,0,0,0,419,377,1,0,0,0,419,378,1,0,0,0,419,381,1,0,0,0,419,382,1,0, - 0,0,419,383,1,0,0,0,419,384,1,0,0,0,419,385,1,0,0,0,419,386,1,0,0,0,419, - 397,1,0,0,0,419,408,1,0,0,0,420,59,1,0,0,0,421,422,5,10,0,0,422,423,5,31, - 0,0,423,61,1,0,0,0,424,425,5,18,0,0,425,430,3,64,32,0,426,427,5,38,0,0, - 427,429,3,64,32,0,428,426,1,0,0,0,429,432,1,0,0,0,430,428,1,0,0,0,430,431, - 1,0,0,0,431,63,1,0,0,0,432,430,1,0,0,0,433,435,3,10,5,0,434,436,7,3,0,0, - 435,434,1,0,0,0,435,436,1,0,0,0,436,439,1,0,0,0,437,438,5,50,0,0,438,440, - 7,4,0,0,439,437,1,0,0,0,439,440,1,0,0,0,440,65,1,0,0,0,441,442,5,9,0,0, - 442,443,3,52,26,0,443,67,1,0,0,0,444,445,5,2,0,0,445,446,3,52,26,0,446, - 69,1,0,0,0,447,448,5,15,0,0,448,453,3,72,36,0,449,450,5,38,0,0,450,452, - 3,72,36,0,451,449,1,0,0,0,452,455,1,0,0,0,453,451,1,0,0,0,453,454,1,0,0, - 0,454,71,1,0,0,0,455,453,1,0,0,0,456,457,3,50,25,0,457,458,5,83,0,0,458, - 459,3,50,25,0,459,73,1,0,0,0,460,461,5,1,0,0,461,462,3,18,9,0,462,464,3, - 92,46,0,463,465,3,80,40,0,464,463,1,0,0,0,464,465,1,0,0,0,465,75,1,0,0, - 0,466,467,5,7,0,0,467,468,3,18,9,0,468,469,3,92,46,0,469,77,1,0,0,0,470, - 471,5,14,0,0,471,472,3,48,24,0,472,79,1,0,0,0,473,478,3,82,41,0,474,475, - 5,38,0,0,475,477,3,82,41,0,476,474,1,0,0,0,477,480,1,0,0,0,478,476,1,0, - 0,0,478,479,1,0,0,0,479,81,1,0,0,0,480,478,1,0,0,0,481,482,3,54,27,0,482, - 483,5,36,0,0,483,484,3,58,29,0,484,83,1,0,0,0,485,486,7,5,0,0,486,85,1, - 0,0,0,487,490,3,88,44,0,488,490,3,90,45,0,489,487,1,0,0,0,489,488,1,0,0, - 0,490,87,1,0,0,0,491,493,7,0,0,0,492,491,1,0,0,0,492,493,1,0,0,0,493,494, - 1,0,0,0,494,495,5,32,0,0,495,89,1,0,0,0,496,498,7,0,0,0,497,496,1,0,0,0, - 497,498,1,0,0,0,498,499,1,0,0,0,499,500,5,31,0,0,500,91,1,0,0,0,501,502, - 5,30,0,0,502,93,1,0,0,0,503,504,7,6,0,0,504,95,1,0,0,0,505,506,5,5,0,0, - 506,507,3,98,49,0,507,97,1,0,0,0,508,509,5,68,0,0,509,510,3,2,1,0,510,511, - 5,69,0,0,511,99,1,0,0,0,512,513,5,17,0,0,513,514,5,105,0,0,514,101,1,0, - 0,0,515,516,5,12,0,0,516,517,5,109,0,0,517,103,1,0,0,0,518,519,5,3,0,0, - 519,522,5,89,0,0,520,521,5,87,0,0,521,523,3,50,25,0,522,520,1,0,0,0,522, - 523,1,0,0,0,523,533,1,0,0,0,524,525,5,88,0,0,525,530,3,106,53,0,526,527, - 5,38,0,0,527,529,3,106,53,0,528,526,1,0,0,0,529,532,1,0,0,0,530,528,1,0, - 0,0,530,531,1,0,0,0,531,534,1,0,0,0,532,530,1,0,0,0,533,524,1,0,0,0,533, - 534,1,0,0,0,534,105,1,0,0,0,535,536,3,50,25,0,536,537,5,36,0,0,537,539, - 1,0,0,0,538,535,1,0,0,0,538,539,1,0,0,0,539,540,1,0,0,0,540,541,3,50,25, - 0,541,107,1,0,0,0,542,543,5,11,0,0,543,544,5,25,0,0,544,545,5,87,0,0,545, - 546,3,52,26,0,546,109,1,0,0,0,52,121,130,146,158,167,175,179,187,189,194, - 201,206,213,219,227,229,240,247,258,261,275,283,291,295,301,309,322,326, - 330,337,341,347,354,362,370,392,403,414,419,430,435,439,453,464,478,489, - 492,497,522,530,533,538]; + 7,53,2,54,7,54,2,55,7,55,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,5,1,122,8, + 1,10,1,12,1,125,9,1,1,2,1,2,1,2,1,2,1,2,1,2,3,2,133,8,2,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,149,8,3,1,4,1,4,1,4,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,3,5,161,8,5,1,5,1,5,1,5,1,5,1,5,5,5,168,8,5,10,5,12, + 5,171,9,5,1,5,1,5,1,5,1,5,1,5,3,5,178,8,5,1,5,1,5,3,5,182,8,5,1,5,1,5,1, + 5,1,5,1,5,1,5,5,5,190,8,5,10,5,12,5,193,9,5,1,6,1,6,3,6,197,8,6,1,6,1,6, + 1,6,1,6,1,6,3,6,204,8,6,1,6,1,6,1,6,3,6,209,8,6,1,7,1,7,1,7,1,7,1,7,3,7, + 216,8,7,1,8,1,8,1,8,1,8,3,8,222,8,8,1,8,1,8,1,8,1,8,1,8,1,8,5,8,230,8,8, + 10,8,12,8,233,9,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,243,8,9,1,9,1,9,1, + 9,5,9,248,8,9,10,9,12,9,251,9,9,1,10,1,10,1,10,1,10,1,10,1,10,5,10,259, + 8,10,10,10,12,10,262,9,10,3,10,264,8,10,1,10,1,10,1,11,1,11,1,12,1,12,1, + 12,1,13,1,13,1,13,5,13,276,8,13,10,13,12,13,279,9,13,1,14,1,14,1,14,1,14, + 1,14,3,14,286,8,14,1,15,1,15,1,15,1,15,5,15,292,8,15,10,15,12,15,295,9, + 15,1,15,3,15,298,8,15,1,16,1,16,1,17,1,17,3,17,304,8,17,1,18,1,18,1,18, + 1,18,5,18,310,8,18,10,18,12,18,313,9,18,1,19,1,19,1,19,1,19,1,20,1,20,1, + 20,1,20,5,20,323,8,20,10,20,12,20,326,9,20,1,20,3,20,329,8,20,1,20,1,20, + 3,20,333,8,20,1,21,1,21,1,21,1,22,1,22,3,22,340,8,22,1,22,1,22,3,22,344, + 8,22,1,23,1,23,1,23,1,23,3,23,350,8,23,1,24,1,24,1,24,5,24,355,8,24,10, + 24,12,24,358,9,24,1,25,1,25,1,25,5,25,363,8,25,10,25,12,25,366,9,25,1,26, + 1,26,1,26,5,26,371,8,26,10,26,12,26,374,9,26,1,27,1,27,1,28,1,28,1,29,1, + 29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,393,8,29, + 10,29,12,29,396,9,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,404,8,29,10,29, + 12,29,407,9,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,415,8,29,10,29,12,29, + 418,9,29,1,29,1,29,3,29,422,8,29,1,30,1,30,3,30,426,8,30,1,31,1,31,1,31, + 1,32,1,32,1,32,1,32,5,32,435,8,32,10,32,12,32,438,9,32,1,33,1,33,3,33,442, + 8,33,1,33,1,33,3,33,446,8,33,1,34,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1, + 36,1,36,5,36,458,8,36,10,36,12,36,461,9,36,1,37,1,37,1,37,1,37,1,38,1,38, + 1,38,1,38,3,38,471,8,38,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,41,1,41,1, + 41,5,41,483,8,41,10,41,12,41,486,9,41,1,42,1,42,1,42,1,42,1,43,1,43,1,44, + 1,44,3,44,496,8,44,1,45,3,45,499,8,45,1,45,1,45,1,46,3,46,504,8,46,1,46, + 1,46,1,47,1,47,1,48,1,48,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,51,1,51,1, + 51,1,52,1,52,1,52,1,53,1,53,1,53,1,53,3,53,529,8,53,1,53,1,53,1,53,1,53, + 5,53,535,8,53,10,53,12,53,538,9,53,3,53,540,8,53,1,54,1,54,1,54,3,54,545, + 8,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,0,4,2,10,16,18,56,0,2,4,6, + 8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54, + 56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102, + 104,106,108,110,0,7,1,0,63,64,1,0,65,67,1,0,71,72,2,0,35,35,39,39,1,0,42, + 43,2,0,41,41,55,55,2,0,56,56,58,62,580,0,112,1,0,0,0,2,115,1,0,0,0,4,132, + 1,0,0,0,6,148,1,0,0,0,8,150,1,0,0,0,10,181,1,0,0,0,12,208,1,0,0,0,14,215, + 1,0,0,0,16,221,1,0,0,0,18,242,1,0,0,0,20,252,1,0,0,0,22,267,1,0,0,0,24, + 269,1,0,0,0,26,272,1,0,0,0,28,285,1,0,0,0,30,287,1,0,0,0,32,299,1,0,0,0, + 34,303,1,0,0,0,36,305,1,0,0,0,38,314,1,0,0,0,40,318,1,0,0,0,42,334,1,0, + 0,0,44,337,1,0,0,0,46,345,1,0,0,0,48,351,1,0,0,0,50,359,1,0,0,0,52,367, + 1,0,0,0,54,375,1,0,0,0,56,377,1,0,0,0,58,421,1,0,0,0,60,425,1,0,0,0,62, + 427,1,0,0,0,64,430,1,0,0,0,66,439,1,0,0,0,68,447,1,0,0,0,70,450,1,0,0,0, + 72,453,1,0,0,0,74,462,1,0,0,0,76,466,1,0,0,0,78,472,1,0,0,0,80,476,1,0, + 0,0,82,479,1,0,0,0,84,487,1,0,0,0,86,491,1,0,0,0,88,495,1,0,0,0,90,498, + 1,0,0,0,92,503,1,0,0,0,94,507,1,0,0,0,96,509,1,0,0,0,98,511,1,0,0,0,100, + 514,1,0,0,0,102,518,1,0,0,0,104,521,1,0,0,0,106,524,1,0,0,0,108,544,1,0, + 0,0,110,548,1,0,0,0,112,113,3,2,1,0,113,114,5,0,0,1,114,1,1,0,0,0,115,116, + 6,1,-1,0,116,117,3,4,2,0,117,123,1,0,0,0,118,119,10,1,0,0,119,120,5,29, + 0,0,120,122,3,6,3,0,121,118,1,0,0,0,122,125,1,0,0,0,123,121,1,0,0,0,123, + 124,1,0,0,0,124,3,1,0,0,0,125,123,1,0,0,0,126,133,3,98,49,0,127,133,3,30, + 15,0,128,133,3,24,12,0,129,133,3,40,20,0,130,133,3,102,51,0,131,133,3,104, + 52,0,132,126,1,0,0,0,132,127,1,0,0,0,132,128,1,0,0,0,132,129,1,0,0,0,132, + 130,1,0,0,0,132,131,1,0,0,0,133,5,1,0,0,0,134,149,3,42,21,0,135,149,3,46, + 23,0,136,149,3,62,31,0,137,149,3,110,55,0,138,149,3,68,34,0,139,149,3,64, + 32,0,140,149,3,44,22,0,141,149,3,8,4,0,142,149,3,70,35,0,143,149,3,72,36, + 0,144,149,3,76,38,0,145,149,3,78,39,0,146,149,3,106,53,0,147,149,3,80,40, + 0,148,134,1,0,0,0,148,135,1,0,0,0,148,136,1,0,0,0,148,137,1,0,0,0,148,138, + 1,0,0,0,148,139,1,0,0,0,148,140,1,0,0,0,148,141,1,0,0,0,148,142,1,0,0,0, + 148,143,1,0,0,0,148,144,1,0,0,0,148,145,1,0,0,0,148,146,1,0,0,0,148,147, + 1,0,0,0,149,7,1,0,0,0,150,151,5,20,0,0,151,152,3,10,5,0,152,9,1,0,0,0,153, + 154,6,5,-1,0,154,155,5,48,0,0,155,182,3,10,5,7,156,182,3,14,7,0,157,182, + 3,12,6,0,158,160,3,14,7,0,159,161,5,48,0,0,160,159,1,0,0,0,160,161,1,0, + 0,0,161,162,1,0,0,0,162,163,5,45,0,0,163,164,5,44,0,0,164,169,3,14,7,0, + 165,166,5,38,0,0,166,168,3,14,7,0,167,165,1,0,0,0,168,171,1,0,0,0,169,167, + 1,0,0,0,169,170,1,0,0,0,170,172,1,0,0,0,171,169,1,0,0,0,172,173,5,54,0, + 0,173,182,1,0,0,0,174,175,3,14,7,0,175,177,5,46,0,0,176,178,5,48,0,0,177, + 176,1,0,0,0,177,178,1,0,0,0,178,179,1,0,0,0,179,180,5,49,0,0,180,182,1, + 0,0,0,181,153,1,0,0,0,181,156,1,0,0,0,181,157,1,0,0,0,181,158,1,0,0,0,181, + 174,1,0,0,0,182,191,1,0,0,0,183,184,10,4,0,0,184,185,5,34,0,0,185,190,3, + 10,5,5,186,187,10,3,0,0,187,188,5,51,0,0,188,190,3,10,5,4,189,183,1,0,0, + 0,189,186,1,0,0,0,190,193,1,0,0,0,191,189,1,0,0,0,191,192,1,0,0,0,192,11, + 1,0,0,0,193,191,1,0,0,0,194,196,3,14,7,0,195,197,5,48,0,0,196,195,1,0,0, + 0,196,197,1,0,0,0,197,198,1,0,0,0,198,199,5,47,0,0,199,200,3,94,47,0,200, + 209,1,0,0,0,201,203,3,14,7,0,202,204,5,48,0,0,203,202,1,0,0,0,203,204,1, + 0,0,0,204,205,1,0,0,0,205,206,5,53,0,0,206,207,3,94,47,0,207,209,1,0,0, + 0,208,194,1,0,0,0,208,201,1,0,0,0,209,13,1,0,0,0,210,216,3,16,8,0,211,212, + 3,16,8,0,212,213,3,96,48,0,213,214,3,16,8,0,214,216,1,0,0,0,215,210,1,0, + 0,0,215,211,1,0,0,0,216,15,1,0,0,0,217,218,6,8,-1,0,218,222,3,18,9,0,219, + 220,7,0,0,0,220,222,3,16,8,3,221,217,1,0,0,0,221,219,1,0,0,0,222,231,1, + 0,0,0,223,224,10,2,0,0,224,225,7,1,0,0,225,230,3,16,8,3,226,227,10,1,0, + 0,227,228,7,0,0,0,228,230,3,16,8,2,229,223,1,0,0,0,229,226,1,0,0,0,230, + 233,1,0,0,0,231,229,1,0,0,0,231,232,1,0,0,0,232,17,1,0,0,0,233,231,1,0, + 0,0,234,235,6,9,-1,0,235,243,3,58,29,0,236,243,3,48,24,0,237,243,3,20,10, + 0,238,239,5,44,0,0,239,240,3,10,5,0,240,241,5,54,0,0,241,243,1,0,0,0,242, + 234,1,0,0,0,242,236,1,0,0,0,242,237,1,0,0,0,242,238,1,0,0,0,243,249,1,0, + 0,0,244,245,10,1,0,0,245,246,5,37,0,0,246,248,3,22,11,0,247,244,1,0,0,0, + 248,251,1,0,0,0,249,247,1,0,0,0,249,250,1,0,0,0,250,19,1,0,0,0,251,249, + 1,0,0,0,252,253,3,54,27,0,253,263,5,44,0,0,254,264,5,65,0,0,255,260,3,10, + 5,0,256,257,5,38,0,0,257,259,3,10,5,0,258,256,1,0,0,0,259,262,1,0,0,0,260, + 258,1,0,0,0,260,261,1,0,0,0,261,264,1,0,0,0,262,260,1,0,0,0,263,254,1,0, + 0,0,263,255,1,0,0,0,263,264,1,0,0,0,264,265,1,0,0,0,265,266,5,54,0,0,266, + 21,1,0,0,0,267,268,3,54,27,0,268,23,1,0,0,0,269,270,5,16,0,0,270,271,3, + 26,13,0,271,25,1,0,0,0,272,277,3,28,14,0,273,274,5,38,0,0,274,276,3,28, + 14,0,275,273,1,0,0,0,276,279,1,0,0,0,277,275,1,0,0,0,277,278,1,0,0,0,278, + 27,1,0,0,0,279,277,1,0,0,0,280,286,3,10,5,0,281,282,3,48,24,0,282,283,5, + 36,0,0,283,284,3,10,5,0,284,286,1,0,0,0,285,280,1,0,0,0,285,281,1,0,0,0, + 286,29,1,0,0,0,287,288,5,6,0,0,288,293,3,32,16,0,289,290,5,38,0,0,290,292, + 3,32,16,0,291,289,1,0,0,0,292,295,1,0,0,0,293,291,1,0,0,0,293,294,1,0,0, + 0,294,297,1,0,0,0,295,293,1,0,0,0,296,298,3,34,17,0,297,296,1,0,0,0,297, + 298,1,0,0,0,298,31,1,0,0,0,299,300,5,25,0,0,300,33,1,0,0,0,301,304,3,36, + 18,0,302,304,3,38,19,0,303,301,1,0,0,0,303,302,1,0,0,0,304,35,1,0,0,0,305, + 306,5,76,0,0,306,311,3,32,16,0,307,308,5,38,0,0,308,310,3,32,16,0,309,307, + 1,0,0,0,310,313,1,0,0,0,311,309,1,0,0,0,311,312,1,0,0,0,312,37,1,0,0,0, + 313,311,1,0,0,0,314,315,5,69,0,0,315,316,3,36,18,0,316,317,5,70,0,0,317, + 39,1,0,0,0,318,319,5,13,0,0,319,324,3,32,16,0,320,321,5,38,0,0,321,323, + 3,32,16,0,322,320,1,0,0,0,323,326,1,0,0,0,324,322,1,0,0,0,324,325,1,0,0, + 0,325,328,1,0,0,0,326,324,1,0,0,0,327,329,3,26,13,0,328,327,1,0,0,0,328, + 329,1,0,0,0,329,332,1,0,0,0,330,331,5,33,0,0,331,333,3,26,13,0,332,330, + 1,0,0,0,332,333,1,0,0,0,333,41,1,0,0,0,334,335,5,4,0,0,335,336,3,26,13, + 0,336,43,1,0,0,0,337,339,5,19,0,0,338,340,3,26,13,0,339,338,1,0,0,0,339, + 340,1,0,0,0,340,343,1,0,0,0,341,342,5,33,0,0,342,344,3,26,13,0,343,341, + 1,0,0,0,343,344,1,0,0,0,344,45,1,0,0,0,345,346,5,8,0,0,346,349,3,26,13, + 0,347,348,5,33,0,0,348,350,3,26,13,0,349,347,1,0,0,0,349,350,1,0,0,0,350, + 47,1,0,0,0,351,356,3,54,27,0,352,353,5,40,0,0,353,355,3,54,27,0,354,352, + 1,0,0,0,355,358,1,0,0,0,356,354,1,0,0,0,356,357,1,0,0,0,357,49,1,0,0,0, + 358,356,1,0,0,0,359,364,3,56,28,0,360,361,5,40,0,0,361,363,3,56,28,0,362, + 360,1,0,0,0,363,366,1,0,0,0,364,362,1,0,0,0,364,365,1,0,0,0,365,51,1,0, + 0,0,366,364,1,0,0,0,367,372,3,50,25,0,368,369,5,38,0,0,369,371,3,50,25, + 0,370,368,1,0,0,0,371,374,1,0,0,0,372,370,1,0,0,0,372,373,1,0,0,0,373,53, + 1,0,0,0,374,372,1,0,0,0,375,376,7,2,0,0,376,55,1,0,0,0,377,378,5,80,0,0, + 378,57,1,0,0,0,379,422,5,49,0,0,380,381,3,92,46,0,381,382,5,71,0,0,382, + 422,1,0,0,0,383,422,3,90,45,0,384,422,3,92,46,0,385,422,3,86,43,0,386,422, + 3,60,30,0,387,422,3,94,47,0,388,389,5,69,0,0,389,394,3,88,44,0,390,391, + 5,38,0,0,391,393,3,88,44,0,392,390,1,0,0,0,393,396,1,0,0,0,394,392,1,0, + 0,0,394,395,1,0,0,0,395,397,1,0,0,0,396,394,1,0,0,0,397,398,5,70,0,0,398, + 422,1,0,0,0,399,400,5,69,0,0,400,405,3,86,43,0,401,402,5,38,0,0,402,404, + 3,86,43,0,403,401,1,0,0,0,404,407,1,0,0,0,405,403,1,0,0,0,405,406,1,0,0, + 0,406,408,1,0,0,0,407,405,1,0,0,0,408,409,5,70,0,0,409,422,1,0,0,0,410, + 411,5,69,0,0,411,416,3,94,47,0,412,413,5,38,0,0,413,415,3,94,47,0,414,412, + 1,0,0,0,415,418,1,0,0,0,416,414,1,0,0,0,416,417,1,0,0,0,417,419,1,0,0,0, + 418,416,1,0,0,0,419,420,5,70,0,0,420,422,1,0,0,0,421,379,1,0,0,0,421,380, + 1,0,0,0,421,383,1,0,0,0,421,384,1,0,0,0,421,385,1,0,0,0,421,386,1,0,0,0, + 421,387,1,0,0,0,421,388,1,0,0,0,421,399,1,0,0,0,421,410,1,0,0,0,422,59, + 1,0,0,0,423,426,5,52,0,0,424,426,5,68,0,0,425,423,1,0,0,0,425,424,1,0,0, + 0,426,61,1,0,0,0,427,428,5,10,0,0,428,429,5,31,0,0,429,63,1,0,0,0,430,431, + 5,18,0,0,431,436,3,66,33,0,432,433,5,38,0,0,433,435,3,66,33,0,434,432,1, + 0,0,0,435,438,1,0,0,0,436,434,1,0,0,0,436,437,1,0,0,0,437,65,1,0,0,0,438, + 436,1,0,0,0,439,441,3,10,5,0,440,442,7,3,0,0,441,440,1,0,0,0,441,442,1, + 0,0,0,442,445,1,0,0,0,443,444,5,50,0,0,444,446,7,4,0,0,445,443,1,0,0,0, + 445,446,1,0,0,0,446,67,1,0,0,0,447,448,5,9,0,0,448,449,3,52,26,0,449,69, + 1,0,0,0,450,451,5,2,0,0,451,452,3,52,26,0,452,71,1,0,0,0,453,454,5,15,0, + 0,454,459,3,74,37,0,455,456,5,38,0,0,456,458,3,74,37,0,457,455,1,0,0,0, + 458,461,1,0,0,0,459,457,1,0,0,0,459,460,1,0,0,0,460,73,1,0,0,0,461,459, + 1,0,0,0,462,463,3,50,25,0,463,464,5,84,0,0,464,465,3,50,25,0,465,75,1,0, + 0,0,466,467,5,1,0,0,467,468,3,18,9,0,468,470,3,94,47,0,469,471,3,82,41, + 0,470,469,1,0,0,0,470,471,1,0,0,0,471,77,1,0,0,0,472,473,5,7,0,0,473,474, + 3,18,9,0,474,475,3,94,47,0,475,79,1,0,0,0,476,477,5,14,0,0,477,478,3,48, + 24,0,478,81,1,0,0,0,479,484,3,84,42,0,480,481,5,38,0,0,481,483,3,84,42, + 0,482,480,1,0,0,0,483,486,1,0,0,0,484,482,1,0,0,0,484,485,1,0,0,0,485,83, + 1,0,0,0,486,484,1,0,0,0,487,488,3,54,27,0,488,489,5,36,0,0,489,490,3,58, + 29,0,490,85,1,0,0,0,491,492,7,5,0,0,492,87,1,0,0,0,493,496,3,90,45,0,494, + 496,3,92,46,0,495,493,1,0,0,0,495,494,1,0,0,0,496,89,1,0,0,0,497,499,7, + 0,0,0,498,497,1,0,0,0,498,499,1,0,0,0,499,500,1,0,0,0,500,501,5,32,0,0, + 501,91,1,0,0,0,502,504,7,0,0,0,503,502,1,0,0,0,503,504,1,0,0,0,504,505, + 1,0,0,0,505,506,5,31,0,0,506,93,1,0,0,0,507,508,5,30,0,0,508,95,1,0,0,0, + 509,510,7,6,0,0,510,97,1,0,0,0,511,512,5,5,0,0,512,513,3,100,50,0,513,99, + 1,0,0,0,514,515,5,69,0,0,515,516,3,2,1,0,516,517,5,70,0,0,517,101,1,0,0, + 0,518,519,5,17,0,0,519,520,5,106,0,0,520,103,1,0,0,0,521,522,5,12,0,0,522, + 523,5,110,0,0,523,105,1,0,0,0,524,525,5,3,0,0,525,528,5,90,0,0,526,527, + 5,88,0,0,527,529,3,50,25,0,528,526,1,0,0,0,528,529,1,0,0,0,529,539,1,0, + 0,0,530,531,5,89,0,0,531,536,3,108,54,0,532,533,5,38,0,0,533,535,3,108, + 54,0,534,532,1,0,0,0,535,538,1,0,0,0,536,534,1,0,0,0,536,537,1,0,0,0,537, + 540,1,0,0,0,538,536,1,0,0,0,539,530,1,0,0,0,539,540,1,0,0,0,540,107,1,0, + 0,0,541,542,3,50,25,0,542,543,5,36,0,0,543,545,1,0,0,0,544,541,1,0,0,0, + 544,545,1,0,0,0,545,546,1,0,0,0,546,547,3,50,25,0,547,109,1,0,0,0,548,549, + 5,11,0,0,549,550,5,25,0,0,550,551,5,88,0,0,551,552,3,52,26,0,552,111,1, + 0,0,0,53,123,132,148,160,169,177,181,189,191,196,203,208,215,221,229,231, + 242,249,260,263,277,285,293,297,303,311,324,328,332,339,343,349,356,364, + 372,394,405,416,421,425,436,441,445,459,470,484,495,498,503,528,536,539, + 544]; private static __ATN: ATN; public static get _ATN(): ATN { @@ -4848,22 +4897,22 @@ export class NumericArrayLiteralContext extends ConstantContext { } } } -export class InputParamContext extends ConstantContext { +export class InputParamsContext extends ConstantContext { constructor(parser: esql_parser, ctx: ConstantContext) { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public PARAM(): TerminalNode { - return this.getToken(esql_parser.PARAM, 0); + public params(): ParamsContext { + return this.getTypedRuleContext(ParamsContext, 0) as ParamsContext; } public enterRule(listener: esql_parserListener): void { - if(listener.enterInputParam) { - listener.enterInputParam(this); + if(listener.enterInputParams) { + listener.enterInputParams(this); } } public exitRule(listener: esql_parserListener): void { - if(listener.exitInputParam) { - listener.exitInputParam(this); + if(listener.exitInputParams) { + listener.exitInputParams(this); } } } @@ -4907,6 +4956,58 @@ export class BooleanLiteralContext extends ConstantContext { } +export class ParamsContext extends ParserRuleContext { + constructor(parser?: esql_parser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public get ruleIndex(): number { + return esql_parser.RULE_params; + } + public copyFrom(ctx: ParamsContext): void { + super.copyFrom(ctx); + } +} +export class InputNamedOrPositionalParamContext extends ParamsContext { + constructor(parser: esql_parser, ctx: ParamsContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public NAMED_OR_POSITIONAL_PARAM(): TerminalNode { + return this.getToken(esql_parser.NAMED_OR_POSITIONAL_PARAM, 0); + } + public enterRule(listener: esql_parserListener): void { + if(listener.enterInputNamedOrPositionalParam) { + listener.enterInputNamedOrPositionalParam(this); + } + } + public exitRule(listener: esql_parserListener): void { + if(listener.exitInputNamedOrPositionalParam) { + listener.exitInputNamedOrPositionalParam(this); + } + } +} +export class InputParamContext extends ParamsContext { + constructor(parser: esql_parser, ctx: ParamsContext) { + super(parser, ctx.parentCtx, ctx.invokingState); + super.copyFrom(ctx); + } + public PARAM(): TerminalNode { + return this.getToken(esql_parser.PARAM, 0); + } + public enterRule(listener: esql_parserListener): void { + if(listener.enterInputParam) { + listener.enterInputParam(this); + } + } + public exitRule(listener: esql_parserListener): void { + if(listener.exitInputParam) { + listener.exitInputParam(this); + } + } +} + + export class LimitCommandContext extends ParserRuleContext { constructor(parser?: esql_parser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); diff --git a/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts b/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts index 3b98e746de9b3..eee7a421a1593 100644 --- a/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts +++ b/packages/kbn-esql-ast/src/antlr/esql_parser_listener.ts @@ -51,11 +51,13 @@ import { QualifiedIntegerLiteralContext } from "./esql_parser"; import { DecimalLiteralContext } from "./esql_parser"; import { IntegerLiteralContext } from "./esql_parser"; import { BooleanLiteralContext } from "./esql_parser"; -import { InputParamContext } from "./esql_parser"; +import { InputParamsContext } from "./esql_parser"; import { StringLiteralContext } from "./esql_parser"; import { NumericArrayLiteralContext } from "./esql_parser"; import { BooleanArrayLiteralContext } from "./esql_parser"; import { StringArrayLiteralContext } from "./esql_parser"; +import { InputParamContext } from "./esql_parser"; +import { InputNamedOrPositionalParamContext } from "./esql_parser"; import { LimitCommandContext } from "./esql_parser"; import { SortCommandContext } from "./esql_parser"; import { OrderExpressionContext } from "./esql_parser"; @@ -607,17 +609,17 @@ export default class esql_parserListener extends ParseTreeListener { */ exitBooleanLiteral?: (ctx: BooleanLiteralContext) => void; /** - * Enter a parse tree produced by the `inputParam` + * Enter a parse tree produced by the `inputParams` * labeled alternative in `esql_parser.constant`. * @param ctx the parse tree */ - enterInputParam?: (ctx: InputParamContext) => void; + enterInputParams?: (ctx: InputParamsContext) => void; /** - * Exit a parse tree produced by the `inputParam` + * Exit a parse tree produced by the `inputParams` * labeled alternative in `esql_parser.constant`. * @param ctx the parse tree */ - exitInputParam?: (ctx: InputParamContext) => void; + exitInputParams?: (ctx: InputParamsContext) => void; /** * Enter a parse tree produced by the `stringLiteral` * labeled alternative in `esql_parser.constant`. @@ -666,6 +668,30 @@ export default class esql_parserListener extends ParseTreeListener { * @param ctx the parse tree */ exitStringArrayLiteral?: (ctx: StringArrayLiteralContext) => void; + /** + * Enter a parse tree produced by the `inputParam` + * labeled alternative in `esql_parser.params`. + * @param ctx the parse tree + */ + enterInputParam?: (ctx: InputParamContext) => void; + /** + * Exit a parse tree produced by the `inputParam` + * labeled alternative in `esql_parser.params`. + * @param ctx the parse tree + */ + exitInputParam?: (ctx: InputParamContext) => void; + /** + * Enter a parse tree produced by the `inputNamedOrPositionalParam` + * labeled alternative in `esql_parser.params`. + * @param ctx the parse tree + */ + enterInputNamedOrPositionalParam?: (ctx: InputNamedOrPositionalParamContext) => void; + /** + * Exit a parse tree produced by the `inputNamedOrPositionalParam` + * labeled alternative in `esql_parser.params`. + * @param ctx the parse tree + */ + exitInputNamedOrPositionalParam?: (ctx: InputNamedOrPositionalParamContext) => void; /** * Enter a parse tree produced by `esql_parser.limitCommand`. * @param ctx the parse tree diff --git a/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts b/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts index e1e599946ef59..b05dfbe5f5788 100644 --- a/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts +++ b/packages/kbn-esql-utils/src/utils/get_esql_adhoc_dataview.ts @@ -31,11 +31,19 @@ export async function getESQLAdHocDataview( indexPattern: string, dataViewsService: DataViewsPublicPluginStart ) { - return await dataViewsService.create({ + const dataView = await dataViewsService.create({ title: indexPattern, type: ESQL_TYPE, id: await sha256(`esql-${indexPattern}`), }); + + // If the indexPattern is empty string means that the user used either the ROW or META FUNCTIONS / SHOW INFO commands + // we don't want to add the @timestamp field in this case https://github.com/elastic/kibana/issues/163417 + if (indexPattern && dataView?.fields?.getByName?.('@timestamp')?.type === 'date') { + dataView.timeFieldName = '@timestamp'; + } + + return dataView; } /** diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index 68dbb6ce73041..0fc1b047700a2 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -290,7 +290,7 @@ { "query": "from index [METADATA _id, _source2]", "error": [ - "Metadata field [_source2] is not available. Available metadata fields are: [_version, _id, _index, _source]" + "Metadata field [_source2] is not available. Available metadata fields are: [_version, _id, _index, _source, _ignored]" ], "warning": [ "Square brackets '[]' need to be removed from FROM METADATA declaration" @@ -337,7 +337,7 @@ { "query": "from index METADATA _id, _source2", "error": [ - "Metadata field [_source2] is not available. Available metadata fields are: [_version, _id, _index, _source]" + "Metadata field [_source2] is not available. Available metadata fields are: [_version, _id, _index, _source, _ignored]" ], "warning": [] }, @@ -504,7 +504,7 @@ { "query": "row", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -612,7 +612,7 @@ { "query": "row var = 1 in (", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", "Error: [in] function expects exactly 2 arguments, got 1." ], "warning": [] @@ -2846,7 +2846,7 @@ { "query": "from a_index | dissect", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -2902,7 +2902,7 @@ { "query": "from a_index | dissect stringField \"%{firstWord}\" option = ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', OPENING_BRACKET}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET}", "Invalid option for DISSECT: [option]" ], "warning": [] @@ -2941,7 +2941,7 @@ { "query": "from a_index | grok", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -3743,21 +3743,21 @@ { "query": "from a_index | where *+ numberField", "error": [ - "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { "query": "from a_index | where /+ numberField", "error": [ - "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { "query": "from a_index | where %+ numberField", "error": [ - "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -4324,7 +4324,7 @@ { "query": "from a_index | eval ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -4367,7 +4367,7 @@ { "query": "from a_index | eval a=b, ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", "Unknown column [b]" ], "warning": [] @@ -4394,7 +4394,7 @@ { "query": "from a_index | eval a=round(numberField), ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -5220,21 +5220,21 @@ { "query": "from a_index | eval *+ numberField", "error": [ - "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { "query": "from a_index | eval /+ numberField", "error": [ - "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { "query": "from a_index | eval %+ numberField", "error": [ - "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -6558,7 +6558,7 @@ { "query": "from a_index | eval not", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", "Error: [not] function expects exactly one argument, got 0." ], "warning": [] @@ -6566,7 +6566,7 @@ { "query": "from a_index | eval in", "error": [ - "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -7787,7 +7787,7 @@ { "query": "from a_index | stats by ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -7801,14 +7801,14 @@ { "query": "from a_index | stats numberField=", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { "query": "from a_index | stats numberField=5 by ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -8422,7 +8422,7 @@ { "query": "from a_index | sort ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, @@ -8441,7 +8441,7 @@ { "query": "from a_index | sort numberField, ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index 35a5ab9742561..939cd5507ae27 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -375,7 +375,7 @@ describe('validation logic', () => { describe('row', () => { testErrorsAndWarnings('row', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('row missing_column', ['Unknown column [missing_column]']); testErrorsAndWarnings('row fn()', ['Unknown function [fn]']); @@ -404,7 +404,7 @@ describe('validation logic', () => { "SyntaxError: mismatched input '' expecting '('", ]); testErrorsAndWarnings('row var = 1 in (', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", 'Error: [in] function expects exactly 2 arguments, got 1.', ]); testErrorsAndWarnings('row var = 1 not in ', [ @@ -782,7 +782,7 @@ describe('validation logic', () => { describe('dissect', () => { testErrorsAndWarnings('from a_index | dissect', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | dissect stringField', [ "SyntaxError: missing QUOTED_STRING at ''", @@ -807,7 +807,7 @@ describe('validation logic', () => { "SyntaxError: mismatched input '' expecting '='", ]); testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option = ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', OPENING_BRACKET}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET}", 'Invalid option for DISSECT: [option]', ]); testErrorsAndWarnings('from a_index | dissect stringField "%{firstWord}" option = 1', [ @@ -836,7 +836,7 @@ describe('validation logic', () => { describe('grok', () => { testErrorsAndWarnings('from a_index | grok', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | grok stringField', [ "SyntaxError: missing QUOTED_STRING at ''", @@ -921,7 +921,7 @@ describe('validation logic', () => { } for (const wrongOp of ['*', '/', '%']) { testErrorsAndWarnings(`from a_index | where ${wrongOp}+ numberField`, [ - `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, + `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, ]); } @@ -994,7 +994,7 @@ describe('validation logic', () => { describe('eval', () => { testErrorsAndWarnings('from a_index | eval ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | eval stringField ', []); testErrorsAndWarnings('from a_index | eval b = stringField', []); @@ -1007,7 +1007,7 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | eval a=b', ['Unknown column [b]']); testErrorsAndWarnings('from a_index | eval a=b, ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", 'Unknown column [b]', ]); testErrorsAndWarnings('from a_index | eval a=round', ['Unknown column [round]']); @@ -1016,7 +1016,7 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | eval a=round(numberField) ', []); testErrorsAndWarnings('from a_index | eval a=round(numberField), ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | eval a=round(numberField) + round(numberField) ', []); testErrorsAndWarnings('from a_index | eval a=round(numberField) + round(stringField) ', [ @@ -1079,7 +1079,7 @@ describe('validation logic', () => { for (const wrongOp of ['*', '/', '%']) { testErrorsAndWarnings(`from a_index | eval ${wrongOp}+ numberField`, [ - `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, + `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, ]); } testErrorsAndWarnings( @@ -1283,11 +1283,11 @@ describe('validation logic', () => { [] ); testErrorsAndWarnings('from a_index | eval not', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", 'Error: [not] function expects exactly one argument, got 0.', ]); testErrorsAndWarnings('from a_index | eval in', [ - "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | eval stringField in stringField', [ @@ -1376,16 +1376,16 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | stats by stringField', []); testErrorsAndWarnings('from a_index | stats by ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | stats numberField ', [ 'Expected an aggregate function or group but got [numberField] of type [FieldAttribute]', ]); testErrorsAndWarnings('from a_index | stats numberField=', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | stats numberField=5 by ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | stats avg(numberField) by wrongField', [ 'Unknown column [wrongField]', @@ -1596,12 +1596,12 @@ describe('validation logic', () => { describe('sort', () => { testErrorsAndWarnings('from a_index | sort ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | sort "field" ', []); testErrorsAndWarnings('from a_index | sort wrongField ', ['Unknown column [wrongField]']); testErrorsAndWarnings('from a_index | sort numberField, ', [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', NAMED_OR_POSITIONAL_PARAM, OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", ]); testErrorsAndWarnings('from a_index | sort numberField, stringField', []); for (const dir of ['desc', 'asc']) { diff --git a/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts b/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts index d44770d2f2096..d0a39b5c7fbfd 100644 --- a/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts +++ b/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts @@ -10,6 +10,8 @@ import type { Agent, Transaction } from 'elastic-apm-node'; const transaction: jest.Mocked = { addLabels: jest.fn().mockReturnValue(true), + addLink: jest.fn(), + addLinks: jest.fn(), ensureParentId: jest.fn().mockReturnValue(''), setLabel: jest.fn().mockReturnValue(true), setOutcome: jest.fn(), diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index dac1f609430b6..686f508cdac1e 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -696,6 +696,7 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ lightbulb: { enabled: false, }, + fixedOverflowWidgets: true, readOnly: isLoading || isDisabled || diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx index ea6e2a54a90de..7d8d8335cffff 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_popover.tsx @@ -19,7 +19,9 @@ import React, { memo, useEffect } from 'react'; * * */ export const getCustomCellPopoverRenderer = () => { - return memo(function RenderCustomCellPopover(props: EuiDataGridCellPopoverElementProps) { + const RenderCustomCellPopoverMemoized = memo(function RenderCustomCellPopoverMemoized( + props: EuiDataGridCellPopoverElementProps + ) { const { setCellPopoverProps, DefaultCellPopover } = props; useEffect(() => { @@ -30,4 +32,10 @@ export const getCustomCellPopoverRenderer = () => { return ; }); + + // Components passed to EUI DataGrid cannot be memoized components + // otherwise EUI throws an error `typeof Component !== 'function'` + return (props: EuiDataGridCellPopoverElementProps) => ( + + ); }; diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx index a56336fd53de7..35234bdb58d8f 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { memo, useEffect, useContext } from 'react'; +import React, { useEffect, useContext } from 'react'; import { i18n } from '@kbn/i18n'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { @@ -47,10 +47,7 @@ export const getRenderCellValueFn = ({ externalCustomRenderers?: CustomCellRenderer; isPlainRecord?: boolean; }) => { - /** - * memo is imperative here otherwise the cell will re-render on every hover on every cell - */ - return memo(function UnifiedDataTableRenderCellValue({ + return function UnifiedDataTableRenderCellValue({ rowIndex, columnId, isDetails, @@ -149,7 +146,7 @@ export const getRenderCellValueFn = ({ }} /> ); - }); + }; }; /** diff --git a/src/plugins/data/common/search/search_source/search_source.ts b/src/plugins/data/common/search/search_source/search_source.ts index 6f0807cb42248..0989251a3b50c 100644 --- a/src/plugins/data/common/search/search_source/search_source.ts +++ b/src/plugins/data/common/search/search_source/search_source.ts @@ -788,7 +788,7 @@ export class SearchSource { } } for (const query of request.query) { - if (query.query) { + if (query.query && query.language === 'kuery') { const nodes = fromKueryExpression(query.query); const queryFields = getKqlFieldNames(nodes); fields = fields.concat(queryFields); diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.ts b/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.ts index c4dd4d7e163b8..7f30ced5be035 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_esql_data_view.ts @@ -21,14 +21,7 @@ export async function getEsqlDataView( currentDataView?.isPersisted() || indexPatternFromQuery !== currentDataView?.getIndexPattern() ) { - const dataViewObj = await getESQLAdHocDataview(indexPatternFromQuery, services.dataViews); - - // If the indexPatternFromQuery is empty string means that the user used either the ROW or SHOW META / SHOW INFO commands - // we don't want to add the @timestamp field in this case https://github.com/elastic/kibana/issues/163417 - if (indexPatternFromQuery && dataViewObj.fields.getByName('@timestamp')?.type === 'date') { - dataViewObj.timeFieldName = '@timestamp'; - } - return dataViewObj; + return await getESQLAdHocDataview(indexPatternFromQuery, services.dataViews); } return currentDataView; } diff --git a/tsconfig.base.json b/tsconfig.base.json index 69f94542c779a..dda059e9432ee 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1000,6 +1000,8 @@ "@kbn/input-control-vis-plugin/*": ["src/plugins/input_control_vis/*"], "@kbn/inspector-plugin": ["src/plugins/inspector"], "@kbn/inspector-plugin/*": ["src/plugins/inspector/*"], + "@kbn/integration-assistant-plugin": ["x-pack/plugins/integration_assistant"], + "@kbn/integration-assistant-plugin/*": ["x-pack/plugins/integration_assistant/*"], "@kbn/interactive-setup-plugin": ["src/plugins/interactive_setup"], "@kbn/interactive-setup-plugin/*": ["src/plugins/interactive_setup/*"], "@kbn/interactive-setup-test-endpoints-plugin": ["test/interactive_setup_api_integration/plugins/test_endpoints"], diff --git a/versions.json b/versions.json index e58ab0c9f7f85..9240760ec44f4 100644 --- a/versions.json +++ b/versions.json @@ -20,7 +20,7 @@ "previousMinor": true }, { - "version": "7.17.22", + "version": "7.17.23", "branch": "7.17", "previousMajor": true } diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts index 09e24b3ab18d3..d1cc9b57460c2 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.gen.ts @@ -33,11 +33,11 @@ export const KnowledgeBaseEntryErrorSchema = z export type Metadata = z.infer; export const Metadata = z.object({ /** - * Knowledge Base resource name + * Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc */ kbResource: z.string(), /** - * Original text content source + * Source document name or filepath */ source: z.string(), /** diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml index a9a9794852953..63fcdf16b8fb1 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/knowledge_base/common_attributes.schema.yaml @@ -32,10 +32,10 @@ components: properties: kbResource: type: string - description: Knowledge Base resource name + description: Knowledge Base resource name for grouping entries, e.g. 'esql', 'lens-docs', etc source: type: string - description: Original text content source + description: Source document name or filepath required: type: boolean description: Whether or not this resource should always be included diff --git a/x-pack/packages/kbn-langchain/server/language_models/chat_openai.ts b/x-pack/packages/kbn-langchain/server/language_models/chat_openai.ts index 7675e2442e598..c2dada0dafa3b 100644 --- a/x-pack/packages/kbn-langchain/server/language_models/chat_openai.ts +++ b/x-pack/packages/kbn-langchain/server/language_models/chat_openai.ts @@ -27,6 +27,7 @@ export interface ActionsClientChatOpenAIParams { streaming?: boolean; traceId?: string; maxRetries?: number; + maxTokens?: number; model?: string; temperature?: number; signal?: AbortSignal; @@ -75,9 +76,11 @@ export class ActionsClientChatOpenAI extends ChatOpenAI { streaming = true, temperature, timeout, + maxTokens, }: ActionsClientChatOpenAIParams) { super({ maxRetries, + maxTokens, streaming, // matters only for the LangSmith logs (Metadata > Invocation Params), which are misleading if this is not set modelName: model ?? DEFAULT_OPEN_AI_MODEL, diff --git a/x-pack/packages/kbn-langchain/server/language_models/simple_chat_model.ts b/x-pack/packages/kbn-langchain/server/language_models/simple_chat_model.ts index f13b0a53611ef..9f6f3a331a7fb 100644 --- a/x-pack/packages/kbn-langchain/server/language_models/simple_chat_model.ts +++ b/x-pack/packages/kbn-langchain/server/language_models/simple_chat_model.ts @@ -35,6 +35,7 @@ export interface CustomChatModelInput extends BaseChatModelParams { temperature?: number; request: KibanaRequest; streaming: boolean; + maxTokens?: number; } export class ActionsClientSimpleChatModel extends SimpleChatModel { @@ -44,6 +45,7 @@ export class ActionsClientSimpleChatModel extends SimpleChatModel { #request: KibanaRequest; #traceId: string; #signal?: AbortSignal; + #maxTokens?: number; llmType: string; streaming: boolean; model?: string; @@ -59,6 +61,7 @@ export class ActionsClientSimpleChatModel extends SimpleChatModel { temperature, signal, streaming, + maxTokens, }: CustomChatModelInput) { super({}); @@ -68,6 +71,7 @@ export class ActionsClientSimpleChatModel extends SimpleChatModel { this.#logger = logger; this.#signal = signal; this.#request = request; + this.#maxTokens = maxTokens; this.llmType = llmType ?? 'ActionsClientSimpleChatModel'; this.model = model; this.temperature = temperature; @@ -95,7 +99,7 @@ export class ActionsClientSimpleChatModel extends SimpleChatModel { throw new Error('No messages provided.'); } const formattedMessages = []; - if (messages.length === 2) { + if (messages.length >= 2) { messages.forEach((message, i) => { if (typeof message.content !== 'string') { throw new Error('Multimodal messages are not supported.'); @@ -121,6 +125,7 @@ export class ActionsClientSimpleChatModel extends SimpleChatModel { subActionParams: { model: this.model, messages: formattedMessages, + maxTokens: this.#maxTokens, ...getDefaultArguments(this.llmType, this.temperature, options.stop), }, }, diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts index 7912c3ccbedc1..84efa2e3b2a5b 100644 --- a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts @@ -16,7 +16,8 @@ import { allOrAnyStringOrArray, dateRangeSchema, dateType, - summarySchema, + errorBudgetSchema, + statusSchema, } from '../../schema/common'; const fetchHistoricalSummaryParamsSchema = t.type({ @@ -41,12 +42,12 @@ const fetchHistoricalSummaryParamsSchema = t.type({ }), }); -const historicalSummarySchema = t.intersection([ - t.type({ - date: dateType, - }), - summarySchema, -]); +const historicalSummarySchema = t.type({ + date: dateType, + status: statusSchema, + sliValue: t.number, + errorBudget: errorBudgetSchema, +}); const fetchHistoricalSummaryResponseSchema = t.array( t.type({ diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts index 31e8c5852a1e1..be7e063ecc80f 100644 --- a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts @@ -14,6 +14,9 @@ const sortBySchema = t.union([ t.literal('error_budget_remaining'), t.literal('sli_value'), t.literal('status'), + t.literal('burn_rate_5m'), + t.literal('burn_rate_1h'), + t.literal('burn_rate_1d'), ]); const findSLOParamsSchema = t.partial({ diff --git a/x-pack/packages/kbn-slo-schema/src/schema/common.ts b/x-pack/packages/kbn-slo-schema/src/schema/common.ts index e2b6d5af0a023..188a5b8f07266 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/common.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/common.ts @@ -48,6 +48,9 @@ const summarySchema = t.intersection([ status: statusSchema, sliValue: t.number, errorBudget: errorBudgetSchema, + fiveMinuteBurnRate: t.number, + oneHourBurnRate: t.number, + oneDayBurnRate: t.number, }), t.partial({ summaryUpdatedAt: t.union([t.string, t.null]), diff --git a/x-pack/packages/security-solution/features/src/product_features_keys.ts b/x-pack/packages/security-solution/features/src/product_features_keys.ts index 5f6cd5f93b54b..be60a0edfdb3d 100644 --- a/x-pack/packages/security-solution/features/src/product_features_keys.ts +++ b/x-pack/packages/security-solution/features/src/product_features_keys.ts @@ -67,6 +67,11 @@ export enum ProductFeatureSecurityKey { * enables all rule actions */ externalRuleActions = 'external_rule_actions', + + /** + * enables Cloud Security Posture - CSPM, KSPM, CNVM + */ + cloudSecurityPosture = 'cloud_security_posture', } export enum ProductFeatureCasesKey { diff --git a/x-pack/packages/security-solution/features/src/security/product_feature_config.ts b/x-pack/packages/security-solution/features/src/security/product_feature_config.ts index 7fc2413e85e89..46ca114943795 100644 --- a/x-pack/packages/security-solution/features/src/security/product_feature_config.ts +++ b/x-pack/packages/security-solution/features/src/security/product_feature_config.ts @@ -121,4 +121,5 @@ export const securityDefaultProductFeaturesConfig: DefaultSecurityProductFeature [ProductFeatureSecurityKey.endpointProtectionUpdates]: {}, [ProductFeatureSecurityKey.endpointAgentTamperProtection]: {}, [ProductFeatureSecurityKey.externalRuleActions]: {}, + [ProductFeatureSecurityKey.cloudSecurityPosture]: {}, }; diff --git a/x-pack/packages/security-solution/upselling/service/types.ts b/x-pack/packages/security-solution/upselling/service/types.ts index 0b0d5b6e930f5..fdbd840429fec 100644 --- a/x-pack/packages/security-solution/upselling/service/types.ts +++ b/x-pack/packages/security-solution/upselling/service/types.ts @@ -17,6 +17,7 @@ export type UpsellingSectionId = | 'osquery_automated_response_actions' | 'endpoint_protection_updates' | 'endpoint_agent_tamper_protection' + | 'cloud_security_posture_integration_installation' | 'ruleDetailsEndpointExceptions'; export type UpsellingMessageId = diff --git a/x-pack/plugins/actions/docs/openapi/bundled.json b/x-pack/plugins/actions/docs/openapi/bundled.json index 81033683ee038..ae6e418dc775e 100644 --- a/x-pack/plugins/actions/docs/openapi/bundled.json +++ b/x-pack/plugins/actions/docs/openapi/bundled.json @@ -1512,6 +1512,42 @@ } } }, + "create_connector_request_gemini": { + "title": "Create Google Gemini connector request", + "description": "The Google Gemini connector uses axios to send a POST request to Google Gemini.", + "type": "object", + "required": [ + "config", + "connector_type_id", + "name", + "secrets" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/config_properties_gemini" + }, + "connector_type_id": { + "type": "string", + "description": "The type of connector.", + "enum": [ + ".gemini" + ], + "examples": [ + ".gemini" + ] + }, + "name": { + "type": "string", + "description": "The display name for the connector.", + "examples": [ + "my-connector" + ] + }, + "secrets": { + "$ref": "#/components/schemas/secrets_properties_gemini" + } + } + }, "create_connector_request_cases_webhook": { "title": "Create Webhook - Case Managment connector request", "description": "The Webhook - Case Management connector uses axios to send POST, PUT, and GET requests to a case management RESTful API web service.\n", @@ -2321,6 +2357,49 @@ } } }, + "config_properties_gemini": { + "title": "Connector request properties for an Google Gemini connector", + "description": "Defines properties for connectors when type is `.gemini`.", + "type": "object", + "required": [ + "apiUrl", + "gcpRegion", + "gcpProjectID" + ], + "properties": { + "apiUrl": { + "type": "string", + "description": "The Google Gemini request URL." + }, + "defaultModel": { + "type": "string", + "description": "The generative artificial intelligence model for Google Gemini to use.", + "default": "gemini-1.5-pro-preview-0409" + }, + "gcpRegion": { + "type": "string", + "description": "The GCP region where the Vertex AI endpoint enabled." + }, + "gcpProjectID": { + "type": "string", + "description": "The Google ProjectID that has Vertex AI endpoint enabled." + } + } + }, + "secrets_properties_gemini": { + "title": "Connector secrets properties for a Google Gemini connector", + "description": "Defines secrets for connectors when type is `.gemini`.", + "type": "object", + "required": [ + "credentialsJSON" + ], + "properties": { + "credentialsJSON": { + "type": "string", + "description": "The service account credentials JSON file. The service account should have Vertex AI user IAM role assigned to it." + } + } + }, "config_properties_cases_webhook": { "title": "Connector request properties for Webhook - Case Management connector", "required": [ @@ -3443,6 +3522,9 @@ { "$ref": "#/components/schemas/create_connector_request_bedrock" }, + { + "$ref": "#/components/schemas/create_connector_request_gemini" + }, { "$ref": "#/components/schemas/create_connector_request_cases_webhook" }, @@ -3514,6 +3596,7 @@ "propertyName": "connector_type_id", "mapping": { ".bedrock": "#/components/schemas/create_connector_request_bedrock", + ".gemini": "#/components/schemas/create_connector_request_gemini", ".cases-webhook": "#/components/schemas/create_connector_request_cases_webhook", ".d3security": "#/components/schemas/create_connector_request_d3security", ".email": "#/components/schemas/create_connector_request_email", @@ -3583,6 +3666,52 @@ } } }, + "connector_response_properties_gemini": { + "title": "Connector response properties for a Google Gemini connector", + "type": "object", + "required": [ + "connector_type_id", + "id", + "is_deprecated", + "is_preconfigured", + "name" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/config_properties_gemini" + }, + "connector_type_id": { + "type": "string", + "description": "The type of connector.", + "enum": [ + ".gemini" + ] + }, + "id": { + "type": "string", + "description": "The identifier for the connector." + }, + "is_deprecated": { + "$ref": "#/components/schemas/is_deprecated" + }, + "is_missing_secrets": { + "$ref": "#/components/schemas/is_missing_secrets" + }, + "is_preconfigured": { + "$ref": "#/components/schemas/is_preconfigured" + }, + "is_system_action": { + "$ref": "#/components/schemas/is_system_action" + }, + "name": { + "type": "string", + "description": "The display name for the connector." + }, + "referenced_by_count": { + "$ref": "#/components/schemas/referenced_by_count" + } + } + }, "connector_response_properties_cases_webhook": { "title": "Connector request properties for a Webhook - Case Management connector", "type": "object", @@ -4637,6 +4766,9 @@ { "$ref": "#/components/schemas/connector_response_properties_bedrock" }, + { + "$ref": "#/components/schemas/connector_response_properties_gemini" + }, { "$ref": "#/components/schemas/connector_response_properties_cases_webhook" }, @@ -4708,6 +4840,7 @@ "propertyName": "connector_type_id", "mapping": { ".bedrock": "#/components/schemas/connector_response_properties_bedrock", + ".gemini": "#/components/schemas/connector_response_properties_gemini", ".cases-webhook": "#/components/schemas/connector_response_properties_cases_webhook", ".d3security": "#/components/schemas/connector_response_properties_d3security", ".email": "#/components/schemas/connector_response_properties_email", @@ -4753,6 +4886,26 @@ } } }, + "update_connector_request_gemini": { + "title": "Update Google Gemini connector request", + "type": "object", + "required": [ + "config", + "name" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/config_properties_gemini" + }, + "name": { + "type": "string", + "description": "The display name for the connector." + }, + "secrets": { + "$ref": "#/components/schemas/secrets_properties_gemini" + } + } + }, "update_connector_request_cases_webhook": { "title": "Update Webhook - Case Managment connector request", "type": "object", @@ -5163,6 +5316,9 @@ { "$ref": "#/components/schemas/update_connector_request_bedrock" }, + { + "$ref": "#/components/schemas/update_connector_request_gemini" + }, { "$ref": "#/components/schemas/update_connector_request_cases_webhook" }, @@ -6364,7 +6520,9 @@ "enum": [ "alerting", "cases", - "generativeAI", + "generativeAIForSecurity", + "generativeAIForObservability", + "generativeAIForSearchPlayground", "siem", "uptime" ] @@ -6375,6 +6533,7 @@ "description": "The type of connector. For example, `.email`, `.index`, `.jira`, `.opsgenie`, or `.server-log`.", "enum": [ ".bedrock", + ".gemini", ".cases-webhook", ".d3security", ".email", @@ -7039,7 +7198,9 @@ "enabled_in_license": true, "minimum_license_required": "enterprise", "supported_feature_ids": [ - "generativeAI" + "generativeAIForSecurity", + "generativeAIForObservability", + "generativeAIForSearchPlayground" ], "is_system_action_type": false }, @@ -7051,7 +7212,21 @@ "enabled_in_license": true, "minimum_license_required": "enterprise", "supported_feature_ids": [ - "generativeAI" + "generativeAIForSecurity", + "generativeAIForObservability", + "generativeAIForSearchPlayground" + ], + "is_system_action_type": false + }, + { + "id": ".gemini", + "name": "Google Gemini", + "enabled": true, + "enabled_in_config": true, + "enabled_in_license": true, + "minimum_license_required": "enterprise", + "supported_feature_ids": [ + "generativeAIForSecurity" ], "is_system_action_type": false } diff --git a/x-pack/plugins/actions/docs/openapi/bundled.yaml b/x-pack/plugins/actions/docs/openapi/bundled.yaml index 599567cf08150..c9628f9916c6f 100644 --- a/x-pack/plugins/actions/docs/openapi/bundled.yaml +++ b/x-pack/plugins/actions/docs/openapi/bundled.yaml @@ -957,6 +957,32 @@ components: - my-connector secrets: $ref: '#/components/schemas/secrets_properties_bedrock' + create_connector_request_gemini: + title: Create Google Gemini connector request + description: The Google Gemini connector uses axios to send a POST request to Google Gemini. + type: object + required: + - config + - connector_type_id + - name + - secrets + properties: + config: + $ref: '#/components/schemas/config_properties_gemini' + connector_type_id: + type: string + description: The type of connector. + enum: + - .gemini + examples: + - .gemini + name: + type: string + description: The display name for the connector. + examples: + - my-connector + secrets: + $ref: '#/components/schemas/secrets_properties_gemini' create_connector_request_cases_webhook: title: Create Webhook - Case Managment connector request description: | @@ -1555,6 +1581,38 @@ components: secret: type: string description: The AWS secret for authentication. + config_properties_gemini: + title: Connector request properties for an Google Gemini connector + description: Defines properties for connectors when type is `.gemini`. + type: object + required: + - apiUrl + - gcpRegion + - gcpProjectID + properties: + apiUrl: + type: string + description: The Google Gemini request URL. + defaultModel: + type: string + description: The generative artificial intelligence model for Google Gemini to use. + default: gemini-1.5-pro-preview-0409 + gcpRegion: + type: string + description: The GCP region where the Vertex AI endpoint enabled. + gcpProjectID: + type: string + description: The Google ProjectID that has Vertex AI endpoint enabled. + secrets_properties_gemini: + title: Connector secrets properties for a Google Gemini connector + description: Defines secrets for connectors when type is `.gemini`. + type: object + required: + - credentialsJSON + properties: + credentialsJSON: + type: string + description: The service account credentials JSON file. The service account should have Vertex AI user IAM role assigned to it. config_properties_cases_webhook: title: Connector request properties for Webhook - Case Management connector required: @@ -2438,6 +2496,7 @@ components: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/create_connector_request_bedrock' + - $ref: '#/components/schemas/create_connector_request_gemini' - $ref: '#/components/schemas/create_connector_request_cases_webhook' - $ref: '#/components/schemas/create_connector_request_d3security' - $ref: '#/components/schemas/create_connector_request_email' @@ -2464,6 +2523,7 @@ components: propertyName: connector_type_id mapping: .bedrock: '#/components/schemas/create_connector_request_bedrock' + .gemini: '#/components/schemas/create_connector_request_gemini' .cases-webhook: '#/components/schemas/create_connector_request_cases_webhook' .d3security: '#/components/schemas/create_connector_request_d3security' .email: '#/components/schemas/create_connector_request_email' @@ -2518,6 +2578,39 @@ components: name: type: string description: The display name for the connector. + connector_response_properties_gemini: + title: Connector response properties for a Google Gemini connector + type: object + required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + properties: + config: + $ref: '#/components/schemas/config_properties_gemini' + connector_type_id: + type: string + description: The type of connector. + enum: + - .gemini + id: + type: string + description: The identifier for the connector. + is_deprecated: + $ref: '#/components/schemas/is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/is_preconfigured' + is_system_action: + $ref: '#/components/schemas/is_system_action' + name: + type: string + description: The display name for the connector. + referenced_by_count: + $ref: '#/components/schemas/referenced_by_count' connector_response_properties_cases_webhook: title: Connector request properties for a Webhook - Case Management connector type: object @@ -3276,6 +3369,7 @@ components: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/connector_response_properties_bedrock' + - $ref: '#/components/schemas/connector_response_properties_gemini' - $ref: '#/components/schemas/connector_response_properties_cases_webhook' - $ref: '#/components/schemas/connector_response_properties_d3security' - $ref: '#/components/schemas/connector_response_properties_email' @@ -3302,6 +3396,7 @@ components: propertyName: connector_type_id mapping: .bedrock: '#/components/schemas/connector_response_properties_bedrock' + .gemini: '#/components/schemas/connector_response_properties_gemini' .cases-webhook: '#/components/schemas/connector_response_properties_cases_webhook' .d3security: '#/components/schemas/connector_response_properties_d3security' .email: '#/components/schemas/connector_response_properties_email' @@ -3338,6 +3433,20 @@ components: description: The display name for the connector. secrets: $ref: '#/components/schemas/secrets_properties_bedrock' + update_connector_request_gemini: + title: Update Google Gemini connector request + type: object + required: + - config + - name + properties: + config: + $ref: '#/components/schemas/config_properties_gemini' + name: + type: string + description: The display name for the connector. + secrets: + $ref: '#/components/schemas/secrets_properties_gemini' update_connector_request_cases_webhook: title: Update Webhook - Case Managment connector request type: object @@ -3629,6 +3738,7 @@ components: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/update_connector_request_bedrock' + - $ref: '#/components/schemas/update_connector_request_gemini' - $ref: '#/components/schemas/update_connector_request_cases_webhook' - $ref: '#/components/schemas/update_connector_request_d3security' - $ref: '#/components/schemas/update_connector_request_email' @@ -4453,7 +4563,9 @@ components: enum: - alerting - cases - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground - siem - uptime connector_types: @@ -4462,6 +4574,7 @@ components: description: The type of connector. For example, `.email`, `.index`, `.jira`, `.opsgenie`, or `.server-log`. enum: - .bedrock + - .gemini - .cases-webhook - .d3security - .email @@ -4939,7 +5052,9 @@ components: enabled_in_license: true minimum_license_required: enterprise supported_feature_ids: - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground is_system_action_type: false - id: .bedrock name: AWS Bedrock @@ -4948,7 +5063,18 @@ components: enabled_in_license: true minimum_license_required: enterprise supported_feature_ids: - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + is_system_action_type: false + - id: .gemini + name: Google Gemini + enabled: true + enabled_in_config: true + enabled_in_license: true + minimum_license_required: enterprise + supported_feature_ids: + - generativeAIForSecurity is_system_action_type: false get_connector_types_response: summary: A list of connector types diff --git a/x-pack/plugins/actions/docs/openapi/bundled_serverless.json b/x-pack/plugins/actions/docs/openapi/bundled_serverless.json index 821f74fb1424c..8de6f01f7f43a 100644 --- a/x-pack/plugins/actions/docs/openapi/bundled_serverless.json +++ b/x-pack/plugins/actions/docs/openapi/bundled_serverless.json @@ -1341,12 +1341,12 @@ }, "defaultModel": { "type": "string", - "description": "The generative artificial intelligence model for Google Gemini to use.\n", + "description": "The generative artificial intelligence model for Google Gemini to use.", "default": "gemini-1.5-pro-preview-0409" }, "gcpRegion": { "type": "string", - "description": "The GCP region that has Vertex AI endpoint enabled." + "description": "The GCP region where the Vertex AI endpoint enabled." }, "gcpProjectID": { "type": "string", @@ -1355,7 +1355,7 @@ } }, "secrets_properties_gemini": { - "title": "Connector secrets properties for an Google Gemini connector", + "title": "Connector secrets properties for a Google Gemini connector", "description": "Defines secrets for connectors when type is `.gemini`.", "type": "object", "required": [ @@ -2635,10 +2635,9 @@ } }, "connector_response_properties_gemini": { - "title": "Connector response properties for an Google Gemini connector", + "title": "Connector response properties for a Google Gemini connector", "type": "object", "required": [ - "config", "connector_type_id", "id", "is_deprecated", @@ -2675,6 +2674,9 @@ "name": { "type": "string", "description": "The display name for the connector." + }, + "referenced_by_count": { + "$ref": "#/components/schemas/referenced_by_count" } } }, @@ -4356,7 +4358,9 @@ "enum": [ "alerting", "cases", - "generativeAI", + "generativeAIForSecurity", + "generativeAIForObservability", + "generativeAIForSearchPlayground", "siem", "uptime" ] @@ -4596,7 +4600,9 @@ "enabled_in_license": true, "minimum_license_required": "enterprise", "supported_feature_ids": [ - "generativeAI" + "generativeAIForSecurity", + "generativeAIForObservability", + "generativeAIForSearchPlayground" ], "is_system_action_type": false }, @@ -4608,7 +4614,9 @@ "enabled_in_license": true, "minimum_license_required": "enterprise", "supported_feature_ids": [ - "generativeAI" + "generativeAIForSecurity", + "generativeAIForObservability", + "generativeAIForSearchPlayground" ], "is_system_action_type": false }, @@ -4620,7 +4628,7 @@ "enabled_in_license": true, "minimum_license_required": "enterprise", "supported_feature_ids": [ - "generativeAI" + "generativeAIForSecurity" ], "is_system_action_type": false } diff --git a/x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml b/x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml index 047216dd7f6c4..ab5cf28a73848 100644 --- a/x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml +++ b/x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml @@ -304,6 +304,32 @@ components: - my-connector secrets: $ref: '#/components/schemas/secrets_properties_bedrock' + create_connector_request_gemini: + title: Create Google Gemini connector request + description: The Google Gemini connector uses axios to send a POST request to Google Gemini. + type: object + required: + - config + - connector_type_id + - name + - secrets + properties: + config: + $ref: '#/components/schemas/config_properties_gemini' + connector_type_id: + type: string + description: The type of connector. + enum: + - .gemini + examples: + - .gemini + name: + type: string + description: The display name for the connector. + examples: + - my-connector + secrets: + $ref: '#/components/schemas/secrets_properties_gemini' create_connector_request_cases_webhook: title: Create Webhook - Case Managment connector request description: | @@ -902,6 +928,38 @@ components: secret: type: string description: The AWS secret for authentication. + config_properties_gemini: + title: Connector request properties for an Google Gemini connector + description: Defines properties for connectors when type is `.gemini`. + type: object + required: + - apiUrl + - gcpRegion + - gcpProjectID + properties: + apiUrl: + type: string + description: The Google Gemini request URL. + defaultModel: + type: string + description: The generative artificial intelligence model for Google Gemini to use. + default: gemini-1.5-pro-preview-0409 + gcpRegion: + type: string + description: The GCP region where the Vertex AI endpoint enabled. + gcpProjectID: + type: string + description: The Google ProjectID that has Vertex AI endpoint enabled. + secrets_properties_gemini: + title: Connector secrets properties for a Google Gemini connector + description: Defines secrets for connectors when type is `.gemini`. + type: object + required: + - credentialsJSON + properties: + credentialsJSON: + type: string + description: The service account credentials JSON file. The service account should have Vertex AI user IAM role assigned to it. config_properties_cases_webhook: title: Connector request properties for Webhook - Case Management connector required: @@ -1785,6 +1843,7 @@ components: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/create_connector_request_bedrock' + - $ref: '#/components/schemas/create_connector_request_gemini' - $ref: '#/components/schemas/create_connector_request_cases_webhook' - $ref: '#/components/schemas/create_connector_request_d3security' - $ref: '#/components/schemas/create_connector_request_email' @@ -1811,6 +1870,7 @@ components: propertyName: connector_type_id mapping: .bedrock: '#/components/schemas/create_connector_request_bedrock' + .gemini: '#/components/schemas/create_connector_request_gemini' .cases-webhook: '#/components/schemas/create_connector_request_cases_webhook' .d3security: '#/components/schemas/create_connector_request_d3security' .email: '#/components/schemas/create_connector_request_email' @@ -1865,6 +1925,39 @@ components: name: type: string description: The display name for the connector. + connector_response_properties_gemini: + title: Connector response properties for a Google Gemini connector + type: object + required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + properties: + config: + $ref: '#/components/schemas/config_properties_gemini' + connector_type_id: + type: string + description: The type of connector. + enum: + - .gemini + id: + type: string + description: The identifier for the connector. + is_deprecated: + $ref: '#/components/schemas/is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/is_preconfigured' + is_system_action: + $ref: '#/components/schemas/is_system_action' + name: + type: string + description: The display name for the connector. + referenced_by_count: + $ref: '#/components/schemas/referenced_by_count' connector_response_properties_cases_webhook: title: Connector request properties for a Webhook - Case Management connector type: object @@ -2623,6 +2716,7 @@ components: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/connector_response_properties_bedrock' + - $ref: '#/components/schemas/connector_response_properties_gemini' - $ref: '#/components/schemas/connector_response_properties_cases_webhook' - $ref: '#/components/schemas/connector_response_properties_d3security' - $ref: '#/components/schemas/connector_response_properties_email' @@ -2649,6 +2743,7 @@ components: propertyName: connector_type_id mapping: .bedrock: '#/components/schemas/connector_response_properties_bedrock' + .gemini: '#/components/schemas/connector_response_properties_gemini' .cases-webhook: '#/components/schemas/connector_response_properties_cases_webhook' .d3security: '#/components/schemas/connector_response_properties_d3security' .email: '#/components/schemas/connector_response_properties_email' @@ -2685,6 +2780,20 @@ components: description: The display name for the connector. secrets: $ref: '#/components/schemas/secrets_properties_bedrock' + update_connector_request_gemini: + title: Update Google Gemini connector request + type: object + required: + - config + - name + properties: + config: + $ref: '#/components/schemas/config_properties_gemini' + name: + type: string + description: The display name for the connector. + secrets: + $ref: '#/components/schemas/secrets_properties_gemini' update_connector_request_cases_webhook: title: Update Webhook - Case Managment connector request type: object @@ -2976,6 +3085,7 @@ components: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/update_connector_request_bedrock' + - $ref: '#/components/schemas/update_connector_request_gemini' - $ref: '#/components/schemas/update_connector_request_cases_webhook' - $ref: '#/components/schemas/update_connector_request_d3security' - $ref: '#/components/schemas/update_connector_request_email' @@ -3004,7 +3114,9 @@ components: enum: - alerting - cases - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground - siem - uptime connector_types: @@ -3013,6 +3125,7 @@ components: description: The type of connector. For example, `.email`, `.index`, `.jira`, `.opsgenie`, or `.server-log`. enum: - .bedrock + - .gemini - .cases-webhook - .d3security - .email @@ -3197,7 +3310,9 @@ components: enabled_in_license: true minimum_license_required: enterprise supported_feature_ids: - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground is_system_action_type: false - id: .bedrock name: AWS Bedrock @@ -3206,7 +3321,18 @@ components: enabled_in_license: true minimum_license_required: enterprise supported_feature_ids: - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + is_system_action_type: false + - id: .gemini + name: Google Gemini + enabled: true + enabled_in_config: true + enabled_in_license: true + minimum_license_required: enterprise + supported_feature_ids: + - generativeAIForSecurity is_system_action_type: false responses: '401': diff --git a/x-pack/plugins/actions/docs/openapi/components/examples/get_connector_types_generativeai_response.yaml b/x-pack/plugins/actions/docs/openapi/components/examples/get_connector_types_generativeai_response.yaml index b271d7f0f3df3..a97199e0a3927 100644 --- a/x-pack/plugins/actions/docs/openapi/components/examples/get_connector_types_generativeai_response.yaml +++ b/x-pack/plugins/actions/docs/openapi/components/examples/get_connector_types_generativeai_response.yaml @@ -7,7 +7,9 @@ value: enabled_in_license: true minimum_license_required: enterprise supported_feature_ids: - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground is_system_action_type: false - id: .bedrock name: AWS Bedrock @@ -16,9 +18,10 @@ value: enabled_in_license: true minimum_license_required: enterprise supported_feature_ids: - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground is_system_action_type: false - - id: .gemini name: Google Gemini enabled: true @@ -26,5 +29,5 @@ value: enabled_in_license: true minimum_license_required: enterprise supported_feature_ids: - - generativeAI + - generativeAIForSecurity is_system_action_type: false diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/config_properties_gemini.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/config_properties_gemini.yaml new file mode 100644 index 0000000000000..f68c43390143d --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/config_properties_gemini.yaml @@ -0,0 +1,21 @@ +title: Connector request properties for an Google Gemini connector +description: Defines properties for connectors when type is `.gemini`. +type: object +required: + - apiUrl + - gcpRegion + - gcpProjectID +properties: + apiUrl: + type: string + description: The Google Gemini request URL. + defaultModel: + type: string + description: The generative artificial intelligence model for Google Gemini to use. + default: gemini-1.5-pro-preview-0409 + gcpRegion: + type: string + description: The GCP region where the Vertex AI endpoint enabled. + gcpProjectID: + type: string + description: The Google ProjectID that has Vertex AI endpoint enabled. \ No newline at end of file diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties_gemini.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties_gemini.yaml new file mode 100644 index 0000000000000..eb263e13e95ed --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties_gemini.yaml @@ -0,0 +1,32 @@ +title: Connector response properties for a Google Gemini connector +type: object +required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name +properties: + config: + $ref: 'config_properties_gemini.yaml' + connector_type_id: + type: string + description: The type of connector. + enum: + - .gemini + id: + type: string + description: The identifier for the connector. + is_deprecated: + $ref: 'is_deprecated.yaml' + is_missing_secrets: + $ref: 'is_missing_secrets.yaml' + is_preconfigured: + $ref: 'is_preconfigured.yaml' + is_system_action: + $ref: 'is_system_action.yaml' + name: + type: string + description: The display name for the connector. + referenced_by_count: + $ref: 'referenced_by_count.yaml' diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/create_connector_request_gemini.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/create_connector_request_gemini.yaml new file mode 100644 index 0000000000000..b9f4a651003c0 --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/create_connector_request_gemini.yaml @@ -0,0 +1,25 @@ +title: Create Google Gemini connector request +description: The Google Gemini connector uses axios to send a POST request to Google Gemini. +type: object +required: + - config + - connector_type_id + - name + - secrets +properties: + config: + $ref: 'config_properties_gemini.yaml' + connector_type_id: + type: string + description: The type of connector. + enum: + - .gemini + examples: + - .gemini + name: + type: string + description: The display name for the connector. + examples: + - my-connector + secrets: + $ref: 'secrets_properties_gemini.yaml' diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/features.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/features.yaml index e75b745957552..c17b4a68b594b 100644 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/features.yaml +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/features.yaml @@ -4,6 +4,8 @@ description: > enum: - alerting - cases - - generativeAI + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground - siem - uptime \ No newline at end of file diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/secrets_properties_gemini.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/secrets_properties_gemini.yaml new file mode 100644 index 0000000000000..98e89e1ba373c --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/secrets_properties_gemini.yaml @@ -0,0 +1,9 @@ +title: Connector secrets properties for a Google Gemini connector +description: Defines secrets for connectors when type is `.gemini`. +type: object +required: + - credentialsJSON +properties: + credentialsJSON: + type: string + description: The service account credentials JSON file. The service account should have Vertex AI user IAM role assigned to it. \ No newline at end of file diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/update_connector_request_gemini.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/update_connector_request_gemini.yaml new file mode 100644 index 0000000000000..93aade3b39d11 --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/update_connector_request_gemini.yaml @@ -0,0 +1,13 @@ +title: Update Google Gemini connector request +type: object +required: + - config + - name +properties: + config: + $ref: 'config_properties_gemini.yaml' + name: + type: string + description: The display name for the connector. + secrets: + $ref: 'secrets_properties_gemini.yaml' diff --git a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap index 06b23beca7af4..f431271ad42f9 100644 --- a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap +++ b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap @@ -212,6 +212,19 @@ Object { "presence": "optional", }, "keys": Object { + "maxTokens": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "number", + }, "messages": Object { "flags": Object { "error": [Function], @@ -399,6 +412,19 @@ Object { "presence": "optional", }, "keys": Object { + "maxTokens": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "metas": Array [ + Object { + "x-oas-optional": true, + }, + ], + "type": "number", + }, "messages": Object { "flags": Object { "error": [Function], diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_data_view_by_index_pattern.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_data_view_by_index_pattern.ts index 8d0385e8d9f9e..8ef09d59555ea 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_data_view_by_index_pattern.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_data_view_by_index_pattern.ts @@ -6,6 +6,7 @@ */ import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/public'; +import { getESQLAdHocDataview } from '@kbn/esql-utils'; /** * Get a saved data view that matches the index pattern (as close as possible) @@ -34,14 +35,7 @@ export async function getOrCreateDataViewByIndexPattern( indexPatternFromQuery && (currentDataView?.isPersisted() || indexPatternFromQuery !== currentDataView?.getIndexPattern()) ) { - const dataViewObj = await dataViews.create({ - title: indexPatternFromQuery, - }); - - if (dataViewObj.fields.getByName('@timestamp')?.type === 'date') { - dataViewObj.timeFieldName = '@timestamp'; - } - return dataViewObj; + return await getESQLAdHocDataview(indexPatternFromQuery, dataViews); } return currentDataView; } diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts index 5430bf597ebe7..90c0850c503fe 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/create_knowledge_base_entry.ts @@ -18,8 +18,8 @@ import { CreateKnowledgeBaseEntrySchema } from './types'; export interface CreateKnowledgeBaseEntryParams { esClient: ElasticsearchClient; - logger: Logger; knowledgeBaseIndex: string; + logger: Logger; spaceId: string; user: AuthenticatedUser; knowledgeBaseEntry: KnowledgeBaseEntryCreateProps; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts index dc7f64e1aeee1..839ac3e559ba1 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/helpers.ts @@ -6,6 +6,8 @@ */ import { errors } from '@elastic/elasticsearch'; +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { AuthenticatedUser } from '@kbn/core-security-common'; export const isModelAlreadyExistsError = (error: Error) => { return ( @@ -14,3 +16,87 @@ export const isModelAlreadyExistsError = (error: Error) => { error.body.error.type === 'status_exception') ); }; + +/** + * Returns an Elasticsearch query DSL that performs a vector search against the Knowledge Base for the given query/user/filter. + * + * @param filter - Optional filter to apply to the search + * @param kbResource - Specific resource tag to filter for, e.g. 'esql' or 'user' + * @param modelId - ID of the model to search with, e.g. `.elser_model_2` + * @param query - The search query provided by the user + * @param required - Whether to only include required entries + * @param user - The authenticated user + * @returns + */ +export const getKBVectorSearchQuery = ({ + filter, + kbResource, + modelId, + query, + required, + user, +}: { + filter?: QueryDslQueryContainer | undefined; + kbResource?: string | undefined; + modelId: string; + query: string; + required?: boolean | undefined; + user: AuthenticatedUser; +}): QueryDslQueryContainer => { + const resourceFilter = kbResource + ? [ + { + term: { + 'metadata.kbResource': kbResource, + }, + }, + ] + : []; + const requiredFilter = required + ? [ + { + term: { + 'metadata.required': required, + }, + }, + ] + : []; + + const userFilter = [ + { + nested: { + path: 'users', + query: { + bool: { + must: [ + { + match: user.profile_uid + ? { 'users.id': user.profile_uid } + : { 'users.name': user.username }, + }, + ], + }, + }, + }, + }, + ]; + + return { + bool: { + must: [ + { + text_expansion: { + 'vector.tokens': { + model_id: modelId, + model_text: query, + }, + }, + }, + ...requiredFilter, + ...resourceFilter, + ...userFilter, + ], + filter, + }, + }; +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts index 771ec35c07c51..1e867ac4ae468 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts @@ -11,19 +11,23 @@ import { } from '@elastic/elasticsearch/lib/api/types'; import type { MlPluginSetup } from '@kbn/ml-plugin/server'; import type { KibanaRequest } from '@kbn/core-http-server'; -import type { Document } from 'langchain/document'; +import { Document } from 'langchain/document'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { KnowledgeBaseEntryResponse } from '@kbn/elastic-assistant-common'; +import { + KnowledgeBaseEntryCreateProps, + KnowledgeBaseEntryResponse, +} from '@kbn/elastic-assistant-common'; import pRetry from 'p-retry'; +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { AIAssistantDataClient, AIAssistantDataClientParams } from '..'; import { ElasticsearchStore } from '../../lib/langchain/elasticsearch_store/elasticsearch_store'; import { loadESQL } from '../../lib/langchain/content_loaders/esql_loader'; import { GetElser } from '../../types'; -import { transformToCreateSchema } from './create_knowledge_base_entry'; +import { createKnowledgeBaseEntry, transformToCreateSchema } from './create_knowledge_base_entry'; import { EsKnowledgeBaseEntrySchema } from './types'; import { transformESSearchToKnowledgeBaseEntry } from './transforms'; import { ESQL_DOCS_LOADED_QUERY } from '../../routes/knowledge_base/constants'; -import { isModelAlreadyExistsError } from './helpers'; +import { getKBVectorSearchQuery, isModelAlreadyExistsError } from './helpers'; interface KnowledgeBaseDataClientParams extends AIAssistantDataClientParams { ml: MlPluginSetup; @@ -217,8 +221,7 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { /** * Adds LangChain Documents to the knowledge base * - * @param documents - * @param authenticatedUser + * @param documents LangChain Documents to add to the knowledge base */ public addKnowledgeBaseDocuments = async ({ documents, @@ -261,4 +264,100 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { return created?.data ? transformESSearchToKnowledgeBaseEntry(created?.data) : []; }; + + /** + * Performs similarity search to retrieve LangChain Documents from the knowledge base + */ + public getKnowledgeBaseDocuments = async ({ + filter, + kbResource, + query, + required, + }: { + filter?: QueryDslQueryContainer; + kbResource?: string; + query: string; + required?: boolean; + }): Promise => { + const user = this.options.currentUser; + if (user == null) { + throw new Error( + 'Authenticated user not found! Ensure kbDataClient was initialized from a request.' + ); + } + + const esClient = await this.options.elasticsearchClientPromise; + const modelId = await this.options.getElserId(); + + const vectorSearchQuery = getKBVectorSearchQuery({ + filter, + kbResource, + modelId, + query, + required, + user, + }); + + try { + const result = await esClient.search({ + index: this.indexTemplateAndPattern.alias, + size: 10, + query: vectorSearchQuery, + }); + + const results = result.hits.hits.map( + (hit) => + new Document({ + pageContent: hit?._source?.text ?? '', + metadata: hit?._source?.metadata ?? {}, + }) + ); + + this.options.logger.debug( + `getKnowledgeBaseDocuments() - Similarity Search Query:\n ${JSON.stringify( + vectorSearchQuery + )}` + ); + this.options.logger.debug( + `getKnowledgeBaseDocuments() - Similarity Search Results:\n ${JSON.stringify(results)}` + ); + + return results; + } catch (e) { + this.options.logger.error(`Error performing KB Similarity Search: ${e.message}`); + return []; + } + }; + + /** + * Creates a new Knowledge Base Entry. + * + * @param knowledgeBaseEntry + */ + public createKnowledgeBaseEntry = async ({ + knowledgeBaseEntry, + }: { + knowledgeBaseEntry: KnowledgeBaseEntryCreateProps; + }): Promise => { + const authenticatedUser = this.options.currentUser; + if (authenticatedUser == null) { + throw new Error( + 'Authenticated user not found! Ensure kbDataClient was initialized from a request.' + ); + } + + this.options.logger.debug( + `Creating Knowledge Base Entry:\n ${JSON.stringify(knowledgeBaseEntry, null, 2)}` + ); + this.options.logger.debug(`kbIndex: ${this.indexTemplateAndPattern.alias}`); + const esClient = await this.options.elasticsearchClientPromise; + return createKnowledgeBaseEntry({ + esClient, + knowledgeBaseIndex: this.indexTemplateAndPattern.alias, + logger: this.options.logger, + spaceId: this.spaceId, + user: authenticatedUser, + knowledgeBaseEntry, + }); + }; } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts index 8323712c50aa7..7ea1e5fb3c9b9 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/execute_custom_llm_chain/index.ts @@ -89,12 +89,13 @@ export const callAgentExecutor: AgentExecutor = async ({ // Fetch any applicable tools that the source plugin may have registered const assistantToolParams: AssistantToolParams = { - anonymizationFields, alertsIndexPattern, - isEnabledKnowledgeBase, + anonymizationFields, chain, - llm, esClient, + isEnabledKnowledgeBase, + llm, + logger, modelExists, onNewReplacements, replacements, diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index 8acd7f4fcdde2..bd07099e312b3 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -9,7 +9,7 @@ import { PluginStartContract as ActionsPluginStart } from '@kbn/actions-plugin/s import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { BaseMessage } from '@langchain/core/messages'; import { Logger } from '@kbn/logging'; -import { KibanaRequest, ResponseHeaders } from '@kbn/core-http-server'; +import { KibanaRequest, KibanaResponseFactory, ResponseHeaders } from '@kbn/core-http-server'; import type { LangChainTracer } from '@langchain/core/tracers/tracer_langchain'; import { ExecuteConnectorRequestBody, Message, Replacements } from '@kbn/elastic-assistant-common'; import { StreamResponseWithHeaders } from '@kbn/ml-response-stream/server'; @@ -17,6 +17,21 @@ import { AnonymizationFieldResponse } from '@kbn/elastic-assistant-common/impl/s import { ResponseBody } from '../types'; import type { AssistantTool } from '../../../types'; import { ElasticsearchStore } from '../elasticsearch_store/elasticsearch_store'; +import { AIAssistantKnowledgeBaseDataClient } from '../../../ai_assistant_data_clients/knowledge_base'; +import { AIAssistantConversationsDataClient } from '../../../ai_assistant_data_clients/conversations'; +import { AIAssistantDataClient } from '../../../ai_assistant_data_clients'; + +export type OnLlmResponse = ( + content: string, + traceData?: Message['traceData'], + isError?: boolean +) => Promise; + +export interface AssistantDataClients { + anonymizationFieldsDataClient?: AIAssistantDataClient; + conversationsDataClient?: AIAssistantConversationsDataClient; + kbDataClient?: AIAssistantKnowledgeBaseDataClient; +} export interface AgentExecutorParams { abortSignal?: AbortSignal; @@ -26,6 +41,8 @@ export interface AgentExecutorParams { isEnabledKnowledgeBase: boolean; assistantTools?: AssistantTool[]; connectorId: string; + conversationId?: string; + dataClients?: AssistantDataClients; esClient: ElasticsearchClient; esStore: ElasticsearchStore; langChainMessages: BaseMessage[]; @@ -34,12 +51,9 @@ export interface AgentExecutorParams { onNewReplacements?: (newReplacements: Replacements) => void; replacements: Replacements; isStream?: T; - onLlmResponse?: ( - content: string, - traceData?: Message['traceData'], - isError?: boolean - ) => Promise; + onLlmResponse?: OnLlmResponse; request: KibanaRequest; + response?: KibanaResponseFactory; size?: number; traceOptions?: TraceOptions; } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts new file mode 100644 index 0000000000000..779bf20a61720 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { RunnableConfig } from '@langchain/core/runnables'; +import { END, START, StateGraph, StateGraphArgs } from '@langchain/langgraph'; +import { AgentAction, AgentFinish, AgentStep } from '@langchain/core/agents'; +import { AgentRunnableSequence } from 'langchain/dist/agents/agent'; +import { StructuredTool } from '@langchain/core/tools'; +import type { Logger } from '@kbn/logging'; + +import { BaseMessage } from '@langchain/core/messages'; +import { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { AgentState, NodeParamsBase } from './types'; +import { AssistantDataClients } from '../../executors/types'; +import { shouldContinue } from './nodes/should_continue'; +import { AGENT_NODE, runAgent } from './nodes/run_agent'; +import { executeTools, TOOLS_NODE } from './nodes/execute_tools'; + +export const DEFAULT_ASSISTANT_GRAPH_ID = 'Default Security Assistant Graph'; + +interface GetDefaultAssistantGraphParams { + agentRunnable: AgentRunnableSequence; + dataClients?: AssistantDataClients; + conversationId?: string; + llm: BaseChatModel; + logger: Logger; + messages: BaseMessage[]; + tools: StructuredTool[]; +} + +export type DefaultAssistantGraph = ReturnType; + +/** + * Returns a compiled default assistant graph + */ +export const getDefaultAssistantGraph = ({ + agentRunnable, + conversationId, + dataClients, + llm, + logger, + messages, + tools, +}: GetDefaultAssistantGraphParams) => { + try { + // Default graph state + const graphState: StateGraphArgs['channels'] = { + input: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + steps: { + value: (x: AgentStep[], y: AgentStep[]) => x.concat(y), + default: () => [], + }, + agentOutcome: { + value: ( + x: AgentAction | AgentFinish | undefined, + y?: AgentAction | AgentFinish | undefined + ) => y ?? x, + default: () => undefined, + }, + messages: { + value: (x: BaseMessage[], y: BaseMessage[]) => x.concat(y), + default: () => messages, + }, + }; + + // Default node parameters + const nodeParams: NodeParamsBase = { + model: llm, + logger, + }; + + // Create nodes + const runAgentNode = (state: AgentState, config?: RunnableConfig) => + runAgent({ + ...nodeParams, + agentRunnable, + config, + dataClients, + logger: logger.get(AGENT_NODE), + state, + }); + const executeToolsNode = (state: AgentState, config?: RunnableConfig) => + executeTools({ + ...nodeParams, + config, + logger: logger.get(TOOLS_NODE), + state, + tools, + }); + const shouldContinueEdge = (state: AgentState) => shouldContinue({ ...nodeParams, state }); + + // Put together a new graph using the nodes and default state from above + const graph = new StateGraph, '__start__' | 'agent' | 'tools'>({ + channels: graphState, + }); + // Define the nodes to cycle between + graph.addNode(AGENT_NODE, runAgentNode); + graph.addNode(TOOLS_NODE, executeToolsNode); + // Add conditional edge for basic routing + graph.addConditionalEdges(AGENT_NODE, shouldContinueEdge, { continue: TOOLS_NODE, end: END }); + // Add edges, alternating between agent and action until finished + graph.addEdge(START, AGENT_NODE); + graph.addEdge(TOOLS_NODE, AGENT_NODE); + // Compile the graph + return graph.compile(); + } catch (e) { + throw new Error(`Unable to compile DefaultAssistantGraph\n${e}`); + } +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts new file mode 100644 index 0000000000000..383b3e9f5cee8 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts @@ -0,0 +1,189 @@ +/* + * Copyright 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 agent, { Span } from 'elastic-apm-node'; +import type { Logger } from '@kbn/logging'; +import { streamFactory, StreamResponseWithHeaders } from '@kbn/ml-response-stream/server'; +import { transformError } from '@kbn/securitysolution-es-utils'; +import type { KibanaRequest } from '@kbn/core-http-server'; +import type { ExecuteConnectorRequestBody, TraceData } from '@kbn/elastic-assistant-common'; +import { DEFAULT_ASSISTANT_GRAPH_ID, DefaultAssistantGraph } from './graph'; +import type { OnLlmResponse, TraceOptions } from '../../executors/types'; +import type { APMTracer } from '../../tracers/apm_tracer'; +import { withAssistantSpan } from '../../tracers/with_assistant_span'; + +interface StreamGraphParams { + apmTracer: APMTracer; + assistantGraph: DefaultAssistantGraph; + inputs: { input: string }; + logger: Logger; + onLlmResponse?: OnLlmResponse; + request: KibanaRequest; + traceOptions?: TraceOptions; +} + +/** + * Execute the graph in streaming mode + * + * @param apmTracer + * @param assistantGraph + * @param inputs + * @param logger + * @param onLlmResponse + * @param request + * @param traceOptions + */ +export const streamGraph = async ({ + apmTracer, + assistantGraph, + inputs, + logger, + onLlmResponse, + request, + traceOptions, +}: StreamGraphParams): Promise => { + let streamingSpan: Span | undefined; + if (agent.isStarted()) { + streamingSpan = agent.startSpan(`${DEFAULT_ASSISTANT_GRAPH_ID} (Streaming)`) ?? undefined; + } + const { + end: streamEnd, + push, + responseWithHeaders, + } = streamFactory<{ type: string; payload: string }>(request.headers, logger, false, false); + + let didEnd = false; + const handleStreamEnd = (finalResponse: string, isError = false) => { + if (onLlmResponse) { + onLlmResponse( + finalResponse, + { + transactionId: streamingSpan?.transaction?.ids?.['transaction.id'], + traceId: streamingSpan?.ids?.['trace.id'], + }, + isError + ).catch(() => {}); + } + streamEnd(); + didEnd = true; + if ((streamingSpan && !streamingSpan?.outcome) || streamingSpan?.outcome === 'unknown') { + streamingSpan.outcome = 'success'; + } + streamingSpan?.end(); + }; + + let finalMessage = ''; + const stream = assistantGraph.streamEvents(inputs, { + callbacks: [apmTracer, ...(traceOptions?.tracers ?? [])], + runName: DEFAULT_ASSISTANT_GRAPH_ID, + streamMode: 'values', + tags: traceOptions?.tags ?? [], + version: 'v1', + }); + + const processEvent = async () => { + try { + const { value, done } = await stream.next(); + if (done) return; + + const event = value; + if (event.event === 'on_llm_stream') { + const chunk = event.data?.chunk; + // TODO: For Bedrock streaming support, override `handleLLMNewToken` in callbacks, + // TODO: or maybe we can update ActionsClientSimpleChatModel to handle this `on_llm_stream` event + if (event.name === 'ActionsClientChatOpenAI') { + const msg = chunk.message; + + if (msg.tool_call_chunks && msg.tool_call_chunks.length > 0) { + /* empty */ + } else if (!didEnd) { + if (msg.response_metadata.finish_reason === 'stop') { + handleStreamEnd(finalMessage); + } else { + push({ payload: msg.content, type: 'content' }); + finalMessage += msg.content; + } + } + } + } + + await processEvent(); + } catch (err) { + // if I throw an error here, it crashes the server. Not sure how to get around that. + // If I put await on this function the error works properly, but when there is not an error + // it waits for the entire stream to complete before resolving + const error = transformError(err); + + if (error.message === 'AbortError') { + // user aborted the stream, we must end it manually here + return handleStreamEnd(finalMessage); + } + logger.error(`Error streaming from LangChain: ${error.message}`); + push({ payload: error.message, type: 'content' }); + handleStreamEnd(error.message, true); + } + }; + + // Start processing events, do not await! Return `responseWithHeaders` immediately + await processEvent(); + + return responseWithHeaders; +}; + +interface InvokeGraphParams { + apmTracer: APMTracer; + assistantGraph: DefaultAssistantGraph; + inputs: { input: string }; + onLlmResponse?: OnLlmResponse; + traceOptions?: TraceOptions; +} +interface InvokeGraphResponse { + output: string; + traceData: TraceData; +} + +/** + * Execute the graph in non-streaming mode + * + * @param apmTracer + * @param assistantGraph + * @param inputs + * @param onLlmResponse + * @param traceOptions + */ +export const invokeGraph = async ({ + apmTracer, + assistantGraph, + inputs, + onLlmResponse, + traceOptions, +}: InvokeGraphParams): Promise => { + return withAssistantSpan(DEFAULT_ASSISTANT_GRAPH_ID, async (span) => { + let traceData: TraceData = {}; + if (span?.transaction?.ids['transaction.id'] != null && span?.ids['trace.id'] != null) { + traceData = { + // Transactions ID since this span is the parent + transactionId: span.transaction.ids['transaction.id'], + traceId: span.ids['trace.id'], + }; + span.addLabels({ evaluationId: traceOptions?.evaluationId }); + } + + const r = await assistantGraph.invoke(inputs, { + callbacks: [apmTracer, ...(traceOptions?.tracers ?? [])], + runName: DEFAULT_ASSISTANT_GRAPH_ID, + tags: traceOptions?.tags ?? [], + }); + const output = r.agentOutcome.returnValues.output; + + if (onLlmResponse) { + await onLlmResponse(output, traceData); + } + + return { output, traceData }; + }); +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts new file mode 100644 index 0000000000000..1e40f6b2fe127 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.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 { StructuredTool } from '@langchain/core/tools'; +import { RetrievalQAChain } from 'langchain/chains'; +import { + getDefaultArguments, + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server'; +import { createOpenAIFunctionsAgent, createStructuredChatAgent } from 'langchain/agents'; +import { AssistantToolParams } from '../../../../types'; +import { AgentExecutor } from '../../executors/types'; +import { openAIFunctionAgentPrompt, structuredChatAgentPrompt } from './prompts'; +import { APMTracer } from '../../tracers/apm_tracer'; +import { getDefaultAssistantGraph } from './graph'; +import { invokeGraph, streamGraph } from './helpers'; + +/** + * Drop in replacement for the existing `callAgentExecutor` that uses LangGraph + */ +export const callAssistantGraph: AgentExecutor = async ({ + abortSignal, + actions, + alertsIndexPattern, + anonymizationFields, + isEnabledKnowledgeBase, + assistantTools = [], + connectorId, + conversationId, + dataClients, + esClient, + esStore, + langChainMessages, + llmType, + logger: parentLogger, + isStream = false, + onLlmResponse, + onNewReplacements, + replacements, + request, + size, + traceOptions, +}) => { + const logger = parentLogger.get('defaultAssistantGraph'); + const isOpenAI = llmType === 'openai'; + const llmClass = isOpenAI ? ActionsClientChatOpenAI : ActionsClientSimpleChatModel; + + const llm = new llmClass({ + actions, + connectorId, + request, + llmType, + logger, + // possible client model override, + // let this be undefined otherwise so the connector handles the model + model: request.body.model, + // ensure this is defined because we default to it in the language_models + // This is where the LangSmith logs (Metadata > Invocation Params) are set + temperature: getDefaultArguments(llmType).temperature, + signal: abortSignal, + streaming: isStream, + // prevents the agent from retrying on failure + // failure could be due to bad connector, we should deliver that result to the client asap + maxRetries: 0, + }); + const model = llm; + + const messages = langChainMessages.slice(0, -1); // all but the last message + const latestMessage = langChainMessages.slice(-1); // the last message + + const modelExists = await esStore.isModelInstalled(); + + // Create a chain that uses the ELSER backed ElasticsearchStore, override k=10 for esql query generation for now + const chain = RetrievalQAChain.fromLLM(model, esStore.asRetriever(10)); + + // Fetch any applicable tools that the source plugin may have registered + const assistantToolParams: AssistantToolParams = { + alertsIndexPattern, + anonymizationFields, + chain, + esClient, + isEnabledKnowledgeBase, + kbDataClient: dataClients?.kbDataClient, + llm: model, + logger, + modelExists, + onNewReplacements, + replacements, + request, + size, + }; + + const tools: StructuredTool[] = assistantTools.flatMap( + (tool) => tool.getTool(assistantToolParams) ?? [] + ); + + const agentRunnable = isOpenAI + ? await createOpenAIFunctionsAgent({ + llm, + tools, + prompt: openAIFunctionAgentPrompt, + streamRunnable: isStream, + }) + : await createStructuredChatAgent({ + llm, + tools, + prompt: structuredChatAgentPrompt, + streamRunnable: isStream, + }); + + const apmTracer = new APMTracer({ projectName: traceOptions?.projectName ?? 'default' }, logger); + + const assistantGraph = getDefaultAssistantGraph({ + agentRunnable, + conversationId, + dataClients, + llm, + logger, + messages, + tools, + }); + const inputs = { input: latestMessage[0].content as string }; + + if (isStream) { + return streamGraph({ apmTracer, assistantGraph, inputs, logger, onLlmResponse, request }); + } + + const graphResponse = await invokeGraph({ + apmTracer, + assistantGraph, + inputs, + onLlmResponse, + traceOptions, + }); + + return { + body: { + connector_id: connectorId, + data: graphResponse.output, + trace_data: graphResponse.traceData, + replacements, + status: 'ok', + }, + headers: { + 'content-type': 'application/json', + }, + }; +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/execute_tools.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/execute_tools.ts new file mode 100644 index 0000000000000..b42455e14f6f1 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/execute_tools.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { RunnableConfig } from '@langchain/core/runnables'; +import { StructuredTool } from '@langchain/core/tools'; +import { ToolExecutor } from '@langchain/langgraph/prebuilt'; +import { AgentState, NodeParamsBase } from '../types'; + +export interface ExecuteToolsParams extends NodeParamsBase { + state: AgentState; + config?: RunnableConfig; + tools: StructuredTool[]; +} + +export const TOOLS_NODE = 'tools'; + +/** + * Node to execute tools + * + * Note: Could maybe leverage `ToolNode` if tool selection state is pushed to `messages[]`. + * See: https://github.com/langchain-ai/langgraphjs/blob/0ef76d603b55c00a04f5793d1e6ab15af7c756cb/langgraph/src/prebuilt/tool_node.ts + * + * @param config - Any configuration that may've been supplied + * @param logger - The scoped logger + * @param state - The current state of the graph + * @param tools - The tools available to execute + */ +export const executeTools = async ({ config, logger, state, tools }: ExecuteToolsParams) => { + logger.debug(`Node state:\n${JSON.stringify(state, null, 2)}`); + + const toolExecutor = new ToolExecutor({ tools }); + const agentAction = state.agentOutcome; + + if (!agentAction || 'returnValues' in agentAction) { + throw new Error('Agent has not been run yet'); + } + const out = await toolExecutor.invoke(agentAction, config); + return { + steps: [{ action: agentAction, observation: JSON.stringify(out, null, 2) }], + }; +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/generate_chat_title.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/generate_chat_title.ts new file mode 100644 index 0000000000000..bcba25eab0b0d --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/generate_chat_title.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { StringOutputParser } from '@langchain/core/output_parsers'; + +import { ChatPromptTemplate } from '@langchain/core/prompts'; +import { AgentState, NodeParamsBase } from '../types'; +import { AIAssistantConversationsDataClient } from '../../../../../ai_assistant_data_clients/conversations'; + +export const GENERATE_CHAT_TITLE_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful assistant for Elastic Security. Assume the following user message is the start of a conversation between you and a user; give this conversation a title based on the content below. DO NOT UNDER ANY CIRCUMSTANCES wrap this title in single or double quotes. This title is shown in a list of conversations to the user, so title it for the user, not for you. As an example, for the given MESSAGE, this is the TITLE: + + MESSAGE: I am having trouble with the Elastic Security app. + TITLE: Troubleshooting Elastic Security app issues + `, + ], + ['human', '{input}'], +]); + +export interface GenerateChatTitleParams extends NodeParamsBase { + conversationsDataClient?: AIAssistantConversationsDataClient; + conversationId?: string; + state: AgentState; +} + +export const GENERATE_CHAT_TITLE_NODE = 'generateChatTitle'; + +export const generateChatTitle = async ({ + conversationsDataClient, + logger, + model, + state, +}: GenerateChatTitleParams) => { + logger.debug(`Node state:\n ${JSON.stringify(state, null, 2)}`); + if (state.messages.length !== 0) { + logger.debug('No need to generate chat title, messages already exist'); + return; + } + const outputParser = new StringOutputParser(); + const graph = GENERATE_CHAT_TITLE_PROMPT.pipe(model).pipe(outputParser); + + const chatTitle = await graph.invoke({ + input: JSON.stringify(state.input, null, 2), + }); + + logger.debug(`chatTitle: ${chatTitle}`); + + return { + chatTitle, + }; +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts new file mode 100644 index 0000000000000..b0353bb5d8ec7 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { RunnableConfig } from '@langchain/core/runnables'; +import { AgentRunnableSequence } from 'langchain/dist/agents/agent'; +import { AgentState, NodeParamsBase } from '../types'; +import { AssistantDataClients } from '../../../executors/types'; + +export interface RunAgentParams extends NodeParamsBase { + agentRunnable: AgentRunnableSequence; + dataClients?: AssistantDataClients; + state: AgentState; + config?: RunnableConfig; +} + +export const AGENT_NODE = 'agent'; + +const NO_HISTORY = '[No existing knowledge history]'; +/** + * Node to run the agent + * + * @param agentRunnable - The agent to run + * @param config - Any configuration that may've been supplied + * @param logger - The scoped logger + * @param dataClients - Data clients available for use + * @param state - The current state of the graph + */ +export const runAgent = async ({ + agentRunnable, + config, + dataClients, + logger, + state, +}: RunAgentParams) => { + logger.debug(`Node state:\n${JSON.stringify(state, null, 2)}`); + + const knowledgeHistory = await dataClients?.kbDataClient?.getKnowledgeBaseDocuments({ + kbResource: 'user', + required: true, + query: '', + }); + + const agentOutcome = await agentRunnable.invoke( + { + ...state, + chat_history: state.messages, // TODO: Message de-dupe with ...state spread + knowledge_history: knowledgeHistory?.length ? knowledgeHistory : NO_HISTORY, + }, + config + ); + return { + agentOutcome, + }; +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/should_continue.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/should_continue.ts new file mode 100644 index 0000000000000..281963df363a8 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/should_continue.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AgentState, NodeParamsBase } from '../types'; + +export interface ShouldContinueParams extends NodeParamsBase { + state: AgentState; +} + +/** + * Node to determine which conditional edge to choose. Essentially the 'router' node. + * + * @param logger - The scoped logger + * @param state - The current state of the graph + */ +export const shouldContinue = ({ logger, state }: ShouldContinueParams) => { + logger.debug(`Node state:\n${JSON.stringify(state, null, 2)}`); + + if (state.agentOutcome && 'returnValues' in state.agentOutcome) { + return 'end'; + } + + return 'continue'; +}; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts new file mode 100644 index 0000000000000..7d8a78f7387ec --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ChatPromptTemplate } from '@langchain/core/prompts'; + +export const openAIFunctionAgentPrompt = ChatPromptTemplate.fromMessages([ + [ + 'system', + 'You are a helpful assistant\n\nUse the below context as a sample of information about the user from their knowledge base:\n\n```{knowledge_history}```', + ], + ['placeholder', '{chat_history}'], + ['human', '{input}'], + ['placeholder', '{agent_scratchpad}'], +]); + +export const structuredChatAgentPrompt = ChatPromptTemplate.fromMessages([ + [ + 'system', + 'Respond to the human as helpfully and accurately as possible. You have access to the following tools:\n\n' + + '{tools}\n\n' + + 'Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).\n\n' + + 'Valid "action" values: "Final Answer" or {tool_names}\n\n' + + 'Provide only ONE action per $JSON_BLOB, as shown:\n\n' + + '```\n\n' + + '{{\n\n' + + ' "action": $TOOL_NAME,\n\n' + + ' "action_input": $INPUT\n\n' + + '}}\n\n' + + '```\n\n' + + 'Follow this format:\n\n' + + 'Question: input question to answer\n\n' + + 'Thought: consider previous and subsequent steps\n\n' + + 'Action:\n\n' + + '```\n\n' + + '$JSON_BLOB\n\n' + + '```\n\n' + + 'Observation: action result\n\n' + + '... (repeat Thought/Action/Observation N times)\n\n' + + 'Thought: I know what to respond\n\n' + + 'Action:\n\n' + + '```\n\n' + + '{{\n\n' + + ' "action": "Final Answer",\n\n' + + ' "action_input": "Final response to human"\n\n' + + '}}\n\n' + + 'Begin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation', + ], + ['placeholder', '{chat_history}'], + [ + 'human', + 'Use the below context as a sample of information about the user from their knowledge base:\n\n```\n{knowledge_history}\n```\n\n{input}\n\n{agent_scratchpad}\n(reminder to respond in a JSON blob no matter what)', + ], +]); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts new file mode 100644 index 0000000000000..1d19646fb6eb3 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { BaseMessage } from '@langchain/core/messages'; +import { AgentAction, AgentFinish, AgentStep } from '@langchain/core/agents'; +import { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import type { Logger } from '@kbn/logging'; + +export interface AgentStateBase { + agentOutcome?: AgentAction | AgentFinish; + steps: AgentStep[]; +} + +export interface AgentState extends AgentStateBase { + input: string; + messages: BaseMessage[]; +} + +export interface NodeParamsBase { + logger: Logger; + model: BaseChatModel; +} diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/tracers/apm_tracer.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/tracers/apm_tracer.ts index e5f91a379ed3d..ba4baef0433ad 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/tracers/apm_tracer.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/tracers/apm_tracer.ts @@ -38,7 +38,7 @@ export class APMTracer extends BaseTracer implements LangChainTracerFields { this.projectName = projectName ?? 'default'; this.exampleId = exampleId; - this.logger = logger; + this.logger = logger.get('apmTracer'); } protected async persistRun(_run: Run): Promise {} diff --git a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts index 65a3c96b27a0c..4f916be8105d4 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts @@ -6,6 +6,7 @@ */ import { KibanaRequest } from '@kbn/core/server'; +import { Logger } from '@kbn/logging'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { AttackDiscoveryPostRequestBody, @@ -40,6 +41,7 @@ export const getAssistantToolParams = ({ langChainTimeout, latestReplacements, llm, + logger, onNewReplacements, request, size, @@ -50,6 +52,7 @@ export const getAssistantToolParams = ({ langChainTimeout: number; latestReplacements: Replacements; llm: ActionsClientLlm; + logger: Logger; onNewReplacements: (newReplacements: Replacements) => void; request: KibanaRequest< unknown, @@ -65,6 +68,7 @@ export const getAssistantToolParams = ({ esClient, langChainTimeout, llm, + logger, modelExists: false, // not required for attack discovery onNewReplacements, replacements: latestReplacements, diff --git a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts index 5d9240dd1d97d..7859d635ccb30 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts @@ -127,6 +127,7 @@ export const postAttackDiscoveryRoute = ( latestReplacements, langChainTimeout: LANG_CHAIN_TIMEOUT, llm, + logger, onNewReplacements, request, size, diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index e170784cc7626..197479fc24dd5 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -21,7 +21,11 @@ import { import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/schemas/common'; import { i18n } from '@kbn/i18n'; import { getLlmType } from './utils'; -import { StaticReturnType } from '../lib/langchain/executors/types'; +import { + AgentExecutorParams, + AssistantDataClients, + StaticReturnType, +} from '../lib/langchain/executors/types'; import { INVOKE_ASSISTANT_ERROR_EVENT, INVOKE_ASSISTANT_SUCCESS_EVENT, @@ -42,6 +46,7 @@ import { getLangSmithTracer } from './evaluate/utils'; import { EsAnonymizationFieldsSchema } from '../ai_assistant_data_clients/anonymization_fields/types'; import { transformESSearchToAnonymizationFields } from '../ai_assistant_data_clients/anonymization_fields/helpers'; import { ElasticsearchStore } from '../lib/langchain/elasticsearch_store/elasticsearch_store'; +import { callAssistantGraph } from '../lib/langchain/graphs/default_assistant_graph'; export const postActionsConnectorExecuteRoute = ( router: IRouter, @@ -325,7 +330,7 @@ export const postActionsConnectorExecuteRoute = ( }); // Create an ElasticsearchStore for KB interactions - // Setup with kbDataClient if `enableKnowledgeBaseByDefault` FF is enabled + // Setup with kbDataClient if `assistantKnowledgeBaseByDefault` FF is enabled const enableKnowledgeBaseByDefault = assistantContext.getRegisteredFeatures(pluginName).assistantKnowledgeBaseByDefault; const kbDataClient = enableKnowledgeBaseByDefault @@ -345,7 +350,14 @@ export const postActionsConnectorExecuteRoute = ( kbDataClient ); - const result: StreamResponseWithHeaders | StaticReturnType = await callAgentExecutor({ + const dataClients: AssistantDataClients = { + anonymizationFieldsDataClient: anonymizationFieldsDataClient ?? undefined, + conversationsDataClient: conversationsDataClient ?? undefined, + kbDataClient, + }; + + // Shared executor params + const executorParams: AgentExecutorParams = { abortSignal, alertsIndexPattern: request.body.alertsIndexPattern, anonymizationFields: anonymizationFieldsRes @@ -355,6 +367,8 @@ export const postActionsConnectorExecuteRoute = ( isEnabledKnowledgeBase: request.body.isEnabledKnowledgeBase ?? false, assistantTools, connectorId, + conversationId, + dataClients, esClient, esStore, isStream: request.body.subAction !== 'invokeAI', @@ -364,6 +378,7 @@ export const postActionsConnectorExecuteRoute = ( onNewReplacements, onLlmResponse, request, + response, replacements: request.body.replacements, size: request.body.size, traceOptions: { @@ -374,7 +389,15 @@ export const postActionsConnectorExecuteRoute = ( logger, }), }, - }); + }; + + // New code path for LangGraph implementation, behind `assistantKnowledgeBaseByDefault` FF + let result: StreamResponseWithHeaders | StaticReturnType; + if (enableKnowledgeBaseByDefault) { + result = await callAssistantGraph(executorParams); + } else { + result = await callAgentExecutor(executorParams); + } telemetry.reportEvent(INVOKE_ASSISTANT_SUCCESS_EVENT.eventType, { actionTypeId, diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 3a392eaa8c256..f12bacde983df 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -212,8 +212,10 @@ export interface AssistantToolParams { isEnabledKnowledgeBase: boolean; chain?: RetrievalQAChain; esClient: ElasticsearchClient; + kbDataClient?: AIAssistantKnowledgeBaseDataClient; langChainTimeout?: number; llm?: ActionsClientLlm | ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + logger: Logger; modelExists: boolean; onNewReplacements?: (newReplacements: Replacements) => void; replacements?: Replacements; diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index 4295b1527d000..cf3ee35fca6df 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -34,14 +34,16 @@ "schema": { "type": "object", "properties": { - "name": { - "type": "string" - }, "status": { "type": "string" }, + "id": { + "type": "string", + "description": "Fleet Server host id" + }, "host": { - "type": "string" + "type": "string", + "deprecated": true } } } @@ -65,10 +67,17 @@ "schema": { "type": "object", "properties": { - "host": { + "id": { "type": "string" + }, + "host": { + "type": "string", + "deprecated": true } - } + }, + "required": [ + "id" + ] } } } diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index 4c50edd31a7b4..ad592b9ea1847 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -26,12 +26,14 @@ paths: schema: type: object properties: - name: - type: string status: type: string + id: + type: string + description: Fleet Server host id host: type: string + deprecated: true '400': $ref: '#/components/responses/error' operationId: fleet-server-health-check @@ -44,8 +46,13 @@ paths: schema: type: object properties: + id: + type: string host: type: string + deprecated: true + required: + - id /setup: post: summary: Initiate Fleet setup diff --git a/x-pack/plugins/fleet/common/openapi/paths/health_check.yaml b/x-pack/plugins/fleet/common/openapi/paths/health_check.yaml index ae87da3ff0e52..9428e53a46f28 100644 --- a/x-pack/plugins/fleet/common/openapi/paths/health_check.yaml +++ b/x-pack/plugins/fleet/common/openapi/paths/health_check.yaml @@ -10,12 +10,14 @@ post: schema: type: object properties: - name: - type: string status: type: string + id: + type: string + description: Fleet Server host id host: type: string + deprecated: true '400': $ref: ../components/responses/error.yaml operationId: fleet-server-health-check @@ -28,5 +30,10 @@ post: schema: type: object properties: + id: + type: string host: type: string + deprecated: true + required: + - id diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index 89b533c47341f..2add5750f1855 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -108,6 +108,7 @@ interface AgentBase { components?: FleetServerAgentComponent[]; agent?: FleetServerAgentMetadata; unhealthy_reason?: UnhealthyReason[]; + namespaces?: string[]; } export enum UnhealthyReason { @@ -348,6 +349,11 @@ export interface FleetServerAgent { * Unhealthy reason: input, output, other */ unhealthy_reason?: UnhealthyReason[]; + + /** + * Namespaces + */ + namespaces?: string[]; } /** diff --git a/x-pack/plugins/fleet/common/types/models/enrollment_api_key.ts b/x-pack/plugins/fleet/common/types/models/enrollment_api_key.ts index 4398675831b45..1dc220b86059d 100644 --- a/x-pack/plugins/fleet/common/types/models/enrollment_api_key.ts +++ b/x-pack/plugins/fleet/common/types/models/enrollment_api_key.ts @@ -42,4 +42,5 @@ export interface FleetServerEnrollmentAPIKey { expire_at?: string; created_at?: string; updated_at?: string; + namespaces?: string[]; } diff --git a/x-pack/plugins/fleet/common/types/rest_spec/health_check.ts b/x-pack/plugins/fleet/common/types/rest_spec/health_check.ts index c718081344236..4b25d958d21ad 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/health_check.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/health_check.ts @@ -7,12 +7,15 @@ export interface PostHealthCheckRequest { body: { - host: string; + id: string; + /** @deprecated use id field instead */ + host?: string; }; } export interface PostHealthCheckResponse { - name: string; - host: string; + host_id: string; + // deprecated + host?: string; status: string; } diff --git a/x-pack/plugins/fleet/dev_docs/react_query.md b/x-pack/plugins/fleet/dev_docs/react_query.md index 55eca8669c1ec..1ae8fbadcf448 100644 --- a/x-pack/plugins/fleet/dev_docs/react_query.md +++ b/x-pack/plugins/fleet/dev_docs/react_query.md @@ -155,21 +155,18 @@ There's a bit of setup involved to actually get `react-query` up and running. Fi ```tsx //... - - - - - - - - - {children} - - - - - - + + + + + + + {children} + + + + + ``` We also set up `react-query`'s [dev tools](https://tanstack.com/query/v4/docs/react/devtools), which provide a useful developer console for debugging query and mutation state across the whole application. diff --git a/x-pack/plugins/fleet/public/applications/fleet/app.tsx b/x-pack/plugins/fleet/public/applications/fleet/app.tsx index faaf08adf4dbb..5d3dee34339cc 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/app.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/app.tsx @@ -18,9 +18,7 @@ import useObservable from 'react-use/lib/useObservable'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { css } from '@emotion/css'; - import type { TopNavMenuData } from '@kbn/navigation-plugin/public'; - import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; @@ -186,11 +184,20 @@ export const FleetAppContext: React.FC<{ routerHistory: _routerHistory, fleetStatus, }) => { + const XXL_BREAKPOINT = 1600; const darkModeObservable = useObservable(startServices.theme.theme$); const isDarkMode = darkModeObservable && darkModeObservable.darkMode; return ( - + + {/* This should be removed since theme is passed to `KibanaRenderContextProvider`, + however, removing this breaks usages of `props.theme.eui` in styled components */} diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/index.tsx index 511f5d05154fc..b46d4f2060669 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/fleet_server_instructions/index.tsx @@ -23,6 +23,7 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import styled from 'styled-components'; +import { MAX_FLYOUT_WIDTH } from '../../constants'; import { useStartServices, useFlyoutContext, useCheckPermissions } from '../../hooks'; import { FleetServerMissingESPrivileges } from '../../sections/agents/components'; @@ -133,7 +134,7 @@ export const FleetServerFlyout: React.FunctionComponent = ({ onClose }) = } return ( - +
"All", roleName2: "Read", diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/custom_fields/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/custom_fields/index.tsx index 4271c1f30c89f..a10c6c3d2fb8e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/custom_fields/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/custom_fields/index.tsx @@ -57,6 +57,7 @@ export const CustomFields: React.FunctionComponent = ({ return ( = const AgentTamperProtectionSectionContent = useMemo( () => ( = return ( <> = = = {AgentTamperProtectionSection} = = = = = = = ({ const generalSettingsWrapper = (children: JSX.Element[]) => ( +

-

+ } description={ = ({ return ( voi `?apiVersion=${API_VERSIONS.public.v1}`; return ( - +

diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx index fd4a3a752eacd..247f908668eab 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx @@ -14,6 +14,7 @@ import { EuiText, EuiSpacer, EuiButtonEmpty, + useIsWithinMinBreakpoint, } from '@elastic/eui'; import type { NewPackagePolicyInput, RegistryVarsEntry } from '../../../../../../types'; @@ -68,12 +69,15 @@ export const PackagePolicyInputConfig: React.FunctionComponent<{ [advancedVars, inputVarsValidationResults.vars] ); + const isBiggerScreen = useIsWithinMinBreakpoint('xxl'); + const flexWidth = isBiggerScreen ? 7 : 5; + return ( - +

( showPipelinesAndMappings, ]); + const isBiggerScreen = useIsWithinMinBreakpoint('xxl'); + const flexWidth = isBiggerScreen ? 7 : 5; + return ( <> @@ -170,7 +174,7 @@ export const PackagePolicyInputStreamConfig = memo( - + )} @@ -149,6 +152,7 @@ export const StepDefinePackagePolicy: React.FunctionComponent<{ {/* Description */} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_select_agent_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_select_agent_policy.tsx index 262efea5e32fb..6156e81a133d7 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_select_agent_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_select_agent_policy.tsx @@ -369,7 +369,7 @@ export const StepSelectAgentPolicy: React.FunctionComponent<{ } > diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/bottom_bar.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/bottom_bar.tsx index 4ed07b65448f2..90d25a35be875 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/bottom_bar.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/bottom_bar.tsx @@ -16,7 +16,7 @@ import { FLEET_KUBERNETES_PACKAGE } from '../../../../../../../../common'; const CenteredRoundedBottomBar = styled(EuiBottomBar)` max-width: 820px; - margin: 0 auto; + margin: 0 auto !important; /* !important is needed for serverless */ border-radius: 8px 8px 0px 0px; `; const NoAnimationCenteredRoundedBottomBar = styled(CenteredRoundedBottomBar)` @@ -50,7 +50,7 @@ export const CreatePackagePolicyBottomBar: React.FC<{ }) => { const Bar = noAnimation ? NoAnimationCenteredRoundedBottomBar : CenteredRoundedBottomBar; return ( - + diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx index 21d08d71eb5f7..445a0bcf94287 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/components/layout.tsx @@ -17,6 +17,7 @@ import { EuiDescriptionListDescription, EuiButtonEmpty, EuiSpacer, + useIsWithinMinBreakpoint, } from '@elastic/eui'; import { useAgentless } from '../hooks/setup_technology'; @@ -251,7 +252,8 @@ export const CreatePackagePolicySinglePageLayout: React.FunctionComponent<{ ) : undefined; - const maxWidth = 770; + const isBiggerScreen = useIsWithinMinBreakpoint('xxl'); + const maxWidth = isBiggerScreen ? 1200 : 800; return ( + pliAuthBlockView?.Component && !isPackageInfoLoading + ? pliAuthBlockView.Component + : ({ children }) => <>{children}, // when no UI Extension is registered, render children + [isPackageInfoLoading, pliAuthBlockView?.Component] + ); + if (replaceDefineStepView && extensionView) { throw new Error( "'package-policy-create' and 'package-policy-replace-define-step' cannot both be registered as UI extensions" @@ -455,172 +469,182 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ return ( - - {formState === 'CONFIRM' && agentPolicies.length > 0 && ( - setFormState('VALID')} - showUnprivilegedAgentsCallout={Boolean( - packageInfo && isRootPrivilegesRequired(packageInfo) && unprivilegedAgentsCount > 0 + }> + + + {formState === 'CONFIRM' && agentPolicies.length > 0 && ( + setFormState('VALID')} + showUnprivilegedAgentsCallout={Boolean( + packageInfo && + isRootPrivilegesRequired(packageInfo) && + unprivilegedAgentsCount > 0 + )} + unprivilegedAgentsCount={unprivilegedAgentsCount} + dataStreams={rootPrivilegedDataStreams} + /> )} - unprivilegedAgentsCount={unprivilegedAgentsCount} - dataStreams={rootPrivilegedDataStreams} - /> - )} - {formState === 'SUBMITTED_NO_AGENTS' && - agentPolicies.length > 0 && - packageInfo && - savedPackagePolicy && ( - navigateAddAgent(savedPackagePolicy)} - onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} - /> - )} - {formState === 'SUBMITTED_AZURE_ARM_TEMPLATE' && - agentPolicies.length > 0 && - savedPackagePolicy && ( - navigateAddAgent(savedPackagePolicy)} - onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} - /> - )} - {formState === 'SUBMITTED_CLOUD_FORMATION' && - agentPolicies.length > 0 && - savedPackagePolicy && ( - navigateAddAgent(savedPackagePolicy)} - onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} - /> - )} - {formState === 'SUBMITTED_GOOGLE_CLOUD_SHELL' && - agentPolicies.length > 0 && - savedPackagePolicy && ( - navigateAddAgent(savedPackagePolicy)} - onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} - /> - )} - {packageInfo && ( - - )} - {packageInfo && isRootPrivilegesRequired(packageInfo) ? ( - <> - - - - ) : null} - {numTransformAssets > 0 ? ( - <> - - - - ) : null} - {showSecretsDisabledCallout && ( - <> - 0 && + packageInfo && + savedPackagePolicy && ( + navigateAddAgent(savedPackagePolicy)} + onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} /> - } - > - - - - ), - minimumSecretsVersion: {SECRETS_MINIMUM_FLEET_SERVER_VERSION}, - }} - /> - - - - - )} - - - - - - - {packageInfo && (formState === 'INVALID' || hasAgentPolicyError) ? ( - 0 && + savedPackagePolicy && ( + navigateAddAgent(savedPackagePolicy)} + onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} /> - ) : null} - - - - - {/* eslint-disable-next-line @elastic/eui/href-or-on-click */} - + )} + {formState === 'SUBMITTED_CLOUD_FORMATION' && + agentPolicies.length > 0 && + savedPackagePolicy && ( + navigateAddAgent(savedPackagePolicy)} + onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} + /> + )} + {formState === 'SUBMITTED_GOOGLE_CLOUD_SHELL' && + agentPolicies.length > 0 && + savedPackagePolicy && ( + navigateAddAgent(savedPackagePolicy)} + onCancel={() => navigateAddAgentHelp(savedPackagePolicy)} + /> + )} + {packageInfo && ( + + )} + {packageInfo && isRootPrivilegesRequired(packageInfo) ? ( + <> + + + + ) : null} + {numTransformAssets > 0 ? ( + <> + + + + ) : null} + {showSecretsDisabledCallout && ( + <> + - - - {showDevtoolsRequest ? ( - - - - ) : null} + } + > + + + + ), + minimumSecretsVersion: ( + {SECRETS_MINIMUM_FLEET_SERVER_VERSION} + ), + }} + /> + + + + + )} + + + + + - onSubmit()} - isLoading={formState === 'LOADING'} - disabled={formState !== 'VALID' || hasAgentPolicyError || !validationResults} - iconType="save" - color="primary" - fill - data-test-subj="createPackagePolicySaveButton" - > + {packageInfo && (formState === 'INVALID' || hasAgentPolicyError) ? ( - + ) : null} + + + + + {/* eslint-disable-next-line @elastic/eui/href-or-on-click */} + + + + + {showDevtoolsRequest ? ( + + + + ) : null} + + onSubmit()} + isLoading={formState === 'LOADING'} + disabled={ + formState !== 'VALID' || hasAgentPolicyError || !validationResults + } + iconType="save" + color="primary" + fill + data-test-subj="createPackagePolicySaveButton" + > + + + + - - - - + + + + ); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx index 390309e9186dc..1cacdf74c21df 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx @@ -57,7 +57,7 @@ const pickAgentPolicyKeysToSend = (agentPolicy: AgentPolicy) => ]); const FormWrapper = styled.div` - max-width: 800px; + max-width: 1200px; margin-right: auto; margin-left: auto; `; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/components/upgrade.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/components/upgrade.tsx index f81fb532f6bf7..15b2b3c6af8e9 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/components/upgrade.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/components/upgrade.tsx @@ -36,6 +36,7 @@ import type { import type { UpgradePackagePolicyDryRunResponse } from '../../../../../../../common/types/rest_spec'; import { useStartServices } from '../../../../hooks'; +import { MAX_FLYOUT_WIDTH } from '../../../../constants'; const FlyoutBody = styled(EuiFlyoutBody)` .euiFlyoutBody__overflowContent { @@ -167,7 +168,10 @@ export const UpgradeStatusCallout: React.FunctionComponent<{ <> {isPreviousVersionFlyoutOpen && currentPackagePolicy && ( - setIsPreviousVersionFlyoutOpen(false)} size="l" maxWidth={640}> + setIsPreviousVersionFlyoutOpen(false)} + maxWidth={MAX_FLYOUT_WIDTH} + >

diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.tsx index 21d25ecdab2c6..0a0ed0b69ca79 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.tsx @@ -19,6 +19,7 @@ import { EuiErrorBoundary, } from '@elastic/eui'; +import { useSetIsReadOnly } from '../../../../integrations/hooks/use_read_only_context'; import { useLink, useBreadcrumbs, @@ -125,7 +126,7 @@ export const EditPackagePolicyForm = memo<{ }); const canWriteIntegrationPolicies = useAuthz().integrations.writeIntegrationPolicies; - + useSetIsReadOnly(canWriteIntegrationPolicies); const newSecrets = useMemo(() => { if (!packageInfo) { return []; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/components/create_agent_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/components/create_agent_policy.tsx index 1c953620519d5..39b30b601714e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/components/create_agent_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/components/create_agent_policy.tsx @@ -25,6 +25,7 @@ import { } from '@elastic/eui'; import type { NewAgentPolicy, AgentPolicy } from '../../../../types'; +import { MAX_FLYOUT_WIDTH } from '../../../../constants'; import { useAuthz, useStartServices, sendCreateAgentPolicy } from '../../../../hooks'; import { AgentPolicyForm, agentPolicyFormValidation } from '../../components'; import { DevtoolsRequestFlyoutButton } from '../../../../components'; @@ -191,7 +192,7 @@ export const CreateAgentPolicyFlyout: React.FunctionComponent = ({ ); return ( - onClose()} size="l" maxWidth={400} {...restOfProps}> + onClose()} {...restOfProps} maxWidth={MAX_FLYOUT_WIDTH}> {header} {body} {footer} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details_json_flyout.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details_json_flyout.tsx index f1b5e628b5315..72dec15f970be 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details_json_flyout.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details_json_flyout.tsx @@ -25,6 +25,7 @@ import { import type { Agent } from '../../../../types'; import { useStartServices } from '../../../../hooks'; +import { MAX_FLYOUT_WIDTH } from '../../../../constants'; export const AgentDetailsJsonFlyout = memo<{ agent: Agent; onClose: () => void }>( ({ agent, onClose }) => { @@ -44,7 +45,7 @@ export const AgentDetailsJsonFlyout = memo<{ agent: Agent; onClose: () => void } const { docLinks } = useStartServices(); return ( - +

diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx index ed9a211db012e..e9bfbbef49d91 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx @@ -28,7 +28,7 @@ import { useStartServices, sendPostRetrieveAgentsByActions, } from '../../../../../hooks'; -import { SO_SEARCH_LIMIT } from '../../../../../constants'; +import { SO_SEARCH_LIMIT, MAX_FLYOUT_WIDTH } from '../../../../../constants'; import { getKuery } from '../../utils/get_kuery'; @@ -129,8 +129,8 @@ export const AgentActivityFlyout: React.FunctionComponent<{ refreshAgentActivity = false; onClose(); }} - size="m" paddingSize="none" + maxWidth={MAX_FLYOUT_WIDTH} > diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/health_check_panel.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/health_check_panel.tsx index 5edd18716371c..b60734769542a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/health_check_panel.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/health_check_panel.tsx @@ -20,7 +20,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { useQuery } from '@tanstack/react-query'; import { sendPostHealthCheck, useGetFleetServerHosts } from '../../../hooks'; -import type { FleetServerHost } from '../../../types'; +import type { FleetServerHost, PostHealthCheckResponse } from '../../../types'; const POLLING_INTERVAL_S = 10; // 10 sec const POLLING_INTERVAL_MS = POLLING_INTERVAL_S * 1000; @@ -40,20 +40,21 @@ export const HealthCheckPanel: React.FunctionComponent = () => { } }, [fleetServerHosts]); - const hostName = useMemo( - () => selectedFleetServerHost?.host_urls[0] || '', - [selectedFleetServerHost?.host_urls] - ); + const id = useMemo(() => selectedFleetServerHost?.id || '', [selectedFleetServerHost?.id]); - const [healthData, setHealthData] = useState(); + const [healthData, setHealthData] = useState(); + const [error, setError] = useState(); const { data: healthCheckResponse } = useQuery( - ['fleetServerHealth', hostName], - () => sendPostHealthCheck({ host: hostName }), - { refetchInterval: POLLING_INTERVAL_MS } + ['fleetServerHealth', id], + () => sendPostHealthCheck({ id }), + { refetchInterval: POLLING_INTERVAL_MS, enabled: !!id } ); useEffect(() => { - setHealthData(healthCheckResponse); + setHealthData(healthCheckResponse?.data); + if (healthCheckResponse?.error) { + setError(healthCheckResponse.error); + } }, [healthCheckResponse]); const fleetServerHostsOptions = useMemo( @@ -133,7 +134,7 @@ export const HealthCheckPanel: React.FunctionComponent = () => { /> - {healthData?.data?.status && hostName === healthData?.data?.host ? ( + {healthData?.status && id === healthData?.host_id ? ( { defaultMessage="Status:" /> - {healthStatus(healthData?.data?.status)} + {healthStatus(healthData?.status)} ) : null} - {healthData?.error && ( + {error && ( <> - {healthData?.error?.message ?? ( + {error?.message ?? ( )} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx index b6c2ef272d813..8249fd6fc82f3 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/index.tsx @@ -28,7 +28,7 @@ import { import { i18n } from '@kbn/i18n'; import type { DownloadSource, FleetProxy } from '../../../../types'; -import { FLYOUT_MAX_WIDTH } from '../../constants'; +import { MAX_FLYOUT_WIDTH } from '../../../../constants'; import { useBreadcrumbs, useStartServices } from '../../../../hooks'; import { ProxyWarning } from '../fleet_proxies_table/proxy_warning'; @@ -54,7 +54,7 @@ export const EditDownloadSourceFlyout: React.FunctionComponent +

diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/index.tsx index 864112d2c71ec..664519c441bd6 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/index.tsx @@ -22,8 +22,8 @@ import { EuiSpacer, } from '@elastic/eui'; -import { FLYOUT_MAX_WIDTH } from '../../constants'; import type { FleetProxy } from '../../../../types'; +import { MAX_FLYOUT_WIDTH } from '../../../../constants'; import { TextInput, TextAreaInput } from '../form'; import { ProxyWarning } from '../fleet_proxies_table/proxy_warning'; @@ -43,7 +43,7 @@ export const FleetProxyFlyout: React.FunctionComponent = const { inputs } = form; return ( - +

diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx index 74e14248f553a..4133752733269 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx @@ -45,8 +45,9 @@ import { ExperimentalFeaturesService } from '../../../../../../services'; import { outputType, RESERVED_CONFIG_YML_KEYS } from '../../../../../../../common/constants'; +import { MAX_FLYOUT_WIDTH } from '../../../../constants'; + import type { Output, FleetProxy } from '../../../../types'; -import { FLYOUT_MAX_WIDTH } from '../../constants'; import { useBreadcrumbs, useFleetStatus, useStartServices } from '../../../../hooks'; @@ -230,7 +231,7 @@ export const EditOutputFlyout: React.FunctionComponent = }; return ( - +

@@ -437,6 +438,7 @@ export const EditOutputFlyout: React.FunctionComponent = } > inputs.presetInput.setValue(e.target.value)} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx index bb018b9366483..12b5bceb9fc3e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx @@ -29,8 +29,8 @@ import { } from '@elastic/eui'; import { MultiRowInput } from '../multi_row_input'; +import { MAX_FLYOUT_WIDTH } from '../../../../constants'; import { useStartServices } from '../../../../hooks'; -import { FLYOUT_MAX_WIDTH } from '../../constants'; import type { FleetServerHost, FleetProxy } from '../../../../types'; import { TextInput } from '../form'; import { ProxyWarning } from '../fleet_proxies_table/proxy_warning'; @@ -61,7 +61,7 @@ export const FleetServerHostsFlyout: React.FunctionComponent + <> diff --git a/x-pack/plugins/fleet/public/applications/integrations/app.tsx b/x-pack/plugins/fleet/public/applications/integrations/app.tsx index fdd924799255c..21e2ba249b694 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/app.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/app.tsx @@ -11,14 +11,13 @@ import { EuiPortal } from '@elastic/eui'; import type { History } from 'history'; import { Redirect } from 'react-router-dom'; import { Router, Routes, Route } from '@kbn/shared-ux-router'; -import useObservable from 'react-use/lib/useObservable'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; - +import useObservable from 'react-use/lib/useObservable'; +import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; -import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import type { FleetConfigType, FleetStartServices } from '../../plugin'; @@ -41,6 +40,7 @@ import { EPMApp } from './sections/epm'; import { PackageInstallProvider, UIExtensionsContext, FlyoutContextProvider } from './hooks'; import { IntegrationsHeader } from './components/header'; import { AgentEnrollmentFlyout } from './components'; +import { ReadOnlyContextProvider } from './hooks/use_read_only_context'; const queryClient = new QueryClient(); @@ -73,13 +73,22 @@ export const IntegrationsAppContext: React.FC<{ setHeaderActionMenu, fleetStatus, }) => { - const theme = useObservable(startServices.theme.theme$); - const isDarkMode = theme && theme.darkMode; + const XXL_BREAKPOINT = 1600; + const darkModeObservable = useObservable(startServices.theme.theme$); + const isDarkMode = darkModeObservable && darkModeObservable.darkMode; const CloudContext = startServices.cloud?.CloudContextProvider || EmptyContext; return ( - + + {/* This should be removed since theme is passed to `KibanaRenderContextProvider`, + however, removing this breaks usages of `props.theme.eui` in styled components */} @@ -96,16 +107,18 @@ export const IntegrationsAppContext: React.FC<{ - - - - - {children} - - - + + + + + + {children} + + + + diff --git a/x-pack/plugins/fleet/public/applications/integrations/components/header/header.tsx b/x-pack/plugins/fleet/public/applications/integrations/components/header/header.tsx index 6ca3dc473e10c..30fc0f0d4965f 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/components/header/header.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/components/header/header.tsx @@ -6,11 +6,20 @@ */ import React from 'react'; -import { EuiHeaderSectionItem, EuiHeaderSection, EuiHeaderLinks } from '@elastic/eui'; - +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiHeaderSectionItem, + EuiHeaderSection, + EuiHeaderLinks, + useEuiTheme, + EuiToolTip, + EuiButtonEmpty, +} from '@elastic/eui'; +import { css } from '@emotion/css'; import type { AppMountParameters } from '@kbn/core/public'; import type { FleetStartServices } from '../../../../plugin'; +import { useIsReadOnly } from '../../hooks/use_read_only_context'; import { HeaderPortal } from './header_portal'; import { DeploymentDetails } from './deployment_details'; @@ -22,6 +31,14 @@ export const IntegrationsHeader = ({ setHeaderActionMenu: AppMountParameters['setHeaderActionMenu']; startServices: Pick; }) => { + const { euiTheme } = useEuiTheme(); + const readOnlyBtnClass = React.useMemo(() => { + return css` + color: ${euiTheme.colors.text}; + `; + }, [euiTheme]); + const isReadOnly = useIsReadOnly(); + return ( @@ -30,6 +47,27 @@ export const IntegrationsHeader = ({ + {isReadOnly ? ( + + + + } + > + + + + + + + ) : null} ); diff --git a/x-pack/plugins/fleet/public/applications/integrations/hooks/use_read_only_context.tsx b/x-pack/plugins/fleet/public/applications/integrations/hooks/use_read_only_context.tsx new file mode 100644 index 0000000000000..a1cc117cea673 --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/integrations/hooks/use_read_only_context.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { createContext, useContext, useEffect, useState } from 'react'; + +const ReadOnlyContext = createContext<{ isReadOnly: boolean; setIsReadOnly: (v: boolean) => void }>( + { isReadOnly: false, setIsReadOnly: () => {} } +); + +export const ReadOnlyContextProvider: React.FC = ({ children }) => { + const [isReadOnly, setIsReadOnly] = useState(false); + return ( + + {children} + + ); +}; + +export function useIsReadOnly() { + const context = useContext(ReadOnlyContext); + return context.isReadOnly; +} + +export function useSetIsReadOnly(isReadOnly: boolean) { + const context = useContext(ReadOnlyContext); + useEffect(() => { + context.setIsReadOnly(true); + return () => context.setIsReadOnly(false); + }, [context]); +} diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/search_box.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/search_box.tsx index 9206de2d48f17..15cff2645e9e3 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/search_box.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/search_box.tsx @@ -99,7 +99,7 @@ export const SearchBox: FunctionComponent = ({ onChange={(e) => onQueryChange(e)} isClearable={true} incremental={true} - fullWidth={true} + fullWidth prepend={ selectedCategoryTitle ? ( - + {fetchError && ( <> = ({ packageInfo }) => { return ( - + {isLoading && !configs ? ( ) : ( @@ -122,7 +117,7 @@ export const Configs: React.FC = ({ packageInfo }) => { )} - + ); }; diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/custom/custom.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/custom/custom.tsx index b59804cea1733..824ceb0d569f7 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/custom/custom.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/custom/custom.tsx @@ -25,7 +25,7 @@ export const CustomViewPage: React.FC = memo(({ packageInfo }) => { return customViewExtension ? ( - + diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/documentation/index.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/documentation/index.tsx index c44982a261147..40a87bde535b4 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/documentation/index.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/documentation/index.tsx @@ -68,52 +68,44 @@ export const DocumentationPage: React.FunctionComponent = ({ packageInfo, const { docLinks } = useStartServices(); const showDocumentation = hasDocumentation({ packageInfo, integration }); - const content = ( - <> - - - - - - - ), - }} - /> - - - - - {showDocumentation ? ( - <> - - - - ) : ( - - } - /> - )} - - - ); - return ( - {content} + + + + + + ), + }} + /> + + + {showDocumentation ? ( + <> + + + + ) : ( + + } + /> + )} + + ); }; diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx index 0e69b6fc29179..9f49db0cfb5cc 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx @@ -21,6 +21,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedRelative, FormattedMessage } from '@kbn/i18n-react'; import { policyHasFleetServer } from '../../../../../../../../common/services'; +import { ExperimentalFeaturesService } from '../../../../../services'; import { InstallStatus } from '../../../../../types'; import type { GetAgentPoliciesResponseItem, InMemoryPackagePolicy } from '../../../../../types'; @@ -35,6 +36,7 @@ import { import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../../../../constants'; import { AgentEnrollmentFlyout, + MultipleAgentPoliciesSummaryLine, AgentPolicySummaryLine, PackagePolicyActionsMenu, } from '../../../../../components'; @@ -101,6 +103,7 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps const getPackageInstallStatus = useGetPackageInstallStatus(); const packageInstallStatus = getPackageInstallStatus(name); const { pagination, pageSizeOptions, setPagination } = useUrlPagination(); + const { enableReusableIntegrationPolicies } = ExperimentalFeaturesService.get(); const { data, @@ -114,8 +117,10 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps const { isPackagePolicyUpgradable } = useIsPackagePolicyUpgradable(); const canWriteIntegrationPolicies = useAuthz().integrations.writeIntegrationPolicies; + const canReadIntegrationPolicies = useAuthz().integrations.readIntegrationPolicies; const canAddAgents = useAuthz().fleet.addAgents; const canAddFleetServers = useAuthz().fleet.addFleetServers; + const canReadAgentPolicies = useAuthz().fleet.readAgentPolicies; const packageAndAgentPolicies = useMemo((): Array<{ agentPolicies: GetAgentPoliciesResponseItem[]; @@ -167,7 +172,8 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps }, [setPagination] ); - + const canShowMultiplePoliciesCell = + enableReusableIntegrationPolicies && canReadIntegrationPolicies && canReadAgentPolicies; const columns: Array> = useMemo( () => [ { @@ -228,8 +234,11 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps truncateText: true, render(id, { agentPolicies }) { return agentPolicies.length > 0 ? ( - // TODO: handle multiple agent policies - + canShowMultiplePoliciesCell && agentPolicies.length > 1 ? ( + + ) : ( + + ) ) : ( ); @@ -313,8 +322,9 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps [ getHref, canWriteIntegrationPolicies, - canAddAgents, + canShowMultiplePoliciesCell, canAddFleetServers, + canAddAgents, showAddAgentHelpForPackagePolicyId, ] ); @@ -355,7 +365,7 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps - + = memo(({ packageInfo, startServices <> - +

diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/agent_policy_selection.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/agent_policy_selection.tsx index df8f8d23dc890..e7f951f9c4270 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/agent_policy_selection.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/agent_policy_selection.tsx @@ -96,7 +96,7 @@ export const AgentPolicySelection: React.FC = (props) => { diff --git a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/index.tsx b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/index.tsx index 9902bf4f53497..57b3a8e0e0ff5 100644 --- a/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/components/agent_enrollment_flyout/index.tsx @@ -29,7 +29,7 @@ import { useAgentEnrollmentFlyoutData, useFleetServerHostsForPolicy, } from '../../hooks'; -import { FLEET_SERVER_PACKAGE } from '../../constants'; +import { FLEET_SERVER_PACKAGE, MAX_FLYOUT_WIDTH } from '../../constants'; import type { PackagePolicy, AgentPolicy } from '../../types'; import { Loading } from '..'; @@ -106,7 +106,7 @@ export const AgentEnrollmentFlyout: React.FunctionComponent = ({ const { cloudSecurityIntegration } = useCloudSecurityIntegration(selectedPolicy ?? undefined); return ( - +

diff --git a/x-pack/plugins/fleet/public/components/link_and_revision.test.tsx b/x-pack/plugins/fleet/public/components/agent_policy_summary_line.test.tsx similarity index 95% rename from x-pack/plugins/fleet/public/components/link_and_revision.test.tsx rename to x-pack/plugins/fleet/public/components/agent_policy_summary_line.test.tsx index 46fdfe69c63bd..e398851e8892e 100644 --- a/x-pack/plugins/fleet/public/components/link_and_revision.test.tsx +++ b/x-pack/plugins/fleet/public/components/agent_policy_summary_line.test.tsx @@ -12,7 +12,7 @@ import { createFleetTestRendererMock } from '../mock'; import type { AgentPolicy, Agent } from '../types'; -import { AgentPolicySummaryLine } from './link_and_revision'; +import { AgentPolicySummaryLine } from './agent_policy_summary_line'; describe('AgentPolicySummaryLine', () => { let testRenderer: TestRenderer; diff --git a/x-pack/plugins/fleet/public/components/link_and_revision.tsx b/x-pack/plugins/fleet/public/components/agent_policy_summary_line.tsx similarity index 99% rename from x-pack/plugins/fleet/public/components/link_and_revision.tsx rename to x-pack/plugins/fleet/public/components/agent_policy_summary_line.tsx index 5d0f0070f6668..b055b51728a43 100644 --- a/x-pack/plugins/fleet/public/components/link_and_revision.tsx +++ b/x-pack/plugins/fleet/public/components/agent_policy_summary_line.tsx @@ -26,7 +26,6 @@ export const AgentPolicySummaryLine = memo<{ const { name, id, is_managed: isManaged, description } = policy; const revision = agent ? agent.policy_revision : policy.revision; - return ( diff --git a/x-pack/plugins/fleet/public/components/header.tsx b/x-pack/plugins/fleet/public/components/header.tsx index 5443477c976b7..d32a96ee26cdd 100644 --- a/x-pack/plugins/fleet/public/components/header.tsx +++ b/x-pack/plugins/fleet/public/components/header.tsx @@ -22,8 +22,12 @@ const Container = styled.div` } `; -const Wrapper = styled.div<{ maxWidth?: number }>` - max-width: ${(props) => props.maxWidth || 1200}px; +const Wrapper = styled.div<{ maxWidth?: number | string }>` + max-width: ${(props) => + typeof props.maxWidth === 'number' + ? `${props.maxWidth || 1200}px` || props.maxWidth + : props.maxWidth}; + margin-left: auto; margin-right: auto; padding-top: ${(props) => props.theme.eui.euiSizeXL}; @@ -39,7 +43,7 @@ const Tabs = styled(EuiTabs)` `; export interface HeaderProps { - maxWidth?: number; + maxWidth?: number | string; leftColumn?: JSX.Element; rightColumn?: JSX.Element; rightColumnGrow?: EuiFlexItemProps['grow']; diff --git a/x-pack/plugins/fleet/public/components/index.ts b/x-pack/plugins/fleet/public/components/index.ts index 06805679892f2..5a995ab1ecbce 100644 --- a/x-pack/plugins/fleet/public/components/index.ts +++ b/x-pack/plugins/fleet/public/components/index.ts @@ -16,12 +16,11 @@ export { Header } from './header'; export { NewEnrollmentTokenModal } from './new_enrollment_key_modal'; export { AgentPolicyPackageBadge } from './agent_policy_package_badge'; export { AgentPolicyPackageBadges } from './agent_policy_package_badges'; -export { DangerEuiContextMenuItem } from './danger_eui_context_menu_item'; export { PackagePolicyDeleteProvider } from './package_policy_delete_provider'; export { PackagePolicyActionsMenu } from './package_policy_actions_menu'; export { AddAgentHelpPopover } from './add_agent_help_popover'; export { EuiButtonWithTooltip } from './eui_button_with_tooltip'; -export * from './link_and_revision'; +export * from './agent_policy_summary_line'; export * from './agent_enrollment_flyout'; export * from './platform_selector'; export { ConfirmForceInstallModal } from './confirm_force_install_modal'; @@ -29,3 +28,4 @@ export { DevtoolsRequestFlyoutButton } from './devtools_request_flyout'; export { HeaderReleaseBadge, InlineReleaseBadge } from './release_badge'; export { WithGuidedOnboardingTour } from './with_guided_onboarding_tour'; export { UninstallCommandFlyout } from './uninstall_command_flyout'; +export { MultipleAgentPoliciesSummaryLine } from './multiple_agent_policy_summary_line'; diff --git a/x-pack/plugins/fleet/public/components/multiple_agent_policy_summary_line.test.tsx b/x-pack/plugins/fleet/public/components/multiple_agent_policy_summary_line.test.tsx new file mode 100644 index 0000000000000..0d88dcc4b44b7 --- /dev/null +++ b/x-pack/plugins/fleet/public/components/multiple_agent_policy_summary_line.test.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { act, fireEvent } from '@testing-library/react'; +import React from 'react'; + +import type { TestRenderer } from '../mock'; +import { createFleetTestRendererMock } from '../mock'; + +import type { AgentPolicy } from '../types'; + +import { MultipleAgentPoliciesSummaryLine } from './multiple_agent_policy_summary_line'; + +describe('MultipleAgentPolicySummaryLine', () => { + let testRenderer: TestRenderer; + + const render = (agentPolicies: AgentPolicy[]) => + testRenderer.render(); + + beforeEach(() => { + testRenderer = createFleetTestRendererMock(); + }); + + test('it should render only the policy name when there is only one policy', async () => { + const results = render([{ name: 'Test policy', revision: 2 }] as AgentPolicy[]); + expect(results.container.textContent).toBe('Test policy'); + expect(results.queryByTestId('agentPolicyNameBadge')).toBeInTheDocument(); + expect(results.queryByTestId('agentPoliciesNumberBadge')).not.toBeInTheDocument(); + }); + + test('it should render the first policy name and the badge when there are multiple policies', async () => { + const results = render([ + { name: 'Test policy 1', id: '0001' }, + { name: 'Test policy 2', id: '0002' }, + { name: 'Test policy 3', id: '0003' }, + ] as AgentPolicy[]); + expect(results.queryByTestId('agentPolicyNameBadge')).toBeInTheDocument(); + expect(results.queryByTestId('agentPoliciesNumberBadge')).toBeInTheDocument(); + expect(results.container.textContent).toBe('Test policy 1+2'); + + await act(async () => { + fireEvent.click(results.getByTestId('agentPoliciesNumberBadge')); + }); + expect(results.queryByTestId('agentPoliciesPopover')).toBeInTheDocument(); + expect(results.queryByTestId('agentPoliciesPopoverButton')).toBeInTheDocument(); + expect(results.queryByTestId('policy-0001')).toBeInTheDocument(); + expect(results.queryByTestId('policy-0002')).toBeInTheDocument(); + expect(results.queryByTestId('policy-0003')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/fleet/public/components/multiple_agent_policy_summary_line.tsx b/x-pack/plugins/fleet/public/components/multiple_agent_policy_summary_line.tsx new file mode 100644 index 0000000000000..2a869f12bd817 --- /dev/null +++ b/x-pack/plugins/fleet/public/components/multiple_agent_policy_summary_line.tsx @@ -0,0 +1,127 @@ +/* + * Copyright 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 { + EuiFlexGroup, + EuiFlexItem, + EuiBadge, + EuiPopover, + EuiPopoverTitle, + EuiPopoverFooter, + EuiButton, + EuiListGroup, + type EuiListGroupItemProps, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import type { CSSProperties } from 'react'; +import { useMemo } from 'react'; +import React, { memo, useState } from 'react'; + +import type { AgentPolicy } from '../../common/types'; +import { useLink } from '../hooks'; +const MIN_WIDTH: CSSProperties = { minWidth: 0 }; + +export const MultipleAgentPoliciesSummaryLine = memo<{ + policies: AgentPolicy[]; + direction?: 'column' | 'row'; +}>(({ policies, direction = 'row' }) => { + const { getHref } = useLink(); + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const closePopover = () => setIsPopoverOpen(false); + + // as default, show only the first policy + const policy = policies[0]; + const { name, id } = policy; + + const listItems: EuiListGroupItemProps[] = useMemo(() => { + return policies.map((p) => { + return { + 'data-test-subj': `policy-${p.id}`, + label: p.name || p.id, + href: getHref('policy_details', { policyId: p.id }), + iconType: 'dot', + extraAction: { + color: 'text', + iconType: p.is_managed ? 'lock' : '', + alwaysShow: !!p.is_managed, + iconSize: 's', + 'aria-label': 'Hosted agent policy', + }, + showToolTip: !!p.is_managed, + toolTipText: i18n.translate('xpack.fleet.agentPolicySummaryLine.hostedPolicyTooltip', { + defaultMessage: + 'This policy is managed outside of Fleet. Most actions related to this policy are unavailable.', + }), + }; + }); + }, [getHref, policies]); + + return ( + + + + + + + + {name || id} + + + {policies.length > 1 && ( + + setIsPopoverOpen(!isPopoverOpen)} + onClickAriaLabel="Open agent policies popover" + > + {`+${policies.length - 1}`} + + + + {i18n.translate('xpack.fleet.agentPolicySummaryLine.popover.title', { + defaultMessage: 'This integration is shared by', + })} + +
+ +
+ + {/* TODO: implement missing onClick function */} + + {i18n.translate('xpack.fleet.agentPolicySummaryLine.popover.button', { + defaultMessage: 'Manage agent policies', + })} + + +
+
+ )} +
+
+
+
+
+ ); +}); diff --git a/x-pack/plugins/fleet/public/components/uninstall_command_flyout/uninstall_command_flyout.tsx b/x-pack/plugins/fleet/public/components/uninstall_command_flyout/uninstall_command_flyout.tsx index 447a6c2dc7877..7b21cabffc907 100644 --- a/x-pack/plugins/fleet/public/components/uninstall_command_flyout/uninstall_command_flyout.tsx +++ b/x-pack/plugins/fleet/public/components/uninstall_command_flyout/uninstall_command_flyout.tsx @@ -31,6 +31,7 @@ import { useGetUninstallToken, useGetUninstallTokens, } from '../../hooks/use_request/uninstall_tokens'; +import { MAX_FLYOUT_WIDTH } from '../../constants'; import { UninstallCommandsPerPlatform } from './uninstall_commands_per_platform'; import type { UninstallCommandTarget } from './types'; @@ -185,7 +186,11 @@ export const UninstallCommandFlyout: React.FunctionComponent { return ( - +

diff --git a/x-pack/plugins/fleet/public/constants/index.ts b/x-pack/plugins/fleet/public/constants/index.ts index 0af765a9912a6..ee01037f25a78 100644 --- a/x-pack/plugins/fleet/public/constants/index.ts +++ b/x-pack/plugins/fleet/public/constants/index.ts @@ -60,3 +60,5 @@ export type TourKey = keyof typeof TOUR_STORAGE_KEYS; export type TOUR_STORAGE_CONFIG = { [k in TourKey]: TourConfig; }; + +export const MAX_FLYOUT_WIDTH = 800; diff --git a/x-pack/plugins/fleet/public/layouts/with_header.tsx b/x-pack/plugins/fleet/public/layouts/with_header.tsx index 71f9b598c6428..db500a4633e1e 100644 --- a/x-pack/plugins/fleet/public/layouts/with_header.tsx +++ b/x-pack/plugins/fleet/public/layouts/with_header.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { EuiPageBody, EuiSpacer } from '@elastic/eui'; +import { EuiPageBody, EuiSpacer, useIsWithinMinBreakpoint } from '@elastic/eui'; import type { HeaderProps } from '../components'; import { Header } from '../components'; @@ -18,6 +18,7 @@ export interface WithHeaderLayoutProps extends HeaderProps { restrictHeaderWidth?: number; 'data-test-subj'?: string; children?: React.ReactNode; + isReadOnly?: boolean; } export const WithHeaderLayout: React.FC = ({ @@ -25,24 +26,30 @@ export const WithHeaderLayout: React.FC = ({ restrictHeaderWidth, children, 'data-test-subj': dataTestSubj, + isReadOnly, ...rest -}) => ( - -
- - - - - {children} - - - - -); +}) => { + const isBiggerScreen = useIsWithinMinBreakpoint('xxl'); + const fullWidthSize = isBiggerScreen ? '80%' : '100%'; + + return ( + +
+ + + + + {children} + + + + + ); +}; diff --git a/x-pack/plugins/fleet/public/types/ui_extensions.ts b/x-pack/plugins/fleet/public/types/ui_extensions.ts index a041762438b8d..b0445bf4e1697 100644 --- a/x-pack/plugins/fleet/public/types/ui_extensions.ts +++ b/x-pack/plugins/fleet/public/types/ui_extensions.ts @@ -119,6 +119,12 @@ export interface EndpointAgentTamperProtectionExtension { Component: LazyExoticComponent; } +export interface PliAuthBlockExtension { + package: string; + view: 'pli-auth-block'; + Component: LazyExoticComponent; +} + export interface PackageGenericErrorsListExtension { package: string; view: 'package-generic-errors-list'; @@ -226,4 +232,5 @@ export type UIExtensionPoint = | PackageGenericErrorsListExtension | AgentEnrollmentFlyoutFinalStepExtension | PackagePolicyCreateMultiStepExtension - | EndpointAgentTamperProtectionExtension; + | EndpointAgentTamperProtectionExtension + | PliAuthBlockExtension; diff --git a/x-pack/plugins/fleet/server/collectors/agents_per_output.test.ts b/x-pack/plugins/fleet/server/collectors/agents_per_output.test.ts index f68a700865708..181467a69cf1f 100644 --- a/x-pack/plugins/fleet/server/collectors/agents_per_output.test.ts +++ b/x-pack/plugins/fleet/server/collectors/agents_per_output.test.ts @@ -9,23 +9,57 @@ import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/ import { getAgentsPerOutput } from './agents_per_output'; +jest.mock('../services/agents', () => { + return { + getAgentsByKuery: jest + .fn() + .mockImplementation(async (esClient, soClient, { kuery }: { kuery: string }) => { + if (kuery.includes('policy_id:policy1')) { + return { + total: 0, + }; + } else { + return { + total: 1, + }; + } + }), + }; +}); + jest.mock('../services', () => { return { agentPolicyService: { list: jest.fn().mockResolvedValue({ items: [ - { agents: 0, data_output_id: 'logstash1', monitoring_output_id: 'kafka1' }, - { agents: 1 }, - { agents: 1, data_output_id: 'logstash1' }, - { agents: 1, monitoring_output_id: 'kafka1' }, - { agents: 1, data_output_id: 'elasticsearch2', monitoring_output_id: 'elasticsearch2' }, - { agents: 1, data_output_id: 'elasticsearch3', monitoring_output_id: 'elasticsearch3' }, + { id: 'policy1', agents: 0, data_output_id: 'logstash1', monitoring_output_id: 'kafka1' }, + { id: 'policy2', agents: 1 }, + { id: 'policy3', agents: 1, data_output_id: 'logstash1' }, + { id: 'policy4', agents: 1, monitoring_output_id: 'kafka1' }, + { + id: 'policy5', + agents: 1, + data_output_id: 'elasticsearch2', + monitoring_output_id: 'elasticsearch2', + }, + { + id: 'policy5', + agents: 1, + data_output_id: 'elasticsearch3', + monitoring_output_id: 'elasticsearch3', + }, { + id: 'policy6', agents: 1, data_output_id: 'es-containerhost', monitoring_output_id: 'es-containerhost', }, - { agents: 1, data_output_id: 'remote-es', monitoring_output_id: 'remote-es' }, + { + id: 'policy7', + agents: 1, + data_output_id: 'remote-es', + monitoring_output_id: 'remote-es', + }, ], }), }, diff --git a/x-pack/plugins/fleet/server/collectors/agents_per_output.ts b/x-pack/plugins/fleet/server/collectors/agents_per_output.ts index 5090b1530bc02..a6d6254bc5276 100644 --- a/x-pack/plugins/fleet/server/collectors/agents_per_output.ts +++ b/x-pack/plugins/fleet/server/collectors/agents_per_output.ts @@ -46,9 +46,9 @@ export async function getAgentsPerOutput( const { items: agentPolicies } = await agentPolicyService.list(soClient, { esClient, - withAgentCount: true, page: 1, perPage: SO_SEARCH_LIMIT, + withAgentCount: true, }); const outputTypes: { [key: string]: AgentsPerOutputType } = {}; diff --git a/x-pack/plugins/fleet/server/mocks/index.ts b/x-pack/plugins/fleet/server/mocks/index.ts index 9e84626455b1b..781cc18e33425 100644 --- a/x-pack/plugins/fleet/server/mocks/index.ts +++ b/x-pack/plugins/fleet/server/mocks/index.ts @@ -121,6 +121,9 @@ export const createFleetRequestHandlerContextMock = (): jest.Mocked< asCurrentUser: createPackagePolicyServiceMock(), asInternalUser: createPackagePolicyServiceMock(), }, + uninstallTokenService: { + asCurrentUser: createUninstallTokenServiceMock(), + }, internalSoClient: savedObjectsClientMock.create(), spaceId: 'default', limitedToPackages: undefined, @@ -182,7 +185,6 @@ export const createPackagePolicyServiceMock = (): jest.Mocked => { return { get: jest.fn(), @@ -238,5 +240,6 @@ export function createUninstallTokenServiceMock(): UninstallTokenServiceInterfac encryptTokens: jest.fn(), checkTokenValidityForAllPolicies: jest.fn(), checkTokenValidityForPolicy: jest.fn(), + scoped: jest.fn().mockImplementation(() => createUninstallTokenServiceMock()), }; } diff --git a/x-pack/plugins/fleet/server/plugin.ts b/x-pack/plugins/fleet/server/plugin.ts index 1c2ff2353a1a2..67240be2cc542 100644 --- a/x-pack/plugins/fleet/server/plugin.ts +++ b/x-pack/plugins/fleet/server/plugin.ts @@ -521,6 +521,18 @@ export class FleetPlugin asInternalUser: agentService.asInternalUser, }; }, + get uninstallTokenService() { + const uninstallTokenService = new UninstallTokenService( + appContextService.getEncryptedSavedObjectsStart()!.getClient({ + includedHiddenTypes: [UNINSTALL_TOKENS_SAVED_OBJECT_TYPE], + }), + appContextService.getInternalUserSOClientForSpaceId(soClient.getCurrentNamespace()) + ); + + return { + asCurrentUser: uninstallTokenService, + }; + }, get packagePolicyService() { const service = plugin.setupPackagePolicyService(); diff --git a/x-pack/plugins/fleet/server/routes/agent/handlers.ts b/x-pack/plugins/fleet/server/routes/agent/handlers.ts index b292cc2f88c33..6f1ac12edb163 100644 --- a/x-pack/plugins/fleet/server/routes/agent/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent/handlers.ts @@ -8,6 +8,7 @@ import { uniq } from 'lodash'; import { type RequestHandler, SavedObjectsErrorHelpers } from '@kbn/core/server'; import type { TypeOf } from '@kbn/config-schema'; +import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import type { GetAgentsResponse, @@ -20,6 +21,7 @@ import type { GetAgentUploadsResponse, PostAgentReassignResponse, PostRetrieveAgentsByActionsResponse, + Agent, } from '../../../common/types'; import type { GetAgentsRequestSchema, @@ -37,22 +39,36 @@ import type { GetAgentUploadFileRequestSchema, DeleteAgentUploadFileRequestSchema, PostRetrieveAgentsByActionsRequestSchema, + FleetRequestHandler, } from '../../types'; -import { defaultFleetErrorHandler } from '../../errors'; +import { defaultFleetErrorHandler, FleetNotFoundError } from '../../errors'; import * as AgentService from '../../services/agents'; import { fetchAndAssignAgentMetrics } from '../../services/agents/agent_metrics'; +import { getAgentStatusForAgentPolicy } from '../../services/agents'; + +export function verifyNamespace(agent: Agent, currentNamespace?: string) { + const isInNamespace = + (currentNamespace && agent.namespaces?.includes(currentNamespace)) || + (!currentNamespace && + (!agent.namespaces || + agent.namespaces.length === 0 || + agent.namespaces?.includes(DEFAULT_NAMESPACE_STRING))); + if (!isInNamespace) { + throw new FleetNotFoundError(`${agent.id} not found in namespace`); + } +} -export const getAgentHandler: RequestHandler< +export const getAgentHandler: FleetRequestHandler< TypeOf, TypeOf > = async (context, request, response) => { - const coreContext = await context.core; - const esClient = coreContext.elasticsearch.client.asInternalUser; - const esClientCurrentUser = coreContext.elasticsearch.client.asCurrentUser; - const soClient = coreContext.savedObjects.client; - try { - let agent = await AgentService.getAgentById(esClient, soClient, request.params.agentId); + const [coreContext, fleetContext] = await Promise.all([context.core, context.fleet]); + const esClientCurrentUser = coreContext.elasticsearch.client.asCurrentUser; + + let agent = await fleetContext.agentClient.asCurrentUser.getAgent(request.params.agentId); + + verifyNamespace(agent, coreContext.savedObjects.client.getCurrentNamespace()); if (request.query.withMetrics) { agent = (await fetchAndAssignAgentMetrics(esClientCurrentUser, [agent]))[0]; @@ -77,10 +93,10 @@ export const getAgentHandler: RequestHandler< export const deleteAgentHandler: RequestHandler< TypeOf > = async (context, request, response) => { - const coreContext = await context.core; - const esClient = coreContext.elasticsearch.client.asInternalUser; - try { + const coreContext = await context.core; + const esClient = coreContext.elasticsearch.client.asInternalUser; + await AgentService.deleteAgent(esClient, request.params.agentId); const body = { @@ -162,17 +178,16 @@ export const bulkUpdateAgentTagsHandler: RequestHandler< } }; -export const getAgentsHandler: RequestHandler< +export const getAgentsHandler: FleetRequestHandler< undefined, TypeOf > = async (context, request, response) => { - const coreContext = await context.core; - const esClient = coreContext.elasticsearch.client.asInternalUser; + const [coreContext, fleetContext] = await Promise.all([context.core, context.fleet]); + const { agentClient } = fleetContext; const esClientCurrentUser = coreContext.elasticsearch.client.asCurrentUser; - const soClient = coreContext.savedObjects.client; try { - const agentRes = await AgentService.getAgentsByKuery(esClient, soClient, { + const agentRes = await agentClient.asCurrentUser.listAgents({ page: request.query.page, perPage: request.query.perPage, showInactive: request.query.showInactive, @@ -300,19 +315,20 @@ export const postBulkAgentReassignHandler: RequestHandler< } }; -export const getAgentStatusForAgentPolicyHandler: RequestHandler< +export const getAgentStatusForAgentPolicyHandler: FleetRequestHandler< undefined, TypeOf > = async (context, request, response) => { - const coreContext = await context.core; - const esClient = coreContext.elasticsearch.client.asInternalUser; - const soClient = coreContext.savedObjects.client; try { - const results = await AgentService.getAgentStatusForAgentPolicy( + const [coreContext, fleetContext] = await Promise.all([context.core, context.fleet]); + const esClient = coreContext.elasticsearch.client.asInternalUser; + const soClient = fleetContext.internalSoClient; + const results = await getAgentStatusForAgentPolicy( esClient, soClient, request.query.policyId, - request.query.kuery + request.query.kuery, + coreContext.savedObjects.client.getCurrentNamespace() ); const body: GetAgentStatusResponse = { results }; diff --git a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts index a5d6f7b83c854..d652dacf0dd9a 100644 --- a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts @@ -6,12 +6,7 @@ */ import type { TypeOf } from '@kbn/config-schema'; -import type { - RequestHandler, - ResponseHeaders, - ElasticsearchClient, - SavedObjectsClientContract, -} from '@kbn/core/server'; +import type { RequestHandler, ResponseHeaders } from '@kbn/core/server'; import pMap from 'p-map'; import { safeDump } from 'js-yaml'; @@ -19,7 +14,7 @@ import { HTTPAuthorizationHeader } from '../../../common/http_authorization_head import { fullAgentPolicyToYaml } from '../../../common/services'; import { appContextService, agentPolicyService } from '../../services'; -import { getAgentsByKuery, getLatestAvailableAgentVersion } from '../../services/agents'; +import { type AgentClient, getLatestAvailableAgentVersion } from '../../services/agents'; import { AGENTS_PREFIX, UNPRIVILEGED_AGENT_KUERY } from '../../constants'; import type { GetAgentPoliciesRequestSchema, @@ -56,25 +51,28 @@ import { import { createAgentPolicyWithPackages } from '../../services/agent_policy_create'; export async function populateAssignedAgentsCount( - esClient: ElasticsearchClient, - soClient: SavedObjectsClientContract, + agentClient: AgentClient, agentPolicies: AgentPolicy[] ) { await pMap( agentPolicies, (agentPolicy: GetAgentPoliciesResponseItem) => { - const totalAgents = getAgentsByKuery(esClient, soClient, { - showInactive: true, - perPage: 0, - page: 1, - kuery: `${AGENTS_PREFIX}.policy_id:${agentPolicy.id}`, - }).then(({ total }) => (agentPolicy.agents = total)); - const unprivilegedAgents = getAgentsByKuery(esClient, soClient, { - showInactive: true, - perPage: 0, - page: 1, - kuery: `${AGENTS_PREFIX}.policy_id:${agentPolicy.id} and ${UNPRIVILEGED_AGENT_KUERY}`, - }).then(({ total }) => (agentPolicy.unprivileged_agents = total)); + const totalAgents = agentClient + .listAgents({ + showInactive: true, + perPage: 0, + page: 1, + kuery: `${AGENTS_PREFIX}.policy_id:${agentPolicy.id}`, + }) + .then(({ total }) => (agentPolicy.agents = total)); + const unprivilegedAgents = agentClient + .listAgents({ + showInactive: true, + perPage: 0, + page: 1, + kuery: `${AGENTS_PREFIX}.policy_id:${agentPolicy.id} and ${UNPRIVILEGED_AGENT_KUERY}`, + }) + .then(({ total }) => (agentPolicy.unprivileged_agents = total)); return Promise.all([totalAgents, unprivilegedAgents]); }, { concurrency: 10 } @@ -121,9 +119,12 @@ export const getAgentPoliciesHandler: FleetRequestHandler< withPackagePolicies, esClient, ...restOfQuery, - withAgentCount: !noAgentCount, }); + if (fleetContext.authz.fleet.readAgents && !noAgentCount) { + await populateAssignedAgentsCount(fleetContext.agentClient.asCurrentUser, items); + } + const body: GetAgentPoliciesResponse = { items: !fleetContext.authz.fleet.readAgentPolicies ? items.map(sanitizeItemForReadAgentOnly) @@ -144,9 +145,8 @@ export const bulkGetAgentPoliciesHandler: FleetRequestHandler< TypeOf > = async (context, request, response) => { try { - const [coreContext, fleetContext] = await Promise.all([context.core, context.fleet]); + const fleetContext = await context.fleet; const soClient = fleetContext.internalSoClient; - const esClient = coreContext.elasticsearch.client.asInternalUser; const { full: withPackagePolicies = false, ignoreMissing = false, ids } = request.body; const items = await agentPolicyService.getByIDs(soClient, ids, { withPackagePolicies, @@ -157,8 +157,9 @@ export const bulkGetAgentPoliciesHandler: FleetRequestHandler< ? items.map(sanitizeItemForReadAgentOnly) : items, }; - - await populateAssignedAgentsCount(esClient, soClient, items); + if (fleetContext.authz.fleet.readAgents) { + await populateAssignedAgentsCount(fleetContext.agentClient.asCurrentUser, items); + } return response.ok({ body }); } catch (error) { @@ -179,12 +180,13 @@ export const getOneAgentPolicyHandler: FleetRequestHandler< > = async (context, request, response) => { try { const [coreContext, fleetContext] = await Promise.all([context.core, context.fleet]); - const esClient = coreContext.elasticsearch.client.asInternalUser; const soClient = coreContext.savedObjects.client; const agentPolicy = await agentPolicyService.get(soClient, request.params.agentPolicyId); if (agentPolicy) { - await populateAssignedAgentsCount(esClient, soClient, [agentPolicy]); + if (fleetContext.authz.fleet.readAgents) { + await populateAssignedAgentsCount(fleetContext.agentClient.asCurrentUser, [agentPolicy]); + } const body: GetOneAgentPolicyResponse = { item: !fleetContext.authz.fleet.readAgentPolicies ? sanitizeItemForReadAgentOnly(agentPolicy) diff --git a/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts b/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts index 60d8a2de45119..016a731d1c67e 100644 --- a/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts +++ b/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts @@ -7,6 +7,7 @@ import { type RequestHandler, SavedObjectsErrorHelpers } from '@kbn/core/server'; import type { TypeOf } from '@kbn/config-schema'; +import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import type { GetEnrollmentAPIKeysRequestSchema, @@ -23,19 +24,25 @@ import type { import * as APIKeyService from '../../services/api_keys'; import { agentPolicyService } from '../../services/agent_policy'; import { defaultFleetErrorHandler, AgentPolicyNotFoundError } from '../../errors'; +import { appContextService } from '../../services'; export const getEnrollmentApiKeysHandler: RequestHandler< undefined, TypeOf > = async (context, request, response) => { + const { useSpaceAwareness } = appContextService.getExperimentalFeatures(); // Use kibana_system and depend on authz checks on HTTP layer to prevent abuse const esClient = (await context.core).elasticsearch.client.asInternalUser; + const soClient = (await context.core).savedObjects.client; try { const { items, total, page, perPage } = await APIKeyService.listEnrollmentApiKeys(esClient, { page: request.query.page, perPage: request.query.perPage, kuery: request.query.kuery, + spaceId: useSpaceAwareness + ? soClient.getCurrentNamespace() ?? DEFAULT_NAMESPACE_STRING + : undefined, }); const body: GetEnrollmentAPIKeysResponse = { list: items, // deprecated @@ -59,7 +66,7 @@ export const postEnrollmentApiKeyHandler: RequestHandler< const soClient = savedObjects.client; const esClient = elasticsearch.client.asInternalUser; try { - // validate policy id + // validate policy exists in the current space await agentPolicyService.get(soClient, request.body.policy_id).catch((err) => { if (SavedObjectsErrorHelpers.isNotFoundError(err)) { throw new AgentPolicyNotFoundError(`Agent policy "${request.body.policy_id}" not found`); @@ -85,9 +92,18 @@ export const postEnrollmentApiKeyHandler: RequestHandler< export const deleteEnrollmentApiKeyHandler: RequestHandler< TypeOf > = async (context, request, response) => { - const esClient = (await context.core).elasticsearch.client.asInternalUser; try { - await APIKeyService.deleteEnrollmentApiKey(esClient, request.params.keyId); + const { useSpaceAwareness } = appContextService.getExperimentalFeatures(); + const coreContext = await context.core; + const esClient = coreContext.elasticsearch.client.asInternalUser; + const currentNamespace = + coreContext.savedObjects.client.getCurrentNamespace() ?? DEFAULT_NAMESPACE_STRING; + await APIKeyService.deleteEnrollmentApiKey( + esClient, + request.params.keyId, + false, + useSpaceAwareness ? currentNamespace : undefined + ); const body: DeleteEnrollmentAPIKeyResponse = { action: 'deleted' }; @@ -106,9 +122,19 @@ export const getOneEnrollmentApiKeyHandler: RequestHandler< TypeOf > = async (context, request, response) => { // Use kibana_system and depend on authz checks on HTTP layer to prevent abuse - const esClient = (await context.core).elasticsearch.client.asInternalUser; + try { - const apiKey = await APIKeyService.getEnrollmentAPIKey(esClient, request.params.keyId); + const coreContext = await context.core; + const esClient = coreContext.elasticsearch.client.asInternalUser; + const currentNamespace = + coreContext.savedObjects.client.getCurrentNamespace() ?? DEFAULT_NAMESPACE_STRING; + const { useSpaceAwareness } = appContextService.getExperimentalFeatures(); + + const apiKey = await APIKeyService.getEnrollmentAPIKey( + esClient, + request.params.keyId, + useSpaceAwareness ? currentNamespace : undefined + ); const body: GetOneEnrollmentAPIKeyResponse = { item: apiKey }; return response.ok({ body }); diff --git a/x-pack/plugins/fleet/server/routes/health_check/handler.test.ts b/x-pack/plugins/fleet/server/routes/health_check/handler.test.ts new file mode 100644 index 0000000000000..d418b0d7c560b --- /dev/null +++ b/x-pack/plugins/fleet/server/routes/health_check/handler.test.ts @@ -0,0 +1,158 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import fetch from 'node-fetch'; + +import * as fleetServerService from '../../services/fleet_server_host'; + +import { postHealthCheckHandler } from '.'; + +jest.mock('node-fetch'); + +describe('Fleet server health_check handler', () => { + const mockContext = { + core: Promise.resolve({ + savedObjects: {}, + elasticsearch: { + client: {}, + }, + }), + } as any; + const mockedFetch = fetch as jest.MockedFunction; + const mockResponse = { + customError: jest.fn().mockImplementation((options) => options), + ok: jest.fn().mockImplementation((options) => { + return { ...options, statusCode: 200 }; + }), + badRequest: jest.fn().mockImplementation((options) => { + return { ...options, statusCode: 400 }; + }), + notFound: jest.fn().mockImplementation((options) => { + return { ...options, statusCode: 404 }; + }), + }; + + beforeEach(() => { + mockedFetch.mockReset(); + }); + + it('should return a bad request error if the requested fleet server host has no host_urls', async () => { + jest.spyOn(fleetServerService, 'getFleetServerHost').mockResolvedValue({ + id: 'default-fleet-server', + name: 'Default', + is_default: true, + host_urls: [], + } as any); + + const res = await postHealthCheckHandler( + mockContext, + { body: { id: 'default-fleet-server' } } as any, + mockResponse as any + ); + + expect(res).toEqual({ + body: { + message: `The requested host id default-fleet-server does not have associated host urls.`, + }, + statusCode: 400, + }); + }); + + it('should return a bad request error if body contains deprecated parameter `host`', async () => { + const res = await postHealthCheckHandler( + mockContext, + { body: { host: 'https://localhost:8220' } } as any, + mockResponse as any + ); + + expect(res).toEqual({ + body: { + message: `Property 'host' is deprecated. Please use id instead.`, + }, + statusCode: 400, + }); + }); + + it('should return 200 and active status when fetch response is `active`', async () => { + const activeRes = { + status: 'ONLINE', + host_id: 'default-fleet-server', + name: 'Default', + }; + + jest.spyOn(fleetServerService, 'getFleetServerHost').mockResolvedValue({ + id: 'default-fleet-server', + name: 'Default', + is_default: true, + host_urls: ['https://localhost:8220'], + } as any); + + mockedFetch.mockResolvedValueOnce({ + json: () => activeRes, + status: 200, + ok: true, + } as any); + + const res = await postHealthCheckHandler( + mockContext, + { body: { id: 'default-fleet-server' } } as any, + mockResponse as any + ); + + expect(res).toEqual({ + body: { + host: 'https://localhost:8220', + host_id: 'default-fleet-server', + name: 'Default', + status: 'ONLINE', + }, + statusCode: 200, + }); + }); + + it('should return an error when host id is not found', async () => { + jest + .spyOn(fleetServerService, 'getFleetServerHost') + .mockRejectedValue({ output: { statusCode: 404 }, isBoom: true }); + + const res = await postHealthCheckHandler( + mockContext, + { body: { id: 'non-existent' } } as any, + mockResponse as any + ); + + expect(res).toEqual({ + body: { + message: `The requested host id non-existent does not exist.`, + }, + statusCode: 404, + }); + }); + + it('should return status `offline` when fetch request gets aborted', async () => { + jest.spyOn(fleetServerService, 'getFleetServerHost').mockResolvedValue({ + id: 'default-fleet-server', + name: 'Default', + is_default: true, + host_urls: ['https://localhost:8220'], + } as any); + mockedFetch.mockRejectedValue({ message: 'user aborted', name: 'AbortError' }); + + const res = await postHealthCheckHandler( + mockContext, + { body: { id: 'default-fleet-server' } } as any, + mockResponse as any + ); + + expect(res).toEqual({ + body: { + host_id: 'default-fleet-server', + status: 'OFFLINE', + }, + statusCode: 200, + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/routes/health_check/index.ts b/x-pack/plugins/fleet/server/routes/health_check/index.ts index 7f30d7f92a859..54f4f68b2e7c3 100644 --- a/x-pack/plugins/fleet/server/routes/health_check/index.ts +++ b/x-pack/plugins/fleet/server/routes/health_check/index.ts @@ -9,21 +9,24 @@ import https from 'https'; import type { TypeOf } from '@kbn/config-schema'; import fetch from 'node-fetch'; +import { getFleetServerHost } from '../../services/fleet_server_host'; + import { API_VERSIONS } from '../../../common/constants'; import type { FleetAuthzRouter } from '../../services/security'; import { APP_API_ROUTES } from '../../constants'; import type { FleetRequestHandler } from '../../types'; + import { defaultFleetErrorHandler } from '../../errors'; import { PostHealthCheckRequestSchema } from '../../types'; export const registerRoutes = (router: FleetAuthzRouter) => { - // get fleet server health check by host + // get fleet server health check by host id router.versioned .post({ path: APP_API_ROUTES.HEALTH_CHECK_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, description: `Check Fleet Server health`, }) @@ -41,15 +44,39 @@ export const postHealthCheckHandler: FleetRequestHandler< undefined, TypeOf > = async (context, request, response) => { + const abortController = new AbortController(); + const { id, host: deprecatedField } = request.body; + const coreContext = await context.core; + const soClient = coreContext.savedObjects.client; + + if (deprecatedField) { + return response.badRequest({ + body: { + message: `Property 'host' is deprecated. Please use id instead.`, + }, + }); + } try { - const abortController = new AbortController(); - const { host } = request.body; + const fleetServerHost = await getFleetServerHost(soClient, id); + + if ( + !fleetServerHost || + !fleetServerHost?.host_urls || + fleetServerHost?.host_urls?.length === 0 + ) { + return response.badRequest({ + body: { + message: `The requested host id ${id} does not have associated host urls.`, + }, + }); + } // Sometimes when the host is not online, the request hangs // Setting a timeout to abort the request after 5s setTimeout(() => { abortController.abort(); }, 5000); + const host = fleetServerHost.host_urls[0]; const res = await fetch(`${host}/api/status`, { headers: { @@ -66,10 +93,18 @@ export const postHealthCheckHandler: FleetRequestHandler< return response.ok({ body }); } catch (error) { + if (error.isBoom && error.output.statusCode === 404) { + return response.notFound({ + body: { + message: `The requested host id ${request.body.id} does not exist.`, + }, + }); + } + // when the request is aborted, return offline status - if (error.name === 'AbortError') { + if (error.name === 'AbortError' || error.message.includes('user aborted')) { return response.ok({ - body: { name: 'fleet-server', status: `OFFLINE`, host: request.body.host }, + body: { status: `OFFLINE`, host_id: request.body.id }, }); } return defaultFleetErrorHandler({ error, response }); diff --git a/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts b/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts index 323c7b71ae487..bb9bf0b507ca9 100644 --- a/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts +++ b/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts @@ -14,6 +14,7 @@ import { RegistryError } from '../../errors'; import { createAppContextStartContractMock, createPackagePolicyServiceMock, + createUninstallTokenServiceMock, xpackMocks, } from '../../mocks'; import { agentServiceMock } from '../../services/agents/agent_service.mock'; @@ -45,6 +46,9 @@ describe('FleetSetupHandler', () => { context = { ...xpackMocks.createRequestHandlerContext(), fleet: { + uninstallTokenService: { + asCurrentUser: createUninstallTokenServiceMock(), + }, agentClient: { asCurrentUser: agentServiceMock.createClient(), asInternalUser: agentServiceMock.createClient(), @@ -129,6 +133,9 @@ describe('FleetStatusHandler', () => { context = { ...xpackMocks.createRequestHandlerContext(), fleet: { + uninstallTokenService: { + asCurrentUser: createUninstallTokenServiceMock(), + }, agentClient: { asCurrentUser: agentServiceMock.createClient(), asInternalUser: agentServiceMock.createClient(), diff --git a/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.test.ts b/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.test.ts index 31caa167ba59d..b51f19291c58a 100644 --- a/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.test.ts +++ b/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.test.ts @@ -95,8 +95,8 @@ describe('uninstall token handlers', () => { >; const mockAgentPolicyService = agentPolicyService as jest.Mocked; - beforeEach(() => { - const uninstallTokenService = appContextService.getUninstallTokenService()!; + beforeEach(async () => { + const uninstallTokenService = (await context.fleet).uninstallTokenService.asCurrentUser; getTokenMetadataMock = uninstallTokenService.getTokenMetadata as jest.Mock; mockAgentPolicyService.list.mockResolvedValue({ items: [createAgentPolicyMock()], @@ -118,22 +118,6 @@ describe('uninstall token handlers', () => { }); }); - it('should return internal error when uninstallTokenService is unavailable', async () => { - appContextService.stop(); - appContextService.start({ - ...appContextStartContractMock, - // @ts-expect-error - uninstallTokenService: undefined, - }); - - await getUninstallTokensMetadataHandler(context, request, response); - - expect(response.customError).toHaveBeenCalledWith({ - statusCode: 500, - body: { message: 'Uninstall Token Service is unavailable.' }, - }); - }); - it('should return internal error when uninstallTokenService throws error', async () => { getTokenMetadataMock.mockRejectedValue(Error('something happened')); @@ -158,8 +142,8 @@ describe('uninstall token handlers', () => { let getTokenMock: jest.Mock; let request: KibanaRequest>; - beforeEach(() => { - const uninstallTokenService = appContextService.getUninstallTokenService()!; + beforeEach(async () => { + const uninstallTokenService = (await context.fleet).uninstallTokenService.asCurrentUser; getTokenMock = uninstallTokenService.getToken as jest.Mock; const requestOptions: GetUninstallTokenRequest = { @@ -183,22 +167,6 @@ describe('uninstall token handlers', () => { }); }); - it('should return internal error when uninstallTokenService is unavailable', async () => { - appContextService.stop(); - appContextService.start({ - ...appContextStartContractMock, - // @ts-expect-error - uninstallTokenService: undefined, - }); - - await getUninstallTokenHandler(context, request, response); - - expect(response.customError).toHaveBeenCalledWith({ - statusCode: 500, - body: { message: 'Uninstall Token Service is unavailable.' }, - }); - }); - it('should return internal error when uninstallTokenService throws error', async () => { getTokenMock.mockRejectedValue(Error('something happened')); diff --git a/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts b/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts index 189a1f8bc80f7..5e61d5b9b01a2 100644 --- a/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts @@ -6,9 +6,8 @@ */ import type { TypeOf } from '@kbn/config-schema'; -import type { CustomHttpResponseOptions, ResponseError } from '@kbn/core-http-server'; -import { appContextService, agentPolicyService } from '../../services'; +import { agentPolicyService } from '../../services'; import type { FleetRequestHandler } from '../../types'; import type { GetUninstallTokensMetadataRequestSchema, @@ -18,33 +17,25 @@ import { defaultFleetErrorHandler } from '../../errors'; import type { GetUninstallTokenResponse } from '../../../common/types/rest_spec/uninstall_token'; import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../constants'; -const UNINSTALL_TOKEN_SERVICE_UNAVAILABLE_ERROR: CustomHttpResponseOptions = { - statusCode: 500, - body: { message: 'Uninstall Token Service is unavailable.' }, -}; - export const getUninstallTokensMetadataHandler: FleetRequestHandler< unknown, TypeOf > = async (context, request, response) => { - const uninstallTokenService = appContextService.getUninstallTokenService(); - if (!uninstallTokenService) { - return response.customError(UNINSTALL_TOKEN_SERVICE_UNAVAILABLE_ERROR); - } + try { + const [fleetContext, coreContext] = await Promise.all([context.fleet, context.core]); + const uninstallTokenService = fleetContext.uninstallTokenService.asCurrentUser; - const { page = 1, perPage = 20, policyId, search } = request.query; + const { page = 1, perPage = 20, policyId, search } = request.query; - if (policyId && search) { - return response.badRequest({ - body: { - message: 'Query parameters `policyId` and `search` cannot be used at the same time.', - }, - }); - } + if (policyId && search) { + return response.badRequest({ + body: { + message: 'Query parameters `policyId` and `search` cannot be used at the same time.', + }, + }); + } - try { - const fleetContext = await context.fleet; - const soClient = fleetContext.internalSoClient; + const soClient = coreContext.savedObjects.client; const { items: managedPolicies } = await agentPolicyService.list(soClient, { fields: ['id'], @@ -80,10 +71,8 @@ export const getUninstallTokensMetadataHandler: FleetRequestHandler< export const getUninstallTokenHandler: FleetRequestHandler< TypeOf > = async (context, request, response) => { - const uninstallTokenService = appContextService.getUninstallTokenService(); - if (!uninstallTokenService) { - return response.customError(UNINSTALL_TOKEN_SERVICE_UNAVAILABLE_ERROR); - } + const [fleetContext] = await Promise.all([context.fleet, context.core]); + const uninstallTokenService = fleetContext.uninstallTokenService.asCurrentUser; try { const { uninstallTokenId } = request.params; diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index 5a084ac211e5e..d3d94fa581955 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -38,8 +38,6 @@ import { policyHasSyntheticsIntegration, } from '../../common/services'; -import { populateAssignedAgentsCount } from '../routes/agent_policy/handlers'; - import type { HTTPAuthorizationHeader } from '../../common/http_authorization_header'; import { @@ -349,7 +347,10 @@ class AgentPolicyService { options ); - await appContextService.getUninstallTokenService()?.generateTokenForPolicyId(newSo.id); + await appContextService + .getUninstallTokenService() + ?.scoped(soClient.getCurrentNamespace()) + ?.generateTokenForPolicyId(newSo.id); await this.triggerAgentPolicyUpdatedEvent(esClient, 'created', newSo.id, { skipDeploy: options.skipDeploy, spaceId: soClient.getCurrentNamespace(), @@ -485,8 +486,6 @@ class AgentPolicyService { kuery, withPackagePolicies = false, fields, - esClient, - withAgentCount = false, } = options; const baseFindParams = { @@ -526,6 +525,21 @@ class AgentPolicyService { agentPolicy.package_policies = (await packagePolicyService.findAllForAgentPolicy(soClient, agentPolicySO.id)) || []; } + if (options.withAgentCount) { + await getAgentsByKuery( + appContextService.getInternalUserESClient(), + appContextService.getInternalUserSOClientForSpaceId(agentPolicy.space_id), + { + showInactive: true, + perPage: 0, + page: 1, + kuery: `${AGENTS_PREFIX}.policy_id:${agentPolicy.id}`, + } + ).then(({ total }) => (agentPolicy.agents = total)); + } else { + agentPolicy.agents = 0; + } + return agentPolicy; }, { concurrency: 50 } @@ -538,11 +552,6 @@ class AgentPolicyService { savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, }); } - if (esClient && withAgentCount) { - await populateAssignedAgentsCount(esClient, soClient, agentPolicies); - } else { - agentPolicies.forEach((item) => (item.agents = 0)); - } return { items: agentPolicies, diff --git a/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts b/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts index 05ca64eaeaf7b..2db66f04d8a9b 100644 --- a/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts @@ -9,6 +9,12 @@ jest.mock('../security'); jest.mock('./crud'); jest.mock('./status'); jest.mock('./versions'); +jest.mock('../app_context', () => ({ + appContextService: { + getInternalUserSOClientForSpaceId: jest.fn(), + getSavedObjects: jest.fn(), + }, +})); import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; import { @@ -22,6 +28,7 @@ import { FleetUnauthorizedError } from '../../errors'; import { getAuthzFromRequest } from '../security'; import type { FleetAuthz } from '../../../common'; import { createFleetAuthzMock } from '../../../common/mocks'; +import { appContextService } from '../app_context'; import type { AgentClient } from './agent_service'; import { AgentServiceImpl } from './agent_service'; @@ -37,18 +44,24 @@ const mockGetAgentStatusForAgentPolicy = getAgentStatusForAgentPolicy as jest.Mo const mockgetLatestAvailableAgentVersion = getLatestAvailableAgentVersion as jest.Mock; describe('AgentService', () => { + let mockedScopedSoClient: jest.Mocked; + beforeEach(() => { jest.resetAllMocks(); + mockedScopedSoClient = savedObjectsClientMock.create(); + jest.mocked(appContextService.getSavedObjects).mockReturnValue({ + getScopedClient: jest.fn().mockReturnValue(mockedScopedSoClient), + } as any); + jest + .mocked(appContextService.getInternalUserSOClientForSpaceId) + .mockReturnValue(mockedScopedSoClient); }); describe('asScoped', () => { describe('without required privilege', () => { - const agentClient = new AgentServiceImpl( - elasticsearchServiceMock.createElasticsearchClient(), - savedObjectsClientMock.create() - ).asScoped(httpServerMock.createKibanaRequest()); + let agentClient: AgentClient; - beforeEach(() => + beforeEach(() => { mockGetAuthzFromRequest.mockReturnValue( Promise.resolve({ fleet: { @@ -77,8 +90,12 @@ describe('AgentService', () => { writeIntegrationPolicies: false, }, }) - ) - ); + ); + agentClient = new AgentServiceImpl( + elasticsearchServiceMock.createElasticsearchClient(), + savedObjectsClientMock.create() + ).asScoped(httpServerMock.createKibanaRequest()); + }); it('rejects on listAgents', async () => { await expect(agentClient.listAgents({ showInactive: true })).rejects.toThrowError( @@ -124,32 +141,65 @@ describe('AgentService', () => { describe('with required privilege', () => { const mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); const mockSoClient = savedObjectsClientMock.create(); - const agentClient = new AgentServiceImpl(mockEsClient, mockSoClient).asScoped( - httpServerMock.createKibanaRequest() - ); beforeEach(() => mockGetAuthzFromRequest.mockReturnValue(Promise.resolve(createFleetAuthzMock())) ); + expectApisToCallServicesSuccessfully( + mockEsClient, + () => mockedScopedSoClient, + () => + new AgentServiceImpl(mockEsClient, mockSoClient).asScoped( + httpServerMock.createKibanaRequest() + ), + 'default' + ); + }); - expectApisToCallServicesSuccessfully(mockEsClient, mockSoClient, agentClient); + describe('with required privilege in a non default space', () => { + const mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); + const mockSoClient = savedObjectsClientMock.create(); + + beforeEach(() => { + mockGetAuthzFromRequest.mockReturnValue(Promise.resolve(createFleetAuthzMock())); + jest.mocked(mockedScopedSoClient.getCurrentNamespace).mockReturnValue('test'); + }); + expectApisToCallServicesSuccessfully( + mockEsClient, + () => mockedScopedSoClient, + () => + new AgentServiceImpl(mockEsClient, mockSoClient).asScoped( + httpServerMock.createKibanaRequest() + ), + 'test' + ); }); }); describe('asInternalUser', () => { const mockEsClient = elasticsearchServiceMock.createElasticsearchClient(); const mockSoClient = savedObjectsClientMock.create(); - const agentClient = new AgentServiceImpl(mockEsClient, mockSoClient).asInternalUser; - - expectApisToCallServicesSuccessfully(mockEsClient, mockSoClient, agentClient); + expectApisToCallServicesSuccessfully( + mockEsClient, + () => mockSoClient, + () => new AgentServiceImpl(mockEsClient, mockSoClient).asInternalUser + ); }); }); function expectApisToCallServicesSuccessfully( mockEsClient: ElasticsearchClient, - mockSoClient: jest.Mocked, - agentClient: AgentClient + getExpectedSoClient: () => jest.Mocked, + agentClientFactory: () => AgentClient, + spaceId?: string ) { + let agentClient: AgentClient; + let mockSoClient: jest.Mocked; + beforeEach(() => { + mockSoClient = getExpectedSoClient(); + agentClient = agentClientFactory(); + }); + test('client.listAgents calls getAgentsByKuery and returns results', async () => { mockGetAgentsByKuery.mockResolvedValue('getAgentsByKuery success'); await expect(agentClient.listAgents({ showInactive: true })).resolves.toEqual( @@ -157,6 +207,7 @@ function expectApisToCallServicesSuccessfully( ); expect(mockGetAgentsByKuery).toHaveBeenCalledWith(mockEsClient, mockSoClient, { showInactive: true, + spaceId, }); }); @@ -183,7 +234,8 @@ function expectApisToCallServicesSuccessfully( mockEsClient, mockSoClient, 'foo-id', - 'foo-filter' + 'foo-filter', + spaceId ); }); diff --git a/x-pack/plugins/fleet/server/services/agents/agent_service.ts b/x-pack/plugins/fleet/server/services/agents/agent_service.ts index 512db893d1c63..9af97cc307c08 100644 --- a/x-pack/plugins/fleet/server/services/agents/agent_service.ts +++ b/x-pack/plugins/fleet/server/services/agents/agent_service.ts @@ -19,11 +19,12 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { SortResults } from '@elastic/elasticsearch/lib/api/types'; +import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; + import type { AgentStatus, ListWithKuery } from '../../types'; import type { Agent, GetAgentStatusResponse } from '../../../common/types'; - import { getAuthzFromRequest } from '../security'; - +import { appContextService } from '../app_context'; import { FleetUnauthorizedError } from '../../errors'; import { getAgentsByKuery, getAgentById } from './crud'; @@ -88,6 +89,7 @@ export interface AgentClient { total: number; page: number; perPage: number; + statusSummary?: Record; aggregations?: Record; }>; @@ -104,7 +106,8 @@ class AgentClientImpl implements AgentClient { constructor( private readonly internalEsClient: ElasticsearchClient, private readonly soClient: SavedObjectsClientContract, - private readonly preflightCheck?: () => void | Promise + private readonly preflightCheck?: () => void | Promise, + private readonly spaceId?: string ) {} public async listAgents( @@ -114,7 +117,10 @@ class AgentClientImpl implements AgentClient { } ) { await this.#runPreflight(); - return getAgentsByKuery(this.internalEsClient, this.soClient, options); + return getAgentsByKuery(this.internalEsClient, this.soClient, { + ...options, + spaceId: this.spaceId, + }); } public async getAgent(agentId: string) { @@ -133,7 +139,8 @@ class AgentClientImpl implements AgentClient { this.internalEsClient, this.soClient, agentPolicyId, - filterKuery + filterKuery, + this.spaceId ); } @@ -161,14 +168,23 @@ export class AgentServiceImpl implements AgentService { public asScoped(req: KibanaRequest) { const preflightCheck = async () => { const authz = await getAuthzFromRequest(req); - if (!authz.fleet.all) { + if (!authz.fleet.all && !authz.fleet.readAgents) { throw new FleetUnauthorizedError( `User does not have adequate permissions to access Fleet agents.` ); } }; - return new AgentClientImpl(this.internalEsClient, this.soClient, preflightCheck); + const soClient = appContextService.getInternalUserSOClientForSpaceId( + appContextService.getSavedObjects().getScopedClient(req).getCurrentNamespace() + ); + + return new AgentClientImpl( + this.internalEsClient, + soClient, + preflightCheck, + soClient.getCurrentNamespace() ?? DEFAULT_NAMESPACE_STRING + ); } public get asInternalUser() { diff --git a/x-pack/plugins/fleet/server/services/agents/crud.ts b/x-pack/plugins/fleet/server/services/agents/crud.ts index 67b4b964796a6..e6bcd5f954f2e 100644 --- a/x-pack/plugins/fleet/server/services/agents/crud.ts +++ b/x-pack/plugins/fleet/server/services/agents/crud.ts @@ -4,16 +4,16 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + +import { groupBy } from 'lodash'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { SortResults } from '@elastic/elasticsearch/lib/api/types'; import type { SavedObjectsClientContract, ElasticsearchClient } from '@kbn/core/server'; import type { KueryNode } from '@kbn/es-query'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; - +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import type { AggregationsAggregationContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { groupBy } from 'lodash'; - import type { AgentSOAttributes, Agent, ListWithKuery } from '../../types'; import { appContextService, agentPolicyService } from '..'; import type { AgentStatus, FleetServerAgent } from '../../../common/types'; @@ -37,7 +37,9 @@ import { getLatestAvailableAgentVersion } from './versions'; const INACTIVE_AGENT_CONDITION = `status:inactive OR status:unenrolled`; const ACTIVE_AGENT_CONDITION = `NOT (${INACTIVE_AGENT_CONDITION})`; -function _joinFilters(filters: Array): KueryNode | undefined { +export function _joinFilters( + filters: Array +): KueryNode | undefined { try { return filters .filter((filter) => filter !== undefined) @@ -214,6 +216,7 @@ export async function getAgentsByKuery( soClient: SavedObjectsClientContract, options: ListWithKuery & { showInactive: boolean; + spaceId?: string; getStatusSummary?: boolean; sortField?: string; sortOrder?: 'asc' | 'desc'; @@ -241,9 +244,19 @@ export async function getAgentsByKuery( searchAfter, pitId, aggregations, + spaceId, } = options; const filters = []; + const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; + if (useSpaceAwareness && spaceId) { + if (spaceId === DEFAULT_SPACE_ID) { + filters.push(`namespaces:"${DEFAULT_SPACE_ID}" or not namespaces:*`); + } else { + filters.push(`namespaces:"${spaceId}"`); + } + } + if (kuery && kuery !== '') { filters.push(kuery); } diff --git a/x-pack/plugins/fleet/server/services/agents/helpers.ts b/x-pack/plugins/fleet/server/services/agents/helpers.ts index 21e4e864e3b6f..2ddad0c24abab 100644 --- a/x-pack/plugins/fleet/server/services/agents/helpers.ts +++ b/x-pack/plugins/fleet/server/services/agents/helpers.ts @@ -60,6 +60,7 @@ export function searchHitToAgent( const agent: Agent = { id: hit._id, type: hit._source?.type!, + namespaces: hit._source?.namespaces, active: hit._source?.active!, enrolled_at: hit._source?.enrolled_at!, unenrolled_at: hit._source?.unenrolled_at!, diff --git a/x-pack/plugins/fleet/server/services/agents/status.ts b/x-pack/plugins/fleet/server/services/agents/status.ts index f4d0e312ba027..31fb9f5fe9218 100644 --- a/x-pack/plugins/fleet/server/services/agents/status.ts +++ b/x-pack/plugins/fleet/server/services/agents/status.ts @@ -6,10 +6,9 @@ */ import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; - import { toElasticsearchQuery } from '@kbn/es-query'; import { fromKueryExpression } from '@kbn/es-query'; - +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import type { AggregationsTermsAggregateBase, AggregationsTermsBucketBase, @@ -45,13 +44,27 @@ export async function getAgentStatusForAgentPolicy( esClient: ElasticsearchClient, soClient: SavedObjectsClientContract, agentPolicyId?: string, - filterKuery?: string + filterKuery?: string, + spaceId?: string ) { const logger = appContextService.getLogger(); const runtimeFields = await buildAgentStatusRuntimeField(soClient); const clauses: QueryDslQueryContainer[] = []; + const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; + if (useSpaceAwareness && spaceId) { + if (spaceId === DEFAULT_SPACE_ID) { + clauses.push( + toElasticsearchQuery( + fromKueryExpression(`namespaces:"${DEFAULT_SPACE_ID}" or not namespaces:*`) + ) + ); + } else { + clauses.push(toElasticsearchQuery(fromKueryExpression(`namespaces:"${spaceId}"`))); + } + } + if (filterKuery) { const kueryAsElasticsearchQuery = toElasticsearchQuery( fromKueryExpression(removeSOAttributes(filterKuery)) diff --git a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts index d962279f0ca32..b118b8ff03ac8 100644 --- a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts @@ -22,6 +22,7 @@ jest.mock('../app_context', () => { getLogger: () => loggerMock.create(), getConfig: () => {}, getMessageSigningService: jest.fn(), + getExperimentalFeatures: jest.fn().mockResolvedValue({}), }, }; }); diff --git a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts index ef2209c173510..6d37dd44a7f5e 100644 --- a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts +++ b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts @@ -17,7 +17,11 @@ import { agentPolicyService } from '../agent_policy'; import { auditLoggingService } from '../audit_logging'; import { appContextService } from '../app_context'; -import { deleteEnrollmentApiKey, generateEnrollmentAPIKey } from './enrollment_api_key'; +import { + deleteEnrollmentApiKey, + generateEnrollmentAPIKey, + getEnrollmentAPIKey, +} from './enrollment_api_key'; jest.mock('../audit_logging'); jest.mock('../agent_policy'); @@ -147,4 +151,49 @@ describe('enrollment api keys', () => { }); }); }); + + describe('getEnrollementApiKey', () => { + it('should not allow to retrieve a key in the current space', async () => { + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + esClient.get.mockResolvedValue({ + _id: 'test-id', + _index: ENROLLMENT_API_KEYS_INDEX, + _source: { + active: true, + created_at: new Date().toISOString(), + api_key_id: 'test-enrollment-api-key-id', + namespaces: ['test'], + }, + found: true, + }); + + const enrollmentKey = await getEnrollmentAPIKey( + esClient, + 'test-enrollment-api-key-id', + 'test' + ); + expect(enrollmentKey).toBeDefined(); + }); + it('should not allow to retrieve a key in a different space', async () => { + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + esClient.get.mockResolvedValue({ + _id: 'test-id', + _index: ENROLLMENT_API_KEYS_INDEX, + _source: { + active: true, + created_at: new Date().toISOString(), + api_key_id: 'test-enrollment-api-key-id', + }, + found: true, + }); + + await expect( + getEnrollmentAPIKey(esClient, 'test-enrollment-api-key-id', 'test') + ).rejects.toThrowError( + 'Enrollment api key test-enrollment-api-key-id not found in namespace' + ); + }); + }); }); diff --git a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts index 02e1e9e25e194..e89917143732f 100644 --- a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts +++ b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts @@ -11,8 +11,8 @@ import { i18n } from '@kbn/i18n'; import { errors } from '@elastic/elasticsearch'; import type { SavedObjectsClientContract, ElasticsearchClient } from '@kbn/core/server'; -import { toElasticsearchQuery, fromKueryExpression } from '@kbn/es-query'; - +import { toElasticsearchQuery } from '@kbn/es-query'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import type { ESSearchResponse as SearchResponse } from '@kbn/es-types'; import type { EnrollmentAPIKey, FleetServerEnrollmentAPIKey } from '../../types'; @@ -20,9 +20,8 @@ import { FleetError, EnrollmentKeyNameExistsError, EnrollmentKeyNotFoundError } import { ENROLLMENT_API_KEYS_INDEX } from '../../constants'; import { agentPolicyService } from '../agent_policy'; import { escapeSearchQueryPhrase } from '../saved_object'; - import { auditLoggingService } from '../audit_logging'; - +import { _joinFilters } from '../agents'; import { appContextService } from '../app_context'; import { invalidateAPIKeys } from './security'; @@ -38,10 +37,38 @@ export async function listEnrollmentApiKeys( kuery?: string; query?: ReturnType; showInactive?: boolean; + spaceId?: string; } ): Promise<{ items: EnrollmentAPIKey[]; total: any; page: any; perPage: any }> { - const { page = 1, perPage = 20, kuery } = options; - const query = options.query ?? (kuery && toElasticsearchQuery(fromKueryExpression(kuery))); + const { page = 1, perPage = 20, kuery, spaceId } = options; + // const query = options.query ?? (kuery && toElasticsearchQuery(fromKueryExpression(kuery))); + + let query: ReturnType | undefined; + if (options.query && spaceId) { + throw new Error('not implemented (query should only be used in Fleet internal usage)'); + } + if (!options.query) { + const filters: string[] = []; + + if (kuery) { + filters.push(kuery); + } + + const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; + if (useSpaceAwareness && spaceId) { + if (spaceId === DEFAULT_SPACE_ID) { + // TODO use constant + filters.push(`namespaces:"${DEFAULT_SPACE_ID}" or not namespaces:*`); + } else { + filters.push(`namespaces:"${spaceId}"`); + } + } + + const kueryNode = _joinFilters(filters); + query = kueryNode ? toElasticsearchQuery(kueryNode) : undefined; + } else { + query = options.query; + } const res = await esClient.search>({ index: ENROLLMENT_API_KEYS_INDEX, @@ -80,7 +107,8 @@ export async function hasEnrollementAPIKeysForPolicy( export async function getEnrollmentAPIKey( esClient: ElasticsearchClient, - id: string + id: string, + spaceId?: string ): Promise { try { const body = await esClient.get({ @@ -88,6 +116,16 @@ export async function getEnrollmentAPIKey( id, }); + if (spaceId) { + if (spaceId === DEFAULT_SPACE_ID) { + if (body._source?.namespaces && !body._source?.namespaces.includes(DEFAULT_SPACE_ID)) { + throw new EnrollmentKeyNotFoundError(`Enrollment api key ${id} not found in namespace`); + } + } else if (!body._source?.namespaces?.includes(spaceId)) { + throw new EnrollmentKeyNotFoundError(`Enrollment api key ${id} not found in namespace`); + } + } + // @ts-expect-error esDocToEnrollmentApiKey doesn't accept optional _source return esDocToEnrollmentApiKey(body); } catch (e) { @@ -106,12 +144,13 @@ export async function getEnrollmentAPIKey( export async function deleteEnrollmentApiKey( esClient: ElasticsearchClient, id: string, - forceDelete = false + forceDelete = false, + spaceId?: string ) { const logger = appContextService.getLogger(); logger.debug(`Deleting enrollment API key ${id}`); - const enrollmentApiKey = await getEnrollmentAPIKey(esClient, id); + const enrollmentApiKey = await getEnrollmentAPIKey(esClient, id, spaceId); auditLoggingService.writeCustomAuditLog({ message: `User deleting enrollment API key [id=${enrollmentApiKey.id}] [api_key_id=${enrollmentApiKey.api_key_id}]`, diff --git a/x-pack/plugins/fleet/server/services/app_context.ts b/x-pack/plugins/fleet/server/services/app_context.ts index 533b57f6f7653..9770d6a696e85 100644 --- a/x-pack/plugins/fleet/server/services/app_context.ts +++ b/x-pack/plugins/fleet/server/services/app_context.ts @@ -22,6 +22,7 @@ import type { PluginStart as DataPluginStart } from '@kbn/data-plugin/server'; import type { EncryptedSavedObjectsClient, EncryptedSavedObjectsPluginSetup, + EncryptedSavedObjectsPluginStart, } from '@kbn/encrypted-saved-objects-plugin/server'; import type { SecurityPluginStart, SecurityPluginSetup } from '@kbn/security-plugin/server'; @@ -47,14 +48,16 @@ import type { } from '../types'; import type { FleetAppContext } from '../plugin'; import type { TelemetryEventsSender } from '../telemetry/sender'; +import { UNINSTALL_TOKENS_SAVED_OBJECT_TYPE } from '../constants'; import type { MessageSigningServiceInterface } from '..'; -import type { BulkActionsResolver } from './agents'; -import type { UninstallTokenServiceInterface } from './security/uninstall_token_service'; +import type { BulkActionsResolver } from './agents/bulk_actions_resolver'; +import { type UninstallTokenServiceInterface } from './security/uninstall_token_service'; class AppContextService { private encryptedSavedObjects: EncryptedSavedObjectsClient | undefined; private encryptedSavedObjectsSetup: EncryptedSavedObjectsPluginSetup | undefined; + private encryptedSavedObjectsStart: EncryptedSavedObjectsPluginStart | undefined; private data: DataPluginStart | undefined; private esClient: ElasticsearchClient | undefined; private experimentalFeatures?: ExperimentalFeatures; @@ -80,6 +83,7 @@ class AppContextService { public start(appContext: FleetAppContext) { this.data = appContext.data; this.esClient = appContext.elasticsearch.client.asInternalUser; + this.encryptedSavedObjectsStart = appContext.encryptedSavedObjectsStart; this.encryptedSavedObjects = appContext.encryptedSavedObjectsStart?.getClient(); this.encryptedSavedObjectsSetup = appContext.encryptedSavedObjectsSetup; this.securitySetup = appContext.securitySetup; @@ -190,6 +194,7 @@ class AppContextService { // soClient as kibana internal users, be careful on how you use it, security is not enabled return appContextService.getSavedObjects().getScopedClient(request, { + includedHiddenTypes: [UNINSTALL_TOKENS_SAVED_OBJECT_TYPE], excludedExtensions: [SECURITY_EXTENSION_ID], }); } @@ -209,6 +214,7 @@ class AppContextService { // soClient as kibana internal users, be careful on how you use it, security is not enabled return appContextService.getSavedObjects().getScopedClient(request, { + includedHiddenTypes: [UNINSTALL_TOKENS_SAVED_OBJECT_TYPE], excludedExtensions: [SECURITY_EXTENSION_ID], }); } @@ -253,6 +259,10 @@ class AppContextService { return this.encryptedSavedObjectsSetup; } + public getEncryptedSavedObjectsStart() { + return this.encryptedSavedObjectsStart; + } + public getKibanaVersion() { return this.kibanaVersion; } diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts index b6dc2fb859d25..21caf5088f457 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts @@ -300,6 +300,9 @@ jest.mock('./app_context', () => ({ ), getUninstallTokenService: () => ({ generateTokenForPolicyId: jest.fn(), + scoped: jest.fn().mockReturnValue({ + generateTokenForPolicyId: jest.fn(), + }), }), getExternalCallbacks: jest.fn(), getCloud: jest.fn(), diff --git a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts index 944eab70d23c3..211026bf6e487 100644 --- a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts +++ b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts @@ -32,12 +32,11 @@ import type { import { isResponseError } from '@kbn/es-errors'; -import type { AgentPolicySOAttributes } from '../../../types'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import type { AgentPolicySOAttributes } from '../../../types'; import { UninstallTokenError } from '../../../../common/errors'; - import type { GetUninstallTokensMetadataResponse } from '../../../../common/types/rest_spec/uninstall_token'; - import type { UninstallToken, UninstallTokenMetadata, @@ -168,18 +167,37 @@ export interface UninstallTokenServiceInterface { * */ checkTokenValidityForAllPolicies(): Promise; + + scoped(spaceId?: string): UninstallTokenServiceInterface; } export class UninstallTokenService implements UninstallTokenServiceInterface { private _soClient: SavedObjectsClientContract | undefined; + private isScoped = false; + + constructor( + private esoClient: EncryptedSavedObjectsClient, + soClient?: SavedObjectsClientContract + ) { + if (soClient) { + this._soClient = soClient; + this.isScoped = true; + } + } - constructor(private esoClient: EncryptedSavedObjectsClient) {} + public scoped(spaceId?: string) { + return new UninstallTokenService( + this.esoClient, + appContextService.getInternalUserSOClientForSpaceId(spaceId) + ); + } public async getToken(id: string): Promise { - const filter = `${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.id: "${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:${id}"`; - + const namespacePrefix = this.soClient.getCurrentNamespace() + ? `${this.soClient.getCurrentNamespace()}:` + : ''; + const filter = `${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.id: "${namespacePrefix}${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:${id}"`; const tokenObjects = await this.getDecryptedTokenObjects({ filter }); - return tokenObjects.length === 1 ? this.convertTokenObjectToToken( await this.getPolicyIdNameDictionary([tokenObjects[0].attributes.policy_id]), @@ -262,8 +280,11 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { this.assertCreatedAt(_source.created_at); const policyId = _source[UNINSTALL_TOKENS_SAVED_OBJECT_TYPE].policy_id; + const namespacePrefix = this.soClient.getCurrentNamespace() + ? `${this.soClient.getCurrentNamespace()}:` + : ''; return { - id: _id.replace(`${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:`, ''), + id: _id.replace(`${namespacePrefix}${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:`, ''), policy_id: policyId, policy_name: policyIdNameDictionary[policyId] ?? null, created_at: _source.created_at, @@ -356,6 +377,9 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { { type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, perPage: SO_SEARCH_LIMIT, + namespaces: this.isScoped + ? [this.soClient.getCurrentNamespace() || DEFAULT_SPACE_ID] + : undefined, ...options, } ); @@ -401,7 +425,6 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { exclude?: AggregationsTermsExclude ): Promise>> { const bucketSize = 10000; - const query: SavedObjectsCreatePointInTimeFinderOptions = { type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, perPage: 0, @@ -451,7 +474,6 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { // sorting and paginating buckets is done here instead of ES, // because SO query doesn't support `bucket_sort` aggResults.sort((a, b) => getCreatedAt(b) - getCreatedAt(a)); - return aggResults.map((bucket) => bucket.latest.hits.hits[0]); } @@ -578,6 +600,9 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { await this.soClient.bulkCreate>( policyIdsBatch.map((policyId) => ({ type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, + initialNamespaces: this.soClient.getCurrentNamespace() + ? [this.soClient.getCurrentNamespace() as string] + : undefined, attributes: this.isEncryptionAvailable ? { policy_id: policyId, diff --git a/x-pack/plugins/fleet/server/types/request_context.ts b/x-pack/plugins/fleet/server/types/request_context.ts index bc0e1c8886bff..dac735c9a3ed1 100644 --- a/x-pack/plugins/fleet/server/types/request_context.ts +++ b/x-pack/plugins/fleet/server/types/request_context.ts @@ -17,6 +17,7 @@ import type { import type { FleetAuthz } from '../../common/authz'; import type { AgentClient } from '../services'; import type { PackagePolicyClient } from '../services/package_policy_service'; +import type { UninstallTokenServiceInterface } from '../services/security/uninstall_token_service'; /** @internal */ export type FleetRequestHandlerContext = CustomRequestHandlerContext<{ @@ -32,6 +33,9 @@ export type FleetRequestHandlerContext = CustomRequestHandlerContext<{ asCurrentUser: PackagePolicyClient; asInternalUser: PackagePolicyClient; }; + uninstallTokenService: { + asCurrentUser: UninstallTokenServiceInterface; + }; /** * Saved Objects client configured to use kibana_system privileges instead of end-user privileges. Should only be * used by routes that have additional privilege checks for authorization (such as requiring superuser). diff --git a/x-pack/plugins/fleet/server/types/rest_spec/health_check.ts b/x-pack/plugins/fleet/server/types/rest_spec/health_check.ts index 8199a1b2c815a..0a3ca309ddf51 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/health_check.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/health_check.ts @@ -9,6 +9,8 @@ import { schema } from '@kbn/config-schema'; export const PostHealthCheckRequestSchema = { body: schema.object({ - host: schema.uri({ scheme: ['http', 'https'] }), + id: schema.string(), + // deprecated + host: schema.maybe(schema.uri({ scheme: ['http', 'https'] })), }), }; diff --git a/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx b/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx index 9cebc018daa11..479c3e546dc9c 100644 --- a/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx +++ b/x-pack/plugins/global_search_bar/public/components/search_bar.test.tsx @@ -177,7 +177,7 @@ describe('SearchBar', () => { await focusAndUpdate(); expect(searchService.find).toHaveBeenCalledTimes(1); - // + simulateTypeChar('d'); await assertSearchResults(['Visualize • Kibana', 'Map • Kibana']); diff --git a/x-pack/plugins/integration_assistant/README.md b/x-pack/plugins/integration_assistant/README.md new file mode 100644 index 0000000000000..d05a0bf757c66 --- /dev/null +++ b/x-pack/plugins/integration_assistant/README.md @@ -0,0 +1,66 @@ +# Integration Assistant + +## Overview + +Team owner: Security Integrations Scalability + +This is a new Kibana plugin created to help users with automatically generating integration packages based on provided log samples and relevant information + +## Features + +Exposes 4 API's that can be consumed by any frontend plugin, which are: + +- ECS Mapping API +- Categorization API +- Related Fields API +- Build Integration API +- Optional Test Pipeline API (Used to update pipeline results if the ingest pipeline is changed by a user in the UI). + +## Development + +### Backend + +#### Overview + +The backend part of the plugin utilizes langraph extensively to parse the provided log samples and generate the integration package. + +One instance of langraph is created that will include one or more `nodes` in which each node represents a step in the integration package generation process. + +Each node links to a specific function, usually a `handler` specified in its own file under each graph folder that will be executed when the node is reached. + +#### Structure + +**Graphs** + +The graph components are split into logical parts and are placed in separate folders for each graph under the `./server/graphs` directory. + +Each graph folder needs to contains at least one `graph.ts`, which exports a function that returns the compiled graph object. + +Each exported graph function is then linked up to one or more API routes. + +**Routes** + +All routes are defined under `./server/routes` in its own file, and then included in the `./server/routes/register_routes.ts` file. + +**Integration Builder** + +The integration builder is the last step in the expected API flow (ECS Mapping -> Categorization -> Related Fields -> Integration Builder). +With the provided package and data stream details, an optional logo and a list of sample logs, the API will build out the entire folder structure and files required for the integration package, archive it and return it as a `Buffer`. + +**Templates** + +Currently the templates are stored as `nunjucks` files as they were converted from `jinja2` templates, which use the exact same format. Longer term this will most likely be switched to the Kibana forked Handlebars templating engine. + +The templates are stored in the `./server/templates` directory and are used to generate the integration package files while running the Integration Builder API. + +One template (pipeline.yml.njk) is used by the ECS Mapping API to generate the boilerplate ingest pipeline structure we want to use for all generated integrations. + +## Tests + +All mocks/fixtures are placed in the top `./__jest__` directory of the plugin. If many mocks/fixtures are required, try to split them up into separate file(s). + +Tests can be run with: + +```bash +node scripts/jest x-pack/plugins/integration_assistant/ --coverage +``` diff --git a/x-pack/plugins/integration_assistant/__jest__/fixtures/categorization.ts b/x-pack/plugins/integration_assistant/__jest__/fixtures/categorization.ts new file mode 100644 index 0000000000000..62fa18f5523c1 --- /dev/null +++ b/x-pack/plugins/integration_assistant/__jest__/fixtures/categorization.ts @@ -0,0 +1,289 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Pipeline } from '../../common'; + +export const categorizationInitialPipeline: Pipeline = { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.11.0', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], +}; + +export const categorizationExpectedResults = { + docs: [ + { + key: 'value', + anotherKey: 'anotherValue', + }, + ], + pipeline: { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.11.0', + }, + }, + { + append: { + field: 'event.type', + value: ['change'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], + }, +}; + +export const categorizationInitialMockedResponse = [ + { + append: { + field: 'event.type', + value: ['creation'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise.audit.general_data.sql_command == 'create_db'", + }, + }, +]; + +export const categorizationErrorMockedResponse = [ + { + append: { + field: 'event.type', + value: ['creation'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, +]; + +export const categorizationInvalidMockedResponse = [ + { + append: { + field: 'event.type', + value: ['change'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, +]; + +export const categorizationReviewMockedResponse = [ + { + append: { + field: 'event.type', + value: ['change'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, +]; + +export const testPipelineError: { pipelineResults: object[]; errors: object[] } = { + pipelineResults: [], + errors: [{ error: 'Sample error message 1' }, { error: 'Sample error message 2' }], +}; + +export const testPipelineValidResult: { pipelineResults: object[]; errors: object[] } = { + pipelineResults: [{ key: 'value', anotherKey: 'anotherValue' }], + errors: [], +}; + +export const testPipelineInvalidEcs: { pipelineResults: object[]; errors: object[] } = { + pipelineResults: [ + { event: { type: ['database'], category: ['creation'] }, anotherKey: 'anotherValue' }, + ], + errors: [], +}; + +export const categorizationTestState = { + rawSamples: ['{"test1": "test1"}'], + samples: ['{ "test1": "test1" }'], + formattedSamples: '{"test1": "test1"}', + ecsTypes: 'testtypes', + ecsCategories: 'testcategories', + exAnswer: 'testanswer', + lastExecutedChain: 'testchain', + packageName: 'testpackage', + dataStreamName: 'testdatastream', + errors: { test: 'testerror' }, + pipelineResults: [{ test: 'testresult' }], + finalized: false, + reviewed: false, + currentPipeline: { test: 'testpipeline' }, + currentProcessors: [ + { + append: { + field: 'event.type', + value: ['creation'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise.audit.general_data.sql_command == 'create_db'", + }, + }, + ], + invalidCategorization: { test: 'testinvalid' }, + initialPipeline: categorizationInitialPipeline, + results: { test: 'testresults' }, +}; + +export const categorizationMockProcessors = [ + { + append: { + field: 'event.type', + value: ['creation'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise.audit.general_data.sql_command == 'create_db'", + }, + }, +]; + +export const categorizationExpectedHandlerResponse = { + currentPipeline: { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.11.0', + }, + }, + { + append: { + field: 'event.type', + value: ['creation'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise.audit.general_data.sql_command == 'create_db'", + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], + }, + currentProcessors: [ + { + append: { + field: 'event.type', + value: ['creation'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise.audit.general_data.sql_command == 'create_db'", + }, + }, + ], + reviewed: false, + lastExecutedChain: 'error', +}; diff --git a/x-pack/plugins/integration_assistant/__jest__/fixtures/ecs_mapping.ts b/x-pack/plugins/integration_assistant/__jest__/fixtures/ecs_mapping.ts new file mode 100644 index 0000000000000..f0ae923def0ef --- /dev/null +++ b/x-pack/plugins/integration_assistant/__jest__/fixtures/ecs_mapping.ts @@ -0,0 +1,448 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export const ecsMappingExpectedResults = { + mapping: { + mysql_enterprise: { + audit: { + test_array: null, + timestamp: { + target: '@timestamp', + confidence: 0.99, + type: 'date', + date_formats: ['yyyy-MM-dd HH:mm:ss'], + }, + id: null, + class: null, + cpu_usage: { + target: 'host.cpu.usage', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + bytes: { + target: 'network.bytes', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + account: { + user: { + target: 'user.name', + type: 'string', + date_formats: [], + confidence: 1, + }, + ip: { + target: 'source.ip', + type: 'string', + date_formats: [], + confidence: 1, + }, + }, + event: { + target: 'event.action', + confidence: 0.8, + type: 'string', + date_formats: [], + }, + }, + }, + }, + pipeline: { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + tag: 'set_ecs_version', + value: '8.11.0', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + tag: 'rename_message', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'message', + ignore_missing: true, + tag: 'remove_message', + if: 'ctx.event?.original != null', + }, + }, + { + json: { + field: 'event.original', + tag: 'json_original', + target_field: 'mysql_enterprise.audit', + }, + }, + { + date: { + field: 'mysql_enterprise.audit.timestamp', + target_field: '@timestamp', + formats: ['yyyy-MM-dd HH:mm:ss'], + if: 'ctx.mysql_enterprise?.audit?.timestamp != null', + }, + }, + { + rename: { + field: 'mysql_enterprise.audit.cpu_usage', + target_field: 'host.cpu.usage', + ignore_missing: true, + }, + }, + { + rename: { + field: 'mysql_enterprise.audit.bytes', + target_field: 'network.bytes', + ignore_missing: true, + }, + }, + { + rename: { + field: 'mysql_enterprise.audit.account.user', + target_field: 'user.name', + ignore_missing: true, + }, + }, + { + convert: { + field: 'mysql_enterprise.audit.account.ip', + target_field: 'source.ip', + ignore_missing: true, + ignore_failure: true, + type: 'ip', + }, + }, + { + rename: { + field: 'mysql_enterprise.audit.event', + target_field: 'event.action', + ignore_missing: true, + }, + }, + { + script: { + description: 'Drops null/empty values recursively.', + tag: 'script_drop_null_empty_values', + lang: 'painless', + source: + 'boolean dropEmptyFields(Object object) {\n if (object == null || object == "") {\n return true;\n } else if (object instanceof Map) {\n ((Map) object).values().removeIf(value -> dropEmptyFields(value));\n return (((Map) object).size() == 0);\n } else if (object instanceof List) {\n ((List) object).removeIf(value -> dropEmptyFields(value));\n return (((List) object).length == 0);\n }\n return false;\n}\ndropEmptyFields(ctx);\n', + }, + }, + { + geoip: { + field: 'source.ip', + tag: 'geoip_source_ip', + target_field: 'source.geo', + ignore_missing: true, + }, + }, + { + geoip: { + ignore_missing: true, + database_file: 'GeoLite2-ASN.mmdb', + field: 'source.ip', + tag: 'geoip_source_asn', + target_field: 'source.as', + properties: ['asn', 'organization_name'], + }, + }, + { + rename: { + field: 'source.as.asn', + tag: 'rename_source_as_asn', + target_field: 'source.as.number', + ignore_missing: true, + }, + }, + { + rename: { + field: 'source.as.organization_name', + tag: 'rename_source_as_organization_name', + target_field: 'source.as.organization.name', + ignore_missing: true, + }, + }, + { + geoip: { + field: 'destination.ip', + tag: 'geoip_destination_ip', + target_field: 'destination.geo', + ignore_missing: true, + }, + }, + { + geoip: { + database_file: 'GeoLite2-ASN.mmdb', + field: 'destination.ip', + tag: 'geoip_destination_asn', + target_field: 'destination.as', + properties: ['asn', 'organization_name'], + ignore_missing: true, + }, + }, + { + rename: { + field: 'destination.as.asn', + tag: 'rename_destination_as_asn', + target_field: 'destination.as.number', + ignore_missing: true, + }, + }, + { + rename: { + field: 'destination.as.organization_name', + tag: 'rename_destination_as_organization_name', + target_field: 'destination.as.organization.name', + ignore_missing: true, + }, + }, + { + remove: { + field: ['mysql_enterprise.audit.account.ip'], + ignore_missing: true, + tag: 'remove_fields', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], + on_failure: [ + { + append: { + field: 'error.message', + value: + 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}', + }, + }, + { + set: { + field: 'event.kind', + value: 'pipeline_error', + }, + }, + ], + }, +}; + +export const ecsInitialMappingMockedResponse = { + mysql_enterprise: { + audit: { + test_array: null, + timestamp: { + target: 'event.action', + confidence: 0.99, + type: 'string', + date_formats: ['yyyy-MM-dd HH:mm:ss'], + }, + class: null, + id: { + target: 'file.code_signature.trusted', + confidence: 0.99, + type: 'boolean', + date_formats: [], + }, + cpu_usage: { + target: 'host.cpu.usage', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + bytes: { + target: 'network.bytes', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + account: { + user: { + target: 'user.name', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + ip: { + target: 'source.ip', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + }, + event: { + target: 'event.action', + confidence: 0.8, + type: 'string', + date_formats: [], + }, + }, + }, +}; + +export const ecsDuplicateMockedResponse = { + mysql_enterprise: { + audit: { + test_array: null, + timestamp: { + target: '@timestamp', + confidence: 0.99, + type: 'date', + date_formats: ['yyyy-MM-dd HH:mm:ss'], + }, + id: null, + bytes: { + target: 'network.bytes', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + account: { + user: { + target: 'user.name', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + ip: { + target: 'source.ip', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + }, + }, + }, +}; + +export const ecsMissingKeysMockedResponse = { + mysql_enterprise: { + audit: { + test_array: null, + timestamp: { + target: '@timestamp', + confidence: 0.99, + type: 'date', + date_formats: ['yyyy-MM-dd HH:mm:ss'], + }, + id: null, + class: null, + cpu_usage: { + target: 'host.cpu.usage', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + bytes: { + target: 'network.bytes', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + account: { + user: { + target: 'user.name', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + ip: { + target: 'source.ip', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + }, + event: { + target: 'invalid.ecs.field', + confidence: 0.8, + type: 'string', + date_formats: [], + }, + }, + }, +}; + +export const ecsInvalidMappingMockedResponse = { + mysql_enterprise: { + audit: { + test_array: null, + timestamp: { + target: '@timestamp', + confidence: 0.99, + type: 'date', + date_formats: ['yyyy-MM-dd HH:mm:ss'], + }, + id: null, + class: null, + cpu_usage: { + target: 'host.cpu.usage', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + bytes: { + target: 'network.bytes', + confidence: 0.99, + type: 'number', + date_formats: [], + }, + account: { + user: { + target: 'user.name', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + ip: { + target: 'source.ip', + type: 'string', + date_formats: [], + confidence: 1.0, + }, + }, + event: { + target: 'event.action', + confidence: 0.8, + type: 'string', + date_formats: [], + }, + }, + }, +}; + +export const ecsTestState = { + ecs: 'teststring', + exAnswer: 'testanswer', + finalized: false, + currentPipeline: { test: 'testpipeline' }, + duplicateFields: [], + missingKeys: [], + invalidEcsFields: [], + results: { test: 'testresults' }, + logFormat: 'testlogformat', + ecsVersion: 'testversion', + currentMapping: { test1: 'test1' }, + lastExecutedChain: 'testchain', + rawSamples: ['{"test1": "test1"}'], + samples: ['{ "test1": "test1" }'], + packageName: 'testpackage', + dataStreamName: 'testdatastream', + formattedSamples: '{"test1": "test1"}', +}; diff --git a/x-pack/plugins/integration_assistant/__jest__/fixtures/index.ts b/x-pack/plugins/integration_assistant/__jest__/fixtures/index.ts new file mode 100644 index 0000000000000..7e3e155e67b8a --- /dev/null +++ b/x-pack/plugins/integration_assistant/__jest__/fixtures/index.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { Pipeline } from '../../common'; +const currentPipelineMock: Pipeline = { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.11.0', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], +}; + +export const mockedRequest = { + rawSamples: [ + '{ "timestamp": "2020-10-19 19:31:31", "cpu_usage": 0.1, "class": "general", "event": "status", "test_array": ["test1", "test2"]}', + '{ "timestamp": "2020-10-19 19:32:10", "cpu_usage": 0.2, "class": "connection", "event": "disconnect", "bytes": 16, "account": { "user": "audit_test_user2", "ip": "10.10.10.10" }}', + ], + packageName: 'mysql_enterprise', + dataStreamName: 'audit', +}; + +export const mockedRequestWithPipeline = { + rawSamples: [ + '{ "timestamp": "2020-10-19 19:31:31", "cpu_usage": 0.1, "class": "general", "event": "status", "test_array": ["test1", "test2"]}', + '{ "timestamp": "2020-10-19 19:32:10", "cpu_usage": 0.2, "class": "connection", "event": "disconnect", "bytes": 16, "account": { "user": "audit_test_user2", "ip": "10.10.10.10" }}', + ], + packageName: 'mysql_enterprise', + dataStreamName: 'audit', + currentPipeline: currentPipelineMock, +}; diff --git a/x-pack/plugins/integration_assistant/__jest__/fixtures/related.ts b/x-pack/plugins/integration_assistant/__jest__/fixtures/related.ts new file mode 100644 index 0000000000000..f34133a4f520f --- /dev/null +++ b/x-pack/plugins/integration_assistant/__jest__/fixtures/related.ts @@ -0,0 +1,277 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Pipeline } from '../../common'; + +export const relatedInitialPipeline: Pipeline = { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.11.0', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], +}; + +export const relatedExpectedResults = { + docs: [ + { + key: 'value', + anotherKey: 'anotherValue', + }, + ], + pipeline: { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.11.0', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{source.ip}}}'], + allow_duplicates: false, + if: 'ctx.source?.ip != null', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{destination.ip}}}'], + allow_duplicates: false, + if: 'ctx.destination?.ip != null', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], + }, +}; + +export const relatedInitialMockedResponse = [ + { + append: { + field: 'related.ip', + value: ['{{{source.ip}?.split(":")[0]}}'], + allow_duplicates: false, + if: 'ctx.source?.ip != null', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{destination.ip}}}'], + allow_duplicates: false, + if: 'ctx.destination?.ip != null', + }, + }, +]; + +export const relatedErrorMockedResponse = [ + { + append: { + field: 'related.ip', + value: ['{{{source.ip}}}'], + allow_duplicates: false, + if: 'ctx.source?.ip != null', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{destination.ip}}}'], + allow_duplicates: false, + if: 'ctx.destination?.ip != null', + }, + }, +]; + +export const relatedReviewMockedResponse = [ + { + append: { + field: 'related.ip', + value: ['{{{source.ip}}}'], + allow_duplicates: false, + if: 'ctx.source?.ip != null', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{destination.ip}}}'], + allow_duplicates: false, + if: 'ctx.destination?.ip != null', + }, + }, +]; + +export const testPipelineError: { pipelineResults: object[]; errors: object[] } = { + pipelineResults: [], + errors: [{ error: 'Sample error message 1' }, { error: 'Sample error message 2' }], +}; + +export const testPipelineValidResult: { pipelineResults: object[]; errors: object[] } = { + pipelineResults: [{ key: 'value', anotherKey: 'anotherValue' }], + errors: [], +}; + +export const relatedTestState = { + rawSamples: ['{"test1": "test1"}'], + samples: ['{ "test1": "test1" }'], + formattedSamples: '{"test1": "test1"}', + ecs: 'testtypes', + exAnswer: 'testanswer', + packageName: 'testpackage', + dataStreamName: 'testdatastream', + errors: { test: 'testerror' }, + pipelineResults: [{ test: 'testresult' }], + finalized: false, + reviewed: false, + currentPipeline: { test: 'testpipeline' }, + currentProcessors: [ + { + append: { + field: 'related.ip', + value: ['{{{source.ip}?.split(":")[0]}}'], + allow_duplicates: false, + if: 'ctx.source?.ip != null', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{destination.ip}}}'], + allow_duplicates: false, + if: 'ctx.destination?.ip != null', + }, + }, + ], + initialPipeline: relatedInitialPipeline, + results: { test: 'testresults' }, + lastExecutedChain: 'testchain', +}; + +export const relatedMockProcessors = [ + { + append: { + field: 'related.ip', + value: ['{{{source.ip}?.split(":")[0]}}'], + allow_duplicates: false, + if: 'ctx.source?.ip != null', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{destination.ip}}}'], + allow_duplicates: false, + if: 'ctx.destination?.ip != null', + }, + }, +]; + +export const relatedExpectedHandlerResponse = { + currentPipeline: { + description: 'Pipeline to process mysql_enterprise audit logs', + processors: [ + { + set: { + field: 'ecs.version', + value: '8.11.0', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{source.ip}?.split(":")[0]}}'], + allow_duplicates: false, + if: 'ctx.source?.ip != null', + }, + }, + { + append: { + field: 'related.ip', + value: ['{{{destination.ip}}}'], + allow_duplicates: false, + if: 'ctx.destination?.ip != null', + }, + }, + { + rename: { + field: 'message', + target_field: 'event.original', + ignore_missing: true, + if: 'ctx.event?.original == null', + }, + }, + { + remove: { + field: 'event.original', + tag: 'remove_original_event', + if: 'ctx?.tags == null || !(ctx.tags.contains("preserve_original_event"))', + ignore_failure: true, + ignore_missing: true, + }, + }, + ], + }, + currentProcessors: [ + { + append: { + field: 'event.type', + value: ['creation'], + if: "ctx.mysql_enterprise?.audit?.general_data?.sql_command == 'create_db'", + }, + }, + { + append: { + field: 'event.category', + value: ['database'], + if: "ctx.mysql_enterprise.audit.general_data.sql_command == 'create_db'", + }, + }, + ], + reviewed: false, + lastExecutedChain: 'error', +}; diff --git a/x-pack/plugins/integration_assistant/common/constants.ts b/x-pack/plugins/integration_assistant/common/constants.ts new file mode 100644 index 0000000000000..59b0a2cd9b094 --- /dev/null +++ b/x-pack/plugins/integration_assistant/common/constants.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// Plugin information +export const PLUGIN_ID = 'integrationAssistant'; + +// Public App Routes +export const INTEGRATION_ASSISTANT_APP_ROUTE = '/app/integration_assistant'; + +// Server API Routes +export const INTEGRATION_ASSISTANT_BASE_PATH = '/api/integration_assistant'; +export const ECS_GRAPH_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/ecs`; +export const CATEGORIZATION_GRAPH_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/categorization`; +export const RELATED_GRAPH_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/related`; +export const INTEGRATION_BUILDER_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/build`; +export const TEST_PIPELINE_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/pipeline`; diff --git a/x-pack/plugins/integration_assistant/common/ecs.ts b/x-pack/plugins/integration_assistant/common/ecs.ts new file mode 100644 index 0000000000000..bdc2b885febe1 --- /dev/null +++ b/x-pack/plugins/integration_assistant/common/ecs.ts @@ -0,0 +1,1950 @@ +/* + * Copyright 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. + */ + +interface EcsFields { + [key: string]: string; +} + +export const ECS_FULL: EcsFields = { + '@timestamp': 'Date/time when the event originated.', + 'agent.build.original': 'Extended build information for the agent.', + 'agent.ephemeral_id': 'Ephemeral identifier of this agent.', + 'agent.id': 'Unique identifier of this agent.', + 'agent.name': 'Custom name of the agent.', + 'agent.type': 'Type of the agent.', + 'agent.version': 'Version of the agent.', + 'client.address': 'Client network address.', + 'client.as.number': 'Unique number allocated to the autonomous system.', + 'client.as.organization.name': 'Organization name.', + 'client.bytes': 'Bytes sent from the client to the server.', + 'client.domain': 'The domain name of the client.', + 'client.geo.city_name': 'City name.', + 'client.geo.continent_code': 'Continent code.', + 'client.geo.continent_name': 'Name of the continent.', + 'client.geo.country_iso_code': 'Country ISO code.', + 'client.geo.country_name': 'Country name.', + 'client.geo.location': 'Longitude and latitude.', + 'client.geo.name': 'User-defined description of a location.', + 'client.geo.postal_code': 'Postal code.', + 'client.geo.region_iso_code': 'Region ISO code.', + 'client.geo.region_name': 'Region name.', + 'client.geo.timezone': 'Time zone.', + 'client.ip': 'IP address of the client.', + 'client.mac': 'MAC address of the client.', + 'client.nat.ip': 'Client NAT ip address', + 'client.nat.port': 'Client NAT port', + 'client.packets': 'Packets sent from the client to the server.', + 'client.port': 'Port of the client.', + 'client.registered_domain': 'The highest registered client domain, stripped of the subdomain.', + 'client.subdomain': 'The subdomain of the domain.', + 'client.top_level_domain': 'The effective top level domain (com, org, net, co.uk).', + 'client.user.domain': 'Name of the directory the user is a member of.', + 'client.user.email': 'User email address.', + 'client.user.full_name': 'Users full name, if available.', + 'client.user.group.domain': 'Name of the directory the group is a member of.', + 'client.user.group.id': 'Unique identifier for the group on the system/platform.', + 'client.user.group.name': 'Name of the group.', + 'client.user.hash': 'Unique user hash to correlate information for a user in anonymized form.', + 'client.user.id': 'Unique identifier of the user.', + 'client.user.name': 'Short name or login of the user.', + 'client.user.roles': 'Array of user roles at the time of the event.', + 'cloud.account.id': 'The cloud account or organization id.', + 'cloud.account.name': 'The cloud account name.', + 'cloud.availability_zone': + 'Availability zone in which this host, resource, or service is located.', + 'cloud.instance.id': 'Instance ID of the host machine.', + 'cloud.instance.name': 'Instance name of the host machine.', + 'cloud.machine.type': 'Machine type of the host machine.', + 'cloud.origin.account.id': 'The cloud account or organization id.', + 'cloud.origin.account.name': 'The cloud account name.', + 'cloud.origin.availability_zone': + 'Availability zone in which this host, resource, or service is located.', + 'cloud.origin.instance.id': 'Instance ID of the host machine.', + 'cloud.origin.instance.name': 'Instance name of the host machine.', + 'cloud.origin.machine.type': 'Machine type of the host machine.', + 'cloud.origin.project.id': 'The cloud project id.', + 'cloud.origin.project.name': 'The cloud project name.', + 'cloud.origin.provider': 'Name of the cloud provider.', + 'cloud.origin.region': 'Region in which this host, resource, or service is located.', + 'cloud.origin.service.name': 'The cloud service name.', + 'cloud.project.id': 'The cloud project id.', + 'cloud.project.name': 'The cloud project name.', + 'cloud.provider': 'Name of the cloud provider.', + 'cloud.region': 'Region in which this host, resource, or service is located.', + 'cloud.service.name': 'The cloud service name.', + 'cloud.target.account.id': 'The cloud account or organization id.', + 'cloud.target.account.name': 'The cloud account name.', + 'cloud.target.availability_zone': + 'Availability zone in which this host, resource, or service is located.', + 'cloud.target.instance.id': 'Instance ID of the host machine.', + 'cloud.target.instance.name': 'Instance name of the host machine.', + 'cloud.target.machine.type': 'Machine type of the host machine.', + 'cloud.target.project.id': 'The cloud project id.', + 'cloud.target.project.name': 'The cloud project name.', + 'cloud.target.provider': 'Name of the cloud provider.', + 'cloud.target.region': 'Region in which this host, resource, or service is located.', + 'cloud.target.service.name': 'The cloud service name.', + 'container.cpu.usage': 'Percent CPU used, between 0 and 1.', + 'container.disk.read.bytes': 'The number of bytes read by all disks.', + 'container.disk.write.bytes': 'The number of bytes written on all disks.', + 'container.id': 'Unique container id.', + 'container.image.hash.all': 'An array of digests of the image the container was built on.', + 'container.image.name': 'Name of the image the container was built on.', + 'container.image.tag': 'Container image tags.', + 'container.labels': 'Image labels.', + 'container.memory.usage': 'Percent memory used, between 0 and 1.', + 'container.name': 'Container name.', + 'container.network.egress.bytes': 'The number of bytes sent on all network interfaces.', + 'container.network.ingress.bytes': 'The number of bytes received on all network interfaces.', + 'container.runtime': 'Runtime managing this container.', + 'container.security_context.privileged': + 'Indicates whether the container is running in privileged mode.', + 'data_stream.dataset': + 'The field can contain anything that makes sense to signify the source of the data.', + 'data_stream.namespace': + 'A user defined namespace. Namespaces are useful to allow grouping of data.', + 'data_stream.type': 'An overarching type for the data stream.', + 'destination.address': 'Destination network address.', + 'destination.as.number': 'Unique number allocated to the autonomous system.', + 'destination.as.organization.name': 'Organization name.', + 'destination.bytes': 'Bytes sent from the destination to the source.', + 'destination.domain': 'The domain name of the destination.', + 'destination.geo.city_name': 'City name.', + 'destination.geo.continent_code': 'Continent code.', + 'destination.geo.continent_name': 'Name of the continent.', + 'destination.geo.country_iso_code': 'Country ISO code.', + 'destination.geo.country_name': 'Country name.', + 'destination.geo.location': 'Longitude and latitude.', + 'destination.geo.name': 'User-defined description of a location.', + 'destination.geo.postal_code': 'Postal code.', + 'destination.geo.region_iso_code': 'Region ISO code.', + 'destination.geo.region_name': 'Region name.', + 'destination.geo.timezone': 'Time zone.', + 'destination.ip': 'IP address of the destination.', + 'destination.mac': 'MAC address of the destination.', + 'destination.nat.ip': 'Destination NAT ip', + 'destination.nat.port': 'Destination NAT Port', + 'destination.packets': 'Packets sent from the destination to the source.', + 'destination.port': 'Port of the destination.', + 'destination.registered_domain': + 'The highest registered destination domain, stripped of the subdomain.', + 'destination.subdomain': 'The subdomain of the domain.', + 'destination.top_level_domain': 'The effective top level domain (com, org, net, co.uk).', + 'destination.user.domain': 'Name of the directory the user is a member of.', + 'destination.user.email': 'User email address.', + 'destination.user.full_name': 'Users full name, if available.', + 'destination.user.group.domain': 'Name of the directory the group is a member of.', + 'destination.user.group.id': 'Unique identifier for the group on the system/platform.', + 'destination.user.group.name': 'Name of the group.', + 'destination.user.hash': + 'Unique user hash to correlate information for a user in anonymized form.', + 'destination.user.id': 'Unique identifier of the user.', + 'destination.user.name': 'Short name or login of the user.', + 'destination.user.roles': 'Array of user roles at the time of the event.', + 'device.id': 'The unique identifier of a device.', + 'device.manufacturer': 'The vendor name of the device manufacturer.', + 'device.model.identifier': 'The machine readable identifier of the device model.', + 'device.model.name': 'The human readable marketing name of the device model.', + 'dll.code_signature.digest_algorithm': 'Hashing algorithm used to sign the process.', + 'dll.code_signature.exists': 'Boolean to capture if a signature is present.', + 'dll.code_signature.signing_id': 'The identifier used to sign the process.', + 'dll.code_signature.status': 'Additional information about the certificate status.', + 'dll.code_signature.subject_name': 'Subject name of the code signer', + 'dll.code_signature.team_id': 'The team identifier used to sign the process.', + 'dll.code_signature.timestamp': 'When the signature was generated and signed.', + 'dll.code_signature.trusted': 'Stores the trust status of the certificate chain.', + 'dll.code_signature.valid': + 'Boolean to capture if the digital signature is verified against the binary content.', + 'dll.hash.md5': 'MD5 hash.', + 'dll.hash.sha1': 'SHA1 hash.', + 'dll.hash.sha256': 'SHA256 hash.', + 'dll.hash.sha384': 'SHA384 hash.', + 'dll.hash.sha512': 'SHA512 hash.', + 'dll.hash.ssdeep': 'SSDEEP hash.', + 'dll.hash.tlsh': 'TLSH hash.', + 'dll.name': 'Name of the library.', + 'dll.path': 'Full file path of the library.', + 'dll.pe.architecture': 'CPU architecture target for the file.', + 'dll.pe.company': 'Internal company name of the file, provided at compile-time.', + 'dll.pe.description': 'Internal description of the file, provided at compile-time.', + 'dll.pe.file_version': 'Process name.', + 'dll.pe.go_import_hash': 'A hash of the Go language imports in a PE file.', + 'dll.pe.go_imports': 'List of imported Go language element names and types.', + 'dll.pe.go_imports_names_entropy': 'Shannon entropy calculation from the list of Go imports.', + 'dll.pe.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'dll.pe.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'dll.pe.imphash': 'A hash of the imports in a PE file.', + 'dll.pe.import_hash': 'A hash of the imports in a PE file.', + 'dll.pe.imports': 'List of imported element names and types.', + 'dll.pe.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'dll.pe.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'dll.pe.original_file_name': 'Internal name of the file, provided at compile-time.', + 'dll.pe.pehash': 'A hash of the PE header and data from one or more PE sections.', + 'dll.pe.product': 'Internal product name of the file, provided at compile-time.', + 'dll.pe.sections': 'Section information of the PE file.', + 'dll.pe.sections.entropy': 'Shannon entropy calculation from the section.', + 'dll.pe.sections.name': 'PE Section List name.', + 'dll.pe.sections.physical_size': 'PE Section List physical size.', + 'dll.pe.sections.var_entropy': 'Variance for Shannon entropy calculation from the section.', + 'dll.pe.sections.virtual_size': + 'PE Section List virtual size. This is always the same as `physical_size`.', + 'dns.answers': 'Array of DNS answers.', + 'dns.answers.class': 'The class of DNS data contained in this resource record.', + 'dns.answers.data': 'The data describing the resource.', + 'dns.answers.name': 'The domain name to which this resource record pertains.', + 'dns.answers.ttl': + 'The time interval in seconds that this resource record may be cached before it should be discarded.', + 'dns.answers.type': 'The type of data contained in this resource record.', + 'dns.header_flags': 'Array of DNS header flags.', + 'dns.id': + 'The DNS packet identifier assigned by the program that generated the query. The identifier is copied to the response.', + 'dns.op_code': 'The DNS operation code that specifies the kind of query in the message.', + 'dns.question.class': 'The class of records being queried.', + 'dns.question.name': 'The name being queried.', + 'dns.question.registered_domain': 'The highest registered domain, stripped of the subdomain.', + 'dns.question.subdomain': 'The subdomain of the domain.', + 'dns.question.top_level_domain': 'The effective top level domain (com, org, net, co.uk).', + 'dns.question.type': 'The type of record being queried.', + 'dns.resolved_ip': 'Array containing all IPs seen in answers.data', + 'dns.response_code': 'The DNS response code.', + 'dns.type': 'The type of DNS event captured, query or answer.', + 'ecs.version': 'ECS version this event conforms to.', + 'email.attachments': 'List of objects describing the attachments.', + 'email.attachments.file.extension': 'Attachment file extension.', + 'email.attachments.file.hash.md5': 'MD5 hash.', + 'email.attachments.file.hash.sha1': 'SHA1 hash.', + 'email.attachments.file.hash.sha256': 'SHA256 hash.', + 'email.attachments.file.hash.sha384': 'SHA384 hash.', + 'email.attachments.file.hash.sha512': 'SHA512 hash.', + 'email.attachments.file.hash.ssdeep': 'SSDEEP hash.', + 'email.attachments.file.hash.tlsh': 'TLSH hash.', + 'email.attachments.file.mime_type': 'MIME type of the attachment file.', + 'email.attachments.file.name': 'Name of the attachment file.', + 'email.attachments.file.size': 'Attachment file size.', + 'email.bcc.address': 'Email address of BCC recipient', + 'email.cc.address': 'Email address of CC recipient', + 'email.content_type': 'MIME type of the email message.', + 'email.delivery_timestamp': 'Date and time when message was delivered.', + 'email.direction': 'Direction of the message.', + 'email.from.address': 'The senders email address.', + 'email.local_id': 'Unique identifier given by the source.', + 'email.message_id': 'Value from the Message-ID header.', + 'email.origination_timestamp': 'Date and time the email was composed.', + 'email.reply_to.address': 'Address replies should be delivered to.', + 'email.sender.address': 'Address of the message sender.', + 'email.subject': 'The subject of the email message.', + 'email.to.address': 'Email address of recipient', + 'email.x_mailer': 'Application that drafted email.', + 'error.code': 'Error code describing the error.', + 'error.id': 'Unique identifier for the error.', + 'error.message': 'Error message.', + 'error.stack_trace': 'The stack trace of this error in plain text.', + 'error.type': 'The type of the error, for example the class name of the exception.', + 'event.action': 'The action captured by the event.', + 'event.agent_id_status': 'Validation status of the events agent.id field.', + 'event.category': 'Event category. The second categorization field in the hierarchy.', + 'event.code': 'Identification code for this event.', + 'event.created': 'Time when the event was first read by an agent or by your pipeline.', + 'event.dataset': 'Name of the dataset.', + 'event.duration': 'Duration of the event in nanoseconds.', + 'event.end': + '`event.end` contains the date when the event ended or when the activity was last observed.', + 'event.hash': + 'Hash (perhaps logstash fingerprint) of raw field to be able to demonstrate log integrity.', + 'event.id': 'Unique ID to describe the event.', + 'event.ingested': 'Timestamp when an event arrived in the central data store.', + 'event.kind': 'The kind of the event. The highest categorization field in the hierarchy.', + 'event.module': 'Name of the module this data is coming from.', + 'event.original': 'Raw text message of entire event.', + 'event.outcome': + 'The outcome of the event. The lowest level categorization field in the hierarchy.', + 'event.provider': 'Source of the event.', + 'event.reason': 'Reason why this event happened, according to the source', + 'event.reference': 'Event reference URL', + 'event.risk_score': + 'Risk score or priority of the event (e.g. security solutions). Use your systems original value here.', + 'event.risk_score_norm': 'Normalized risk score or priority of the event (0-100).', + 'event.sequence': 'Sequence number of the event.', + 'event.severity': 'Numeric severity of the event.', + 'event.start': + '`event.start` contains the date when the event started or when the activity was first observed.', + 'event.timezone': 'Event time zone.', + 'event.type': 'Event type. The third categorization field in the hierarchy.', + 'event.url': 'Event investigation URL', + 'faas.coldstart': 'Boolean value indicating a cold start of a function.', + 'faas.execution': 'The execution ID of the current function execution.', + 'faas.id': 'The unique identifier of a serverless function.', + 'faas.name': 'The name of a serverless function.', + 'faas.trigger.request_id': 'The ID of the trigger request , message, event, etc.', + 'faas.trigger.type': 'The trigger for the function execution.', + 'faas.version': 'The version of a serverless function.', + 'file.accessed': 'Last time the file was accessed.', + 'file.attributes': 'Array of file attributes.', + 'file.code_signature.digest_algorithm': 'Hashing algorithm used to sign the process.', + 'file.code_signature.exists': 'Boolean to capture if a signature is present.', + 'file.code_signature.signing_id': 'The identifier used to sign the process.', + 'file.code_signature.status': 'Additional information about the certificate status.', + 'file.code_signature.subject_name': 'Subject name of the code signer', + 'file.code_signature.team_id': 'The team identifier used to sign the process.', + 'file.code_signature.timestamp': 'When the signature was generated and signed.', + 'file.code_signature.trusted': 'Stores the trust status of the certificate chain.', + 'file.code_signature.valid': + 'Boolean to capture if the digital signature is verified against the binary content.', + 'file.created': 'File creation time.', + 'file.ctime': 'Last time the file attributes or metadata changed.', + 'file.device': 'Device that is the source of the file.', + 'file.directory': 'Directory where the file is located.', + 'file.drive_letter': 'Drive letter where the file is located.', + 'file.elf.architecture': 'Machine architecture of the ELF file.', + 'file.elf.byte_order': 'Byte sequence of ELF file.', + 'file.elf.cpu_type': 'CPU type of the ELF file.', + 'file.elf.creation_date': 'Build or compile date.', + 'file.elf.exports': 'List of exported element names and types.', + 'file.elf.go_import_hash': 'A hash of the Go language imports in an ELF file.', + 'file.elf.go_imports': 'List of imported Go language element names and types.', + 'file.elf.go_imports_names_entropy': 'Shannon entropy calculation from the list of Go imports.', + 'file.elf.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'file.elf.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'file.elf.header.abi_version': 'Version of the ELF Application Binary Interface (ABI).', + 'file.elf.header.class': 'Header class of the ELF file.', + 'file.elf.header.data': 'Data table of the ELF header.', + 'file.elf.header.entrypoint': 'Header entrypoint of the ELF file.', + 'file.elf.header.object_version': '"0x1" for original ELF files.', + 'file.elf.header.os_abi': 'Application Binary Interface (ABI) of the Linux OS.', + 'file.elf.header.type': 'Header type of the ELF file.', + 'file.elf.header.version': 'Version of the ELF header.', + 'file.elf.import_hash': 'A hash of the imports in an ELF file.', + 'file.elf.imports': 'List of imported element names and types.', + 'file.elf.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'file.elf.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'file.elf.sections': 'Section information of the ELF file.', + 'file.elf.sections.chi2': 'Chi-square probability distribution of the section.', + 'file.elf.sections.entropy': 'Shannon entropy calculation from the section.', + 'file.elf.sections.flags': 'ELF Section List flags.', + 'file.elf.sections.name': 'ELF Section List name.', + 'file.elf.sections.physical_offset': 'ELF Section List offset.', + 'file.elf.sections.physical_size': 'ELF Section List physical size.', + 'file.elf.sections.type': 'ELF Section List type.', + 'file.elf.sections.var_entropy': 'Variance for Shannon entropy calculation from the section.', + 'file.elf.sections.virtual_address': 'ELF Section List virtual address.', + 'file.elf.sections.virtual_size': 'ELF Section List virtual size.', + 'file.elf.segments': 'ELF object segment list.', + 'file.elf.segments.sections': 'ELF object segment sections.', + 'file.elf.segments.type': 'ELF object segment type.', + 'file.elf.shared_libraries': 'List of shared libraries used by this ELF object.', + 'file.elf.telfhash': 'telfhash hash for ELF file.', + 'file.extension': 'File extension, excluding the leading dot.', + 'file.fork_name': 'A fork is additional data associated with a filesystem object.', + 'file.gid': 'Primary group ID (GID) of the file.', + 'file.group': 'Primary group name of the file.', + 'file.hash.md5': 'MD5 hash.', + 'file.hash.sha1': 'SHA1 hash.', + 'file.hash.sha256': 'SHA256 hash.', + 'file.hash.sha384': 'SHA384 hash.', + 'file.hash.sha512': 'SHA512 hash.', + 'file.hash.ssdeep': 'SSDEEP hash.', + 'file.hash.tlsh': 'TLSH hash.', + 'file.inode': 'Inode representing the file in the filesystem.', + 'file.macho.go_import_hash': 'A hash of the Go language imports in a Mach-O file.', + 'file.macho.go_imports': 'List of imported Go language element names and types.', + 'file.macho.go_imports_names_entropy': 'Shannon entropy calculation from the list of Go imports.', + 'file.macho.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'file.macho.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'file.macho.import_hash': 'A hash of the imports in a Mach-O file.', + 'file.macho.imports': 'List of imported element names and types.', + 'file.macho.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'file.macho.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'file.macho.sections': 'Section information of the Mach-O file.', + 'file.macho.sections.entropy': 'Shannon entropy calculation from the section.', + 'file.macho.sections.name': 'Mach-O Section List name.', + 'file.macho.sections.physical_size': 'Mach-O Section List physical size.', + 'file.macho.sections.var_entropy': 'Variance for Shannon entropy calculation from the section.', + 'file.macho.sections.virtual_size': + 'Mach-O Section List virtual size. This is always the same as `physical_size`.', + 'file.macho.symhash': 'A hash of the imports in a Mach-O file.', + 'file.mime_type': 'Media type of file, document, or arrangement of bytes.', + 'file.mode': 'Mode of the file in octal representation.', + 'file.mtime': 'Last time the file content was modified.', + 'file.name': 'Name of the file including the extension, without the directory.', + 'file.owner': 'File owners username.', + 'file.path': 'Full path to the file, including the file name.', + 'file.pe.architecture': 'CPU architecture target for the file.', + 'file.pe.company': 'Internal company name of the file, provided at compile-time.', + 'file.pe.description': 'Internal description of the file, provided at compile-time.', + 'file.pe.file_version': 'Process name.', + 'file.pe.go_import_hash': 'A hash of the Go language imports in a PE file.', + 'file.pe.go_imports': 'List of imported Go language element names and types.', + 'file.pe.go_imports_names_entropy': 'Shannon entropy calculation from the list of Go imports.', + 'file.pe.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'file.pe.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'file.pe.imphash': 'A hash of the imports in a PE file.', + 'file.pe.import_hash': 'A hash of the imports in a PE file.', + 'file.pe.imports': 'List of imported element names and types.', + 'file.pe.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'file.pe.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'file.pe.original_file_name': 'Internal name of the file, provided at compile-time.', + 'file.pe.pehash': 'A hash of the PE header and data from one or more PE sections.', + 'file.pe.product': 'Internal product name of the file, provided at compile-time.', + 'file.pe.sections': 'Section information of the PE file.', + 'file.pe.sections.entropy': 'Shannon entropy calculation from the section.', + 'file.pe.sections.name': 'PE Section List name.', + 'file.pe.sections.physical_size': 'PE Section List physical size.', + 'file.pe.sections.var_entropy': 'Variance for Shannon entropy calculation from the section.', + 'file.pe.sections.virtual_size': + 'PE Section List virtual size. This is always the same as `physical_size`.', + 'file.size': 'File size in bytes.', + 'file.target_path': 'Target path for symlinks.', + 'file.type': 'File type (file, dir, or symlink).', + 'file.uid': 'The user ID (UID) or security identifier (SID) of the file owner.', + 'file.x509.alternative_names': 'List of subject alternative names (SAN).', + 'file.x509.issuer.common_name': 'List of common name (CN) of issuing certificate authority.', + 'file.x509.issuer.country': 'List of country (C) codes', + 'file.x509.issuer.distinguished_name': + 'Distinguished name (DN) of issuing certificate authority.', + 'file.x509.issuer.locality': 'List of locality names (L)', + 'file.x509.issuer.organization': 'List of organizations (O) of issuing certificate authority.', + 'file.x509.issuer.organizational_unit': + 'List of organizational units (OU) of issuing certificate authority.', + 'file.x509.issuer.state_or_province': 'List of state or province names (ST, S, or P)', + 'file.x509.not_after': 'Time at which the certificate is no longer considered valid.', + 'file.x509.not_before': 'Time at which the certificate is first considered valid.', + 'file.x509.public_key_algorithm': 'Algorithm used to generate the public key.', + 'file.x509.public_key_curve': + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific', + 'file.x509.public_key_exponent': + 'Exponent used to derive the public key. This is algorithm specific', + 'file.x509.public_key_size': 'The size of the public key space in bits.', + 'file.x509.serial_number': 'Unique serial number issued by the certificate authority.', + 'file.x509.signature_algorithm': 'Identifier for certificate signature algorithm.', + 'file.x509.subject.common_name': 'List of common names (CN) of subject.', + 'file.x509.subject.country': 'List of country (C) code', + 'file.x509.subject.distinguished_name': + 'Distinguished name (DN) of the certificate subject entity', + 'file.x509.subject.locality': 'List of locality names (L)', + 'file.x509.subject.organization': 'List of organizations (O) of subject.', + 'file.x509.subject.organizational_unit': 'List of organizational units (OU) of subject.', + 'file.x509.subject.state_or_province': 'List of state or province names (ST, S, or P)', + 'file.x509.version_number': 'Version of x509 format.', + 'group.domain': 'Name of the directory the group is a member of.', + 'group.id': 'Unique identifier for the group on the system/platform.', + 'group.name': 'Name of the group.', + 'host.architecture': 'Operating system architecture.', + 'host.boot.id': 'Linux boot uuid taken from /proc/sys/kernel/random/boot_id', + 'host.cpu.usage': 'Percent CPU used, between 0 and 1.', + 'host.disk.read.bytes': 'The number of bytes read by all disks.', + 'host.disk.write.bytes': 'The number of bytes written on all disks.', + 'host.domain': 'Name of the directory the group is a member of.', + 'host.geo.city_name': 'City name.', + 'host.geo.continent_code': 'Continent code.', + 'host.geo.continent_name': 'Name of the continent.', + 'host.geo.country_iso_code': 'Country ISO code.', + 'host.geo.country_name': 'Country name.', + 'host.geo.location': 'Longitude and latitude.', + 'host.geo.name': 'User-defined description of a location.', + 'host.geo.postal_code': 'Postal code.', + 'host.geo.region_iso_code': 'Region ISO code.', + 'host.geo.region_name': 'Region name.', + 'host.geo.timezone': 'Time zone.', + 'host.hostname': 'Hostname of the host.', + 'host.id': 'Unique host id.', + 'host.ip': 'Host ip addresses.', + 'host.mac': 'Host MAC addresses.', + 'host.name': 'Name of the host.', + 'host.network.egress.bytes': 'The number of bytes sent on all network interfaces.', + 'host.network.egress.packets': 'The number of packets sent on all network interfaces.', + 'host.network.ingress.bytes': 'The number of bytes received on all network interfaces.', + 'host.network.ingress.packets': 'The number of packets received on all network interfaces.', + 'host.os.family': 'OS family (such as redhat, debian, freebsd, windows).', + 'host.os.full': 'Operating system name, including the version or code name.', + 'host.os.kernel': 'Operating system kernel version as a raw string.', + 'host.os.name': 'Operating system name, without the version.', + 'host.os.platform': 'Operating system platform (such centos, ubuntu, windows).', + 'host.os.type': + 'Which commercial OS family (one of: linux, macos, unix, windows, ios or android).', + 'host.os.version': 'Operating system version as a raw string.', + 'host.pid_ns_ino': 'Pid namespace inode', + 'host.risk.calculated_level': + 'A risk classification level calculated by an internal system as part of entity analytics and entity risk scoring', + 'host.risk.calculated_score': + 'A risk classification score calculated by an internal system as part of entity analytics and entity risk scoring', + 'host.risk.calculated_score_norm': 'A normalized risk score calculated by an internal system', + 'host.risk.static_level': + 'A risk classification level obtained from outside the system, such as from some external Threat Intelligence Platform', + 'host.risk.static_score': + 'A risk classification score obtained from outside the system, such as from some external Threat Intelligence Platform', + 'host.risk.static_score_norm': 'A normalized risk score calculated by an external system.', + 'host.type': 'Type of host.', + 'host.uptime': 'Seconds the host has been up.', + 'http.request.body.bytes': 'Size in bytes of the request body.', + 'http.request.body.content': 'The full HTTP request body.', + 'http.request.bytes': 'Total size in bytes of the request (body and headers).', + 'http.request.id': 'HTTP request ID.', + 'http.request.method': 'HTTP request method.', + 'http.request.mime_type': 'Mime type of the body of the request.', + 'http.request.referrer': 'Referrer for this HTTP request.', + 'http.response.body.bytes': 'Size in bytes of the response body.', + 'http.response.body.content': 'The full HTTP response body.', + 'http.response.bytes': 'Total size in bytes of the response (body and headers).', + 'http.response.mime_type': 'Mime type of the body of the response.', + 'http.response.status_code': 'HTTP response status code.', + 'http.version': 'HTTP version.', + labels: 'Custom key/value pairs.', + 'log.file.path': 'Full path to the log file this event came from.', + 'log.level': 'Log level of the log event.', + 'log.logger': 'Name of the logger.', + 'log.origin.file.line': 'The line number of the file which originated the log event.', + 'log.origin.file.name': 'The code file which originated the log event.', + 'log.origin.function': 'The function which originated the log event.', + 'log.syslog': 'Syslog metadata', + 'log.syslog.appname': 'The device or application that originated the Syslog message.', + 'log.syslog.facility.code': 'Syslog numeric facility of the event.', + 'log.syslog.facility.name': 'Syslog text-based facility of the event.', + 'log.syslog.hostname': 'The host that originated the Syslog message.', + 'log.syslog.msgid': 'An identifier for the type of Syslog message.', + 'log.syslog.priority': 'Syslog priority of the event.', + 'log.syslog.procid': 'The process name or ID that originated the Syslog message.', + 'log.syslog.severity.code': 'Syslog numeric severity of the event.', + 'log.syslog.severity.name': 'Syslog text-based severity of the event.', + 'log.syslog.structured_data': 'Structured data expressed in RFC 5424 messages.', + 'log.syslog.version': 'Syslog protocol version.', + message: 'Log message optimized for viewing in a log viewer.', + 'network.application': 'Application level protocol name.', + 'network.bytes': 'Total bytes transferred in both directions.', + 'network.community_id': 'A hash of source and destination IPs and ports.', + 'network.direction': 'Direction of the network traffic.', + 'network.forwarded_ip': 'Host IP address when the source IP address is the proxy.', + 'network.iana_number': 'IANA Protocol Number.', + 'network.inner': 'Inner VLAN tag information', + 'network.inner.vlan.id': 'VLAN ID as reported by the observer.', + 'network.inner.vlan.name': 'Optional VLAN name as reported by the observer.', + 'network.name': 'Name given by operators to sections of their network.', + 'network.packets': 'Total packets transferred in both directions.', + 'network.protocol': 'Application protocol name.', + 'network.transport': 'Protocol Name corresponding to the field `iana_number`.', + 'network.type': 'In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc', + 'network.vlan.id': 'VLAN ID as reported by the observer.', + 'network.vlan.name': 'Optional VLAN name as reported by the observer.', + 'observer.egress': 'Object field for egress information', + 'observer.egress.interface.alias': 'Interface alias', + 'observer.egress.interface.id': 'Interface ID', + 'observer.egress.interface.name': 'Interface name', + 'observer.egress.vlan.id': 'VLAN ID as reported by the observer.', + 'observer.egress.vlan.name': 'Optional VLAN name as reported by the observer.', + 'observer.egress.zone': 'Observer Egress zone', + 'observer.geo.city_name': 'City name.', + 'observer.geo.continent_code': 'Continent code.', + 'observer.geo.continent_name': 'Name of the continent.', + 'observer.geo.country_iso_code': 'Country ISO code.', + 'observer.geo.country_name': 'Country name.', + 'observer.geo.location': 'Longitude and latitude.', + 'observer.geo.name': 'User-defined description of a location.', + 'observer.geo.postal_code': 'Postal code.', + 'observer.geo.region_iso_code': 'Region ISO code.', + 'observer.geo.region_name': 'Region name.', + 'observer.geo.timezone': 'Time zone.', + 'observer.hostname': 'Hostname of the observer.', + 'observer.ingress': 'Object field for ingress information', + 'observer.ingress.interface.alias': 'Interface alias', + 'observer.ingress.interface.id': 'Interface ID', + 'observer.ingress.interface.name': 'Interface name', + 'observer.ingress.vlan.id': 'VLAN ID as reported by the observer.', + 'observer.ingress.vlan.name': 'Optional VLAN name as reported by the observer.', + 'observer.ingress.zone': 'Observer ingress zone', + 'observer.ip': 'IP addresses of the observer.', + 'observer.mac': 'MAC addresses of the observer.', + 'observer.name': 'Custom name of the observer.', + 'observer.os.family': 'OS family (such as redhat, debian, freebsd, windows).', + 'observer.os.full': 'Operating system name, including the version or code name.', + 'observer.os.kernel': 'Operating system kernel version as a raw string.', + 'observer.os.name': 'Operating system name, without the version.', + 'observer.os.platform': 'Operating system platform (such centos, ubuntu, windows).', + 'observer.os.type': + 'Which commercial OS family (one of: linux, macos, unix, windows, ios or android).', + 'observer.os.version': 'Operating system version as a raw string.', + 'observer.product': 'The product name of the observer.', + 'observer.serial_number': 'Observer serial number.', + 'observer.type': 'The type of the observer the data is coming from.', + 'observer.vendor': 'Vendor name of the observer.', + 'observer.version': 'Observer version.', + 'orchestrator.api_version': 'API version being used to carry out the action', + 'orchestrator.cluster.id': 'Unique ID of the cluster.', + 'orchestrator.cluster.name': 'Name of the cluster.', + 'orchestrator.cluster.url': 'URL of the API used to manage the cluster.', + 'orchestrator.cluster.version': 'The version of the cluster.', + 'orchestrator.namespace': 'Namespace in which the action is taking place.', + 'orchestrator.organization': + 'Organization affected by the event (for multi-tenant orchestrator setups).', + 'orchestrator.resource.annotation': 'The list of annotations added to the resource.', + 'orchestrator.resource.id': 'Unique ID of the resource being acted upon.', + 'orchestrator.resource.ip': + 'IP address assigned to the resource associated with the event being observed.', + 'orchestrator.resource.label': 'The list of labels added to the resource.', + 'orchestrator.resource.name': 'Name of the resource being acted upon.', + 'orchestrator.resource.parent.type': + 'Type or kind of the parent resource associated with the event being observed.', + 'orchestrator.resource.type': 'Type of resource being acted upon.', + 'orchestrator.type': 'Orchestrator cluster type (e.g. kubernetes, nomad or cloudfoundry).', + 'organization.id': 'Unique identifier for the organization.', + 'organization.name': 'Organization name.', + 'package.architecture': 'Package architecture.', + 'package.build_version': 'Build version information', + 'package.checksum': 'Checksum of the installed package for verification.', + 'package.description': 'Description of the package.', + 'package.install_scope': 'Indicating how the package was installed, e.g. user-local, global.', + 'package.installed': 'Time when package was installed.', + 'package.license': 'Package license', + 'package.name': 'Package name', + 'package.path': 'Path where the package is installed.', + 'package.reference': 'Package home page or reference URL', + 'package.size': 'Package size in bytes.', + 'package.type': 'Package type', + 'package.version': 'Package version', + 'process.args': 'Array of process arguments.', + 'process.args_count': 'Length of the process.args array.', + 'process.code_signature.digest_algorithm': 'Hashing algorithm used to sign the process.', + 'process.code_signature.exists': 'Boolean to capture if a signature is present.', + 'process.code_signature.signing_id': 'The identifier used to sign the process.', + 'process.code_signature.status': 'Additional information about the certificate status.', + 'process.code_signature.subject_name': 'Subject name of the code signer', + 'process.code_signature.team_id': 'The team identifier used to sign the process.', + 'process.code_signature.timestamp': 'When the signature was generated and signed.', + 'process.code_signature.trusted': 'Stores the trust status of the certificate chain.', + 'process.code_signature.valid': + 'Boolean to capture if the digital signature is verified against the binary content.', + 'process.command_line': 'Full command line that started the process.', + 'process.elf.architecture': 'Machine architecture of the ELF file.', + 'process.elf.byte_order': 'Byte sequence of ELF file.', + 'process.elf.cpu_type': 'CPU type of the ELF file.', + 'process.elf.creation_date': 'Build or compile date.', + 'process.elf.exports': 'List of exported element names and types.', + 'process.elf.go_import_hash': 'A hash of the Go language imports in an ELF file.', + 'process.elf.go_imports': 'List of imported Go language element names and types.', + 'process.elf.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'process.elf.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'process.elf.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'process.elf.header.abi_version': 'Version of the ELF Application Binary Interface (ABI).', + 'process.elf.header.class': 'Header class of the ELF file.', + 'process.elf.header.data': 'Data table of the ELF header.', + 'process.elf.header.entrypoint': 'Header entrypoint of the ELF file.', + 'process.elf.header.object_version': '"0x1" for original ELF files.', + 'process.elf.header.os_abi': 'Application Binary Interface (ABI) of the Linux OS.', + 'process.elf.header.type': 'Header type of the ELF file.', + 'process.elf.header.version': 'Version of the ELF header.', + 'process.elf.import_hash': 'A hash of the imports in an ELF file.', + 'process.elf.imports': 'List of imported element names and types.', + 'process.elf.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'process.elf.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'process.elf.sections': 'Section information of the ELF file.', + 'process.elf.sections.chi2': 'Chi-square probability distribution of the section.', + 'process.elf.sections.entropy': 'Shannon entropy calculation from the section.', + 'process.elf.sections.flags': 'ELF Section List flags.', + 'process.elf.sections.name': 'ELF Section List name.', + 'process.elf.sections.physical_offset': 'ELF Section List offset.', + 'process.elf.sections.physical_size': 'ELF Section List physical size.', + 'process.elf.sections.type': 'ELF Section List type.', + 'process.elf.sections.var_entropy': 'Variance for Shannon entropy calculation from the section.', + 'process.elf.sections.virtual_address': 'ELF Section List virtual address.', + 'process.elf.sections.virtual_size': 'ELF Section List virtual size.', + 'process.elf.segments': 'ELF object segment list.', + 'process.elf.segments.sections': 'ELF object segment sections.', + 'process.elf.segments.type': 'ELF object segment type.', + 'process.elf.shared_libraries': 'List of shared libraries used by this ELF object.', + 'process.elf.telfhash': 'telfhash hash for ELF file.', + 'process.end': 'The time the process ended.', + 'process.entity_id': 'Unique identifier for the process.', + 'process.entry_leader.args': 'Array of process arguments.', + 'process.entry_leader.args_count': 'Length of the process.args array.', + 'process.entry_leader.attested_groups.name': 'Name of the group.', + 'process.entry_leader.attested_user.id': 'Unique identifier of the user.', + 'process.entry_leader.attested_user.name': 'Short name or login of the user.', + 'process.entry_leader.command_line': 'Full command line that started the process.', + 'process.entry_leader.entity_id': 'Unique identifier for the process.', + 'process.entry_leader.entry_meta.source.ip': 'IP address of the source.', + 'process.entry_leader.entry_meta.type': 'The entry type for the entry session leader.', + 'process.entry_leader.executable': 'Absolute path to the process executable.', + 'process.entry_leader.group.id': 'Unique identifier for the group on the system/platform.', + 'process.entry_leader.group.name': 'Name of the group.', + 'process.entry_leader.interactive': 'Whether the process is connected to an interactive shell.', + 'process.entry_leader.name': 'Process name.', + 'process.entry_leader.parent.entity_id': 'Unique identifier for the process.', + 'process.entry_leader.parent.pid': 'Process id.', + 'process.entry_leader.parent.session_leader.entity_id': 'Unique identifier for the process.', + 'process.entry_leader.parent.session_leader.pid': 'Process id.', + 'process.entry_leader.parent.session_leader.start': 'The time the process started.', + 'process.entry_leader.parent.session_leader.vpid': 'Virtual process id.', + 'process.entry_leader.parent.start': 'The time the process started.', + 'process.entry_leader.parent.vpid': 'Virtual process id.', + 'process.entry_leader.pid': 'Process id.', + 'process.entry_leader.real_group.id': 'Unique identifier for the group on the system/platform.', + 'process.entry_leader.real_group.name': 'Name of the group.', + 'process.entry_leader.real_user.id': 'Unique identifier of the user.', + 'process.entry_leader.real_user.name': 'Short name or login of the user.', + 'process.entry_leader.same_as_process': + 'This boolean is used to identify if a leader process is the same as the top level process.', + 'process.entry_leader.saved_group.id': 'Unique identifier for the group on the system/platform.', + 'process.entry_leader.saved_group.name': 'Name of the group.', + 'process.entry_leader.saved_user.id': 'Unique identifier of the user.', + 'process.entry_leader.saved_user.name': 'Short name or login of the user.', + 'process.entry_leader.start': 'The time the process started.', + 'process.entry_leader.supplemental_groups.id': + 'Unique identifier for the group on the system/platform.', + 'process.entry_leader.supplemental_groups.name': 'Name of the group.', + 'process.entry_leader.tty': 'Information about the controlling TTY device.', + 'process.entry_leader.tty.char_device.major': 'The TTY character devices major number.', + 'process.entry_leader.tty.char_device.minor': 'The TTY character devices minor number.', + 'process.entry_leader.user.id': 'Unique identifier of the user.', + 'process.entry_leader.user.name': 'Short name or login of the user.', + 'process.entry_leader.vpid': 'Virtual process id.', + 'process.entry_leader.working_directory': 'The working directory of the process.', + 'process.env_vars': 'Array of environment variable bindings.', + 'process.executable': 'Absolute path to the process executable.', + 'process.exit_code': 'The exit code of the process.', + 'process.group_leader.args': 'Array of process arguments.', + 'process.group_leader.args_count': 'Length of the process.args array.', + 'process.group_leader.command_line': 'Full command line that started the process.', + 'process.group_leader.entity_id': 'Unique identifier for the process.', + 'process.group_leader.executable': 'Absolute path to the process executable.', + 'process.group_leader.group.id': 'Unique identifier for the group on the system/platform.', + 'process.group_leader.group.name': 'Name of the group.', + 'process.group_leader.interactive': 'Whether the process is connected to an interactive shell.', + 'process.group_leader.name': 'Process name.', + 'process.group_leader.pid': 'Process id.', + 'process.group_leader.real_group.id': 'Unique identifier for the group on the system/platform.', + 'process.group_leader.real_group.name': 'Name of the group.', + 'process.group_leader.real_user.id': 'Unique identifier of the user.', + 'process.group_leader.real_user.name': 'Short name or login of the user.', + 'process.group_leader.same_as_process': + 'This boolean is used to identify if a leader process is the same as the top level process.', + 'process.group_leader.saved_group.id': 'Unique identifier for the group on the system/platform.', + 'process.group_leader.saved_group.name': 'Name of the group.', + 'process.group_leader.saved_user.id': 'Unique identifier of the user.', + 'process.group_leader.saved_user.name': 'Short name or login of the user.', + 'process.group_leader.start': 'The time the process started.', + 'process.group_leader.supplemental_groups.id': + 'Unique identifier for the group on the system/platform.', + 'process.group_leader.supplemental_groups.name': 'Name of the group.', + 'process.group_leader.tty': 'Information about the controlling TTY device.', + 'process.group_leader.tty.char_device.major': 'The TTY character devices major number.', + 'process.group_leader.tty.char_device.minor': 'The TTY character devices minor number.', + 'process.group_leader.user.id': 'Unique identifier of the user.', + 'process.group_leader.user.name': 'Short name or login of the user.', + 'process.group_leader.vpid': 'Virtual process id.', + 'process.group_leader.working_directory': 'The working directory of the process.', + 'process.hash.md5': 'MD5 hash.', + 'process.hash.sha1': 'SHA1 hash.', + 'process.hash.sha256': 'SHA256 hash.', + 'process.hash.sha384': 'SHA384 hash.', + 'process.hash.sha512': 'SHA512 hash.', + 'process.hash.ssdeep': 'SSDEEP hash.', + 'process.hash.tlsh': 'TLSH hash.', + 'process.interactive': 'Whether the process is connected to an interactive shell.', + 'process.io': 'A chunk of input or output (IO) from a single process.', + 'process.io.bytes_skipped': + 'An array of byte offsets and lengths denoting where IO data has been skipped.', + 'process.io.bytes_skipped.length': 'The length of bytes skipped.', + 'process.io.bytes_skipped.offset': + 'The byte offset into this events io.text (or io.bytes in the future) where length bytes were skipped.', + 'process.io.max_bytes_per_process_exceeded': + 'If true, the process producing the output has exceeded the max_kilobytes_per_process configuration setting.', + 'process.io.text': 'A chunk of output or input sanitized to UTF-8.', + 'process.io.total_bytes_captured': 'The total number of bytes captured in this event.', + 'process.io.total_bytes_skipped': + 'The total number of bytes that were not captured due to implementation restrictions such as buffer size limits.', + 'process.io.type': 'The type of object on which the IO action (read or write) was taken.', + 'process.macho.go_import_hash': 'A hash of the Go language imports in a Mach-O file.', + 'process.macho.go_imports': 'List of imported Go language element names and types.', + 'process.macho.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'process.macho.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'process.macho.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'process.macho.import_hash': 'A hash of the imports in a Mach-O file.', + 'process.macho.imports': 'List of imported element names and types.', + 'process.macho.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'process.macho.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'process.macho.sections': 'Section information of the Mach-O file.', + 'process.macho.sections.entropy': 'Shannon entropy calculation from the section.', + 'process.macho.sections.name': 'Mach-O Section List name.', + 'process.macho.sections.physical_size': 'Mach-O Section List physical size.', + 'process.macho.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'process.macho.sections.virtual_size': + 'Mach-O Section List virtual size. This is always the same as `physical_size`.', + 'process.macho.symhash': 'A hash of the imports in a Mach-O file.', + 'process.name': 'Process name.', + 'process.parent.args': 'Array of process arguments.', + 'process.parent.args_count': 'Length of the process.args array.', + 'process.parent.code_signature.digest_algorithm': 'Hashing algorithm used to sign the process.', + 'process.parent.code_signature.exists': 'Boolean to capture if a signature is present.', + 'process.parent.code_signature.signing_id': 'The identifier used to sign the process.', + 'process.parent.code_signature.status': 'Additional information about the certificate status.', + 'process.parent.code_signature.subject_name': 'Subject name of the code signer', + 'process.parent.code_signature.team_id': 'The team identifier used to sign the process.', + 'process.parent.code_signature.timestamp': 'When the signature was generated and signed.', + 'process.parent.code_signature.trusted': 'Stores the trust status of the certificate chain.', + 'process.parent.code_signature.valid': + 'Boolean to capture if the digital signature is verified against the binary content.', + 'process.parent.command_line': 'Full command line that started the process.', + 'process.parent.elf.architecture': 'Machine architecture of the ELF file.', + 'process.parent.elf.byte_order': 'Byte sequence of ELF file.', + 'process.parent.elf.cpu_type': 'CPU type of the ELF file.', + 'process.parent.elf.creation_date': 'Build or compile date.', + 'process.parent.elf.exports': 'List of exported element names and types.', + 'process.parent.elf.go_import_hash': 'A hash of the Go language imports in an ELF file.', + 'process.parent.elf.go_imports': 'List of imported Go language element names and types.', + 'process.parent.elf.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'process.parent.elf.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'process.parent.elf.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'process.parent.elf.header.abi_version': 'Version of the ELF Application Binary Interface (ABI).', + 'process.parent.elf.header.class': 'Header class of the ELF file.', + 'process.parent.elf.header.data': 'Data table of the ELF header.', + 'process.parent.elf.header.entrypoint': 'Header entrypoint of the ELF file.', + 'process.parent.elf.header.object_version': '"0x1" for original ELF files.', + 'process.parent.elf.header.os_abi': 'Application Binary Interface (ABI) of the Linux OS.', + 'process.parent.elf.header.type': 'Header type of the ELF file.', + 'process.parent.elf.header.version': 'Version of the ELF header.', + 'process.parent.elf.import_hash': 'A hash of the imports in an ELF file.', + 'process.parent.elf.imports': 'List of imported element names and types.', + 'process.parent.elf.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'process.parent.elf.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'process.parent.elf.sections': 'Section information of the ELF file.', + 'process.parent.elf.sections.chi2': 'Chi-square probability distribution of the section.', + 'process.parent.elf.sections.entropy': 'Shannon entropy calculation from the section.', + 'process.parent.elf.sections.flags': 'ELF Section List flags.', + 'process.parent.elf.sections.name': 'ELF Section List name.', + 'process.parent.elf.sections.physical_offset': 'ELF Section List offset.', + 'process.parent.elf.sections.physical_size': 'ELF Section List physical size.', + 'process.parent.elf.sections.type': 'ELF Section List type.', + 'process.parent.elf.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'process.parent.elf.sections.virtual_address': 'ELF Section List virtual address.', + 'process.parent.elf.sections.virtual_size': 'ELF Section List virtual size.', + 'process.parent.elf.segments': 'ELF object segment list.', + 'process.parent.elf.segments.sections': 'ELF object segment sections.', + 'process.parent.elf.segments.type': 'ELF object segment type.', + 'process.parent.elf.shared_libraries': 'List of shared libraries used by this ELF object.', + 'process.parent.elf.telfhash': 'telfhash hash for ELF file.', + 'process.parent.end': 'The time the process ended.', + 'process.parent.entity_id': 'Unique identifier for the process.', + 'process.parent.executable': 'Absolute path to the process executable.', + 'process.parent.exit_code': 'The exit code of the process.', + 'process.parent.group.id': 'Unique identifier for the group on the system/platform.', + 'process.parent.group.name': 'Name of the group.', + 'process.parent.group_leader.entity_id': 'Unique identifier for the process.', + 'process.parent.group_leader.pid': 'Process id.', + 'process.parent.group_leader.start': 'The time the process started.', + 'process.parent.group_leader.vpid': 'Virtual process id.', + 'process.parent.hash.md5': 'MD5 hash.', + 'process.parent.hash.sha1': 'SHA1 hash.', + 'process.parent.hash.sha256': 'SHA256 hash.', + 'process.parent.hash.sha384': 'SHA384 hash.', + 'process.parent.hash.sha512': 'SHA512 hash.', + 'process.parent.hash.ssdeep': 'SSDEEP hash.', + 'process.parent.hash.tlsh': 'TLSH hash.', + 'process.parent.interactive': 'Whether the process is connected to an interactive shell.', + 'process.parent.macho.go_import_hash': 'A hash of the Go language imports in a Mach-O file.', + 'process.parent.macho.go_imports': 'List of imported Go language element names and types.', + 'process.parent.macho.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'process.parent.macho.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'process.parent.macho.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'process.parent.macho.import_hash': 'A hash of the imports in a Mach-O file.', + 'process.parent.macho.imports': 'List of imported element names and types.', + 'process.parent.macho.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'process.parent.macho.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'process.parent.macho.sections': 'Section information of the Mach-O file.', + 'process.parent.macho.sections.entropy': 'Shannon entropy calculation from the section.', + 'process.parent.macho.sections.name': 'Mach-O Section List name.', + 'process.parent.macho.sections.physical_size': 'Mach-O Section List physical size.', + 'process.parent.macho.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'process.parent.macho.sections.virtual_size': + 'Mach-O Section List virtual size. This is always the same as `physical_size`.', + 'process.parent.macho.symhash': 'A hash of the imports in a Mach-O file.', + 'process.parent.name': 'Process name.', + 'process.parent.pe.architecture': 'CPU architecture target for the file.', + 'process.parent.pe.company': 'Internal company name of the file, provided at compile-time.', + 'process.parent.pe.description': 'Internal description of the file, provided at compile-time.', + 'process.parent.pe.file_version': 'Process name.', + 'process.parent.pe.go_import_hash': 'A hash of the Go language imports in a PE file.', + 'process.parent.pe.go_imports': 'List of imported Go language element names and types.', + 'process.parent.pe.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'process.parent.pe.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'process.parent.pe.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'process.parent.pe.imphash': 'A hash of the imports in a PE file.', + 'process.parent.pe.import_hash': 'A hash of the imports in a PE file.', + 'process.parent.pe.imports': 'List of imported element names and types.', + 'process.parent.pe.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'process.parent.pe.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'process.parent.pe.original_file_name': 'Internal name of the file, provided at compile-time.', + 'process.parent.pe.pehash': 'A hash of the PE header and data from one or more PE sections.', + 'process.parent.pe.product': 'Internal product name of the file, provided at compile-time.', + 'process.parent.pe.sections': 'Section information of the PE file.', + 'process.parent.pe.sections.entropy': 'Shannon entropy calculation from the section.', + 'process.parent.pe.sections.name': 'PE Section List name.', + 'process.parent.pe.sections.physical_size': 'PE Section List physical size.', + 'process.parent.pe.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'process.parent.pe.sections.virtual_size': + 'PE Section List virtual size. This is always the same as `physical_size`.', + 'process.parent.pgid': 'Deprecated identifier of the group of processes the process belongs to.', + 'process.parent.pid': 'Process id.', + 'process.parent.real_group.id': 'Unique identifier for the group on the system/platform.', + 'process.parent.real_group.name': 'Name of the group.', + 'process.parent.real_user.id': 'Unique identifier of the user.', + 'process.parent.real_user.name': 'Short name or login of the user.', + 'process.parent.saved_group.id': 'Unique identifier for the group on the system/platform.', + 'process.parent.saved_group.name': 'Name of the group.', + 'process.parent.saved_user.id': 'Unique identifier of the user.', + 'process.parent.saved_user.name': 'Short name or login of the user.', + 'process.parent.start': 'The time the process started.', + 'process.parent.supplemental_groups.id': + 'Unique identifier for the group on the system/platform.', + 'process.parent.supplemental_groups.name': 'Name of the group.', + 'process.parent.thread.capabilities.effective': + 'Array of capabilities used for permission checks.', + 'process.parent.thread.capabilities.permitted': 'Array of capabilities a thread could assume.', + 'process.parent.thread.id': 'Thread ID.', + 'process.parent.thread.name': 'Thread name.', + 'process.parent.title': 'Process title.', + 'process.parent.tty': 'Information about the controlling TTY device.', + 'process.parent.tty.char_device.major': 'The TTY character devices major number.', + 'process.parent.tty.char_device.minor': 'The TTY character devices minor number.', + 'process.parent.uptime': 'Seconds the process has been up.', + 'process.parent.user.id': 'Unique identifier of the user.', + 'process.parent.user.name': 'Short name or login of the user.', + 'process.parent.vpid': 'Virtual process id.', + 'process.parent.working_directory': 'The working directory of the process.', + 'process.pe.architecture': 'CPU architecture target for the file.', + 'process.pe.company': 'Internal company name of the file, provided at compile-time.', + 'process.pe.description': 'Internal description of the file, provided at compile-time.', + 'process.pe.file_version': 'Process name.', + 'process.pe.go_import_hash': 'A hash of the Go language imports in a PE file.', + 'process.pe.go_imports': 'List of imported Go language element names and types.', + 'process.pe.go_imports_names_entropy': 'Shannon entropy calculation from the list of Go imports.', + 'process.pe.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'process.pe.go_stripped': 'Whether the file is a stripped or obfuscated Go executable.', + 'process.pe.imphash': 'A hash of the imports in a PE file.', + 'process.pe.import_hash': 'A hash of the imports in a PE file.', + 'process.pe.imports': 'List of imported element names and types.', + 'process.pe.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'process.pe.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'process.pe.original_file_name': 'Internal name of the file, provided at compile-time.', + 'process.pe.pehash': 'A hash of the PE header and data from one or more PE sections.', + 'process.pe.product': 'Internal product name of the file, provided at compile-time.', + 'process.pe.sections': 'Section information of the PE file.', + 'process.pe.sections.entropy': 'Shannon entropy calculation from the section.', + 'process.pe.sections.name': 'PE Section List name.', + 'process.pe.sections.physical_size': 'PE Section List physical size.', + 'process.pe.sections.var_entropy': 'Variance for Shannon entropy calculation from the section.', + 'process.pe.sections.virtual_size': + 'PE Section List virtual size. This is always the same as `physical_size`.', + 'process.pgid': 'Deprecated identifier of the group of processes the process belongs to.', + 'process.pid': 'Process id.', + 'process.previous.args': 'Array of process arguments.', + 'process.previous.args_count': 'Length of the process.args array.', + 'process.previous.executable': 'Absolute path to the process executable.', + 'process.real_group.id': 'Unique identifier for the group on the system/platform.', + 'process.real_group.name': 'Name of the group.', + 'process.real_user.id': 'Unique identifier of the user.', + 'process.real_user.name': 'Short name or login of the user.', + 'process.saved_group.id': 'Unique identifier for the group on the system/platform.', + 'process.saved_group.name': 'Name of the group.', + 'process.saved_user.id': 'Unique identifier of the user.', + 'process.saved_user.name': 'Short name or login of the user.', + 'process.session_leader.args': 'Array of process arguments.', + 'process.session_leader.args_count': 'Length of the process.args array.', + 'process.session_leader.command_line': 'Full command line that started the process.', + 'process.session_leader.entity_id': 'Unique identifier for the process.', + 'process.session_leader.executable': 'Absolute path to the process executable.', + 'process.session_leader.group.id': 'Unique identifier for the group on the system/platform.', + 'process.session_leader.group.name': 'Name of the group.', + 'process.session_leader.interactive': 'Whether the process is connected to an interactive shell.', + 'process.session_leader.name': 'Process name.', + 'process.session_leader.parent.entity_id': 'Unique identifier for the process.', + 'process.session_leader.parent.pid': 'Process id.', + 'process.session_leader.parent.session_leader.entity_id': 'Unique identifier for the process.', + 'process.session_leader.parent.session_leader.pid': 'Process id.', + 'process.session_leader.parent.session_leader.start': 'The time the process started.', + 'process.session_leader.parent.session_leader.vpid': 'Virtual process id.', + 'process.session_leader.parent.start': 'The time the process started.', + 'process.session_leader.parent.vpid': 'Virtual process id.', + 'process.session_leader.pid': 'Process id.', + 'process.session_leader.real_group.id': 'Unique identifier for the group on the system/platform.', + 'process.session_leader.real_group.name': 'Name of the group.', + 'process.session_leader.real_user.id': 'Unique identifier of the user.', + 'process.session_leader.real_user.name': 'Short name or login of the user.', + 'process.session_leader.same_as_process': + 'This boolean is used to identify if a leader process is the same as the top level process.', + 'process.session_leader.saved_group.id': + 'Unique identifier for the group on the system/platform.', + 'process.session_leader.saved_group.name': 'Name of the group.', + 'process.session_leader.saved_user.id': 'Unique identifier of the user.', + 'process.session_leader.saved_user.name': 'Short name or login of the user.', + 'process.session_leader.start': 'The time the process started.', + 'process.session_leader.supplemental_groups.id': + 'Unique identifier for the group on the system/platform.', + 'process.session_leader.supplemental_groups.name': 'Name of the group.', + 'process.session_leader.tty': 'Information about the controlling TTY device.', + 'process.session_leader.tty.char_device.major': 'The TTY character devices major number.', + 'process.session_leader.tty.char_device.minor': 'The TTY character devices minor number.', + 'process.session_leader.user.id': 'Unique identifier of the user.', + 'process.session_leader.user.name': 'Short name or login of the user.', + 'process.session_leader.vpid': 'Virtual process id.', + 'process.session_leader.working_directory': 'The working directory of the process.', + 'process.start': 'The time the process started.', + 'process.supplemental_groups.id': 'Unique identifier for the group on the system/platform.', + 'process.supplemental_groups.name': 'Name of the group.', + 'process.thread.capabilities.effective': 'Array of capabilities used for permission checks.', + 'process.thread.capabilities.permitted': 'Array of capabilities a thread could assume.', + 'process.thread.id': 'Thread ID.', + 'process.thread.name': 'Thread name.', + 'process.title': 'Process title.', + 'process.tty': 'Information about the controlling TTY device.', + 'process.tty.char_device.major': 'The TTY character devices major number.', + 'process.tty.char_device.minor': 'The TTY character devices minor number.', + 'process.tty.columns': 'The number of character columns per line. e.g terminal width', + 'process.tty.rows': 'The number of character rows in the terminal. e.g terminal height', + 'process.uptime': 'Seconds the process has been up.', + 'process.user.id': 'Unique identifier of the user.', + 'process.user.name': 'Short name or login of the user.', + 'process.vpid': 'Virtual process id.', + 'process.working_directory': 'The working directory of the process.', + 'registry.data.bytes': 'Original bytes written with base64 encoding.', + 'registry.data.strings': 'List of strings representing what was written to the registry.', + 'registry.data.type': 'Standard registry type for encoding contents', + 'registry.hive': 'Abbreviated name for the hive.', + 'registry.key': 'Hive-relative path of keys.', + 'registry.path': 'Full path, including hive, key and value', + 'registry.value': 'Name of the value written.', + 'related.hash': 'All the hashes seen on your event.', + 'related.hosts': 'All the host identifiers seen on your event.', + 'related.ip': 'All of the IPs seen on your event.', + 'related.user': 'All the user names or other user identifiers seen on the event.', + 'rule.author': 'Rule author', + 'rule.category': 'Rule category', + 'rule.description': 'Rule description', + 'rule.id': 'Rule ID', + 'rule.license': 'Rule license', + 'rule.name': 'Rule name', + 'rule.reference': 'Rule reference URL', + 'rule.ruleset': 'Rule ruleset', + 'rule.uuid': 'Rule UUID', + 'rule.version': 'Rule version', + 'server.address': 'Server network address.', + 'server.as.number': 'Unique number allocated to the autonomous system.', + 'server.as.organization.name': 'Organization name.', + 'server.bytes': 'Bytes sent from the server to the client.', + 'server.domain': 'The domain name of the server.', + 'server.geo.city_name': 'City name.', + 'server.geo.continent_code': 'Continent code.', + 'server.geo.continent_name': 'Name of the continent.', + 'server.geo.country_iso_code': 'Country ISO code.', + 'server.geo.country_name': 'Country name.', + 'server.geo.location': 'Longitude and latitude.', + 'server.geo.name': 'User-defined description of a location.', + 'server.geo.postal_code': 'Postal code.', + 'server.geo.region_iso_code': 'Region ISO code.', + 'server.geo.region_name': 'Region name.', + 'server.geo.timezone': 'Time zone.', + 'server.ip': 'IP address of the server.', + 'server.mac': 'MAC address of the server.', + 'server.nat.ip': 'Server NAT ip', + 'server.nat.port': 'Server NAT port', + 'server.packets': 'Packets sent from the server to the client.', + 'server.port': 'Port of the server.', + 'server.registered_domain': 'The highest registered server domain, stripped of the subdomain.', + 'server.subdomain': 'The subdomain of the domain.', + 'server.top_level_domain': 'The effective top level domain (com, org, net, co.uk).', + 'server.user.domain': 'Name of the directory the user is a member of.', + 'server.user.email': 'User email address.', + 'server.user.full_name': 'Users full name, if available.', + 'server.user.group.domain': 'Name of the directory the group is a member of.', + 'server.user.group.id': 'Unique identifier for the group on the system/platform.', + 'server.user.group.name': 'Name of the group.', + 'server.user.hash': 'Unique user hash to correlate information for a user in anonymized form.', + 'server.user.id': 'Unique identifier of the user.', + 'server.user.name': 'Short name or login of the user.', + 'server.user.roles': 'Array of user roles at the time of the event.', + 'service.address': 'Address of this service.', + 'service.environment': 'Environment of the service.', + 'service.ephemeral_id': 'Ephemeral identifier of this service.', + 'service.id': 'Unique identifier of the running service.', + 'service.name': 'Name of the service.', + 'service.node.name': 'Name of the service node.', + 'service.node.role': 'Deprecated role (singular) of the service node.', + 'service.node.roles': 'Roles of the service node.', + 'service.origin.address': 'Address of this service.', + 'service.origin.environment': 'Environment of the service.', + 'service.origin.ephemeral_id': 'Ephemeral identifier of this service.', + 'service.origin.id': 'Unique identifier of the running service.', + 'service.origin.name': 'Name of the service.', + 'service.origin.node.name': 'Name of the service node.', + 'service.origin.node.role': 'Deprecated role (singular) of the service node.', + 'service.origin.node.roles': 'Roles of the service node.', + 'service.origin.state': 'Current state of the service.', + 'service.origin.type': 'The type of the service.', + 'service.origin.version': 'Version of the service.', + 'service.state': 'Current state of the service.', + 'service.target.address': 'Address of this service.', + 'service.target.environment': 'Environment of the service.', + 'service.target.ephemeral_id': 'Ephemeral identifier of this service.', + 'service.target.id': 'Unique identifier of the running service.', + 'service.target.name': 'Name of the service.', + 'service.target.node.name': 'Name of the service node.', + 'service.target.node.role': 'Deprecated role (singular) of the service node.', + 'service.target.node.roles': 'Roles of the service node.', + 'service.target.state': 'Current state of the service.', + 'service.target.type': 'The type of the service.', + 'service.target.version': 'Version of the service.', + 'service.type': 'The type of the service.', + 'service.version': 'Version of the service.', + 'source.address': 'Source network address.', + 'source.as.number': 'Unique number allocated to the autonomous system.', + 'source.as.organization.name': 'Organization name.', + 'source.bytes': 'Bytes sent from the source to the destination.', + 'source.domain': 'The domain name of the source.', + 'source.geo.city_name': 'City name.', + 'source.geo.continent_code': 'Continent code.', + 'source.geo.continent_name': 'Name of the continent.', + 'source.geo.country_iso_code': 'Country ISO code.', + 'source.geo.country_name': 'Country name.', + 'source.geo.location': 'Longitude and latitude.', + 'source.geo.name': 'User-defined description of a location.', + 'source.geo.postal_code': 'Postal code.', + 'source.geo.region_iso_code': 'Region ISO code.', + 'source.geo.region_name': 'Region name.', + 'source.geo.timezone': 'Time zone.', + 'source.ip': 'IP address of the source.', + 'source.mac': 'MAC address of the source.', + 'source.nat.ip': 'Source NAT ip', + 'source.nat.port': 'Source NAT port', + 'source.packets': 'Packets sent from the source to the destination.', + 'source.port': 'Port of the source.', + 'source.registered_domain': 'The highest registered source domain, stripped of the subdomain.', + 'source.subdomain': 'The subdomain of the domain.', + 'source.top_level_domain': 'The effective top level domain (com, org, net, co.uk).', + 'source.user.domain': 'Name of the directory the user is a member of.', + 'source.user.email': 'User email address.', + 'source.user.full_name': 'Users full name, if available.', + 'source.user.group.domain': 'Name of the directory the group is a member of.', + 'source.user.group.id': 'Unique identifier for the group on the system/platform.', + 'source.user.group.name': 'Name of the group.', + 'source.user.hash': 'Unique user hash to correlate information for a user in anonymized form.', + 'source.user.id': 'Unique identifier of the user.', + 'source.user.name': 'Short name or login of the user.', + 'source.user.roles': 'Array of user roles at the time of the event.', + 'span.id': 'Unique identifier of the span within the scope of its trace.', + tags: 'List of keywords used to tag each event.', + 'threat.enrichments': 'List of objects containing indicators enriching the event.', + 'threat.enrichments.indicator': 'Object containing indicators enriching the event.', + 'threat.enrichments.indicator.as.number': 'Unique number allocated to the autonomous system.', + 'threat.enrichments.indicator.as.organization.name': 'Organization name.', + 'threat.enrichments.indicator.confidence': 'Indicator confidence rating', + 'threat.enrichments.indicator.description': 'Indicator description', + 'threat.enrichments.indicator.email.address': 'Indicator email address', + 'threat.enrichments.indicator.file.accessed': 'Last time the file was accessed.', + 'threat.enrichments.indicator.file.attributes': 'Array of file attributes.', + 'threat.enrichments.indicator.file.code_signature.digest_algorithm': + 'Hashing algorithm used to sign the process.', + 'threat.enrichments.indicator.file.code_signature.exists': + 'Boolean to capture if a signature is present.', + 'threat.enrichments.indicator.file.code_signature.signing_id': + 'The identifier used to sign the process.', + 'threat.enrichments.indicator.file.code_signature.status': + 'Additional information about the certificate status.', + 'threat.enrichments.indicator.file.code_signature.subject_name': + 'Subject name of the code signer', + 'threat.enrichments.indicator.file.code_signature.team_id': + 'The team identifier used to sign the process.', + 'threat.enrichments.indicator.file.code_signature.timestamp': + 'When the signature was generated and signed.', + 'threat.enrichments.indicator.file.code_signature.trusted': + 'Stores the trust status of the certificate chain.', + 'threat.enrichments.indicator.file.code_signature.valid': + 'Boolean to capture if the digital signature is verified against the binary content.', + 'threat.enrichments.indicator.file.created': 'File creation time.', + 'threat.enrichments.indicator.file.ctime': 'Last time the file attributes or metadata changed.', + 'threat.enrichments.indicator.file.device': 'Device that is the source of the file.', + 'threat.enrichments.indicator.file.directory': 'Directory where the file is located.', + 'threat.enrichments.indicator.file.drive_letter': 'Drive letter where the file is located.', + 'threat.enrichments.indicator.file.elf.architecture': 'Machine architecture of the ELF file.', + 'threat.enrichments.indicator.file.elf.byte_order': 'Byte sequence of ELF file.', + 'threat.enrichments.indicator.file.elf.cpu_type': 'CPU type of the ELF file.', + 'threat.enrichments.indicator.file.elf.creation_date': 'Build or compile date.', + 'threat.enrichments.indicator.file.elf.exports': 'List of exported element names and types.', + 'threat.enrichments.indicator.file.elf.go_import_hash': + 'A hash of the Go language imports in an ELF file.', + 'threat.enrichments.indicator.file.elf.go_imports': + 'List of imported Go language element names and types.', + 'threat.enrichments.indicator.file.elf.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'threat.enrichments.indicator.file.elf.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'threat.enrichments.indicator.file.elf.go_stripped': + 'Whether the file is a stripped or obfuscated Go executable.', + 'threat.enrichments.indicator.file.elf.header.abi_version': + 'Version of the ELF Application Binary Interface (ABI).', + 'threat.enrichments.indicator.file.elf.header.class': 'Header class of the ELF file.', + 'threat.enrichments.indicator.file.elf.header.data': 'Data table of the ELF header.', + 'threat.enrichments.indicator.file.elf.header.entrypoint': 'Header entrypoint of the ELF file.', + 'threat.enrichments.indicator.file.elf.header.object_version': '"0x1" for original ELF files.', + 'threat.enrichments.indicator.file.elf.header.os_abi': + 'Application Binary Interface (ABI) of the Linux OS.', + 'threat.enrichments.indicator.file.elf.header.type': 'Header type of the ELF file.', + 'threat.enrichments.indicator.file.elf.header.version': 'Version of the ELF header.', + 'threat.enrichments.indicator.file.elf.import_hash': 'A hash of the imports in an ELF file.', + 'threat.enrichments.indicator.file.elf.imports': 'List of imported element names and types.', + 'threat.enrichments.indicator.file.elf.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'threat.enrichments.indicator.file.elf.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'threat.enrichments.indicator.file.elf.sections': 'Section information of the ELF file.', + 'threat.enrichments.indicator.file.elf.sections.chi2': + 'Chi-square probability distribution of the section.', + 'threat.enrichments.indicator.file.elf.sections.entropy': + 'Shannon entropy calculation from the section.', + 'threat.enrichments.indicator.file.elf.sections.flags': 'ELF Section List flags.', + 'threat.enrichments.indicator.file.elf.sections.name': 'ELF Section List name.', + 'threat.enrichments.indicator.file.elf.sections.physical_offset': 'ELF Section List offset.', + 'threat.enrichments.indicator.file.elf.sections.physical_size': 'ELF Section List physical size.', + 'threat.enrichments.indicator.file.elf.sections.type': 'ELF Section List type.', + 'threat.enrichments.indicator.file.elf.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'threat.enrichments.indicator.file.elf.sections.virtual_address': + 'ELF Section List virtual address.', + 'threat.enrichments.indicator.file.elf.sections.virtual_size': 'ELF Section List virtual size.', + 'threat.enrichments.indicator.file.elf.segments': 'ELF object segment list.', + 'threat.enrichments.indicator.file.elf.segments.sections': 'ELF object segment sections.', + 'threat.enrichments.indicator.file.elf.segments.type': 'ELF object segment type.', + 'threat.enrichments.indicator.file.elf.shared_libraries': + 'List of shared libraries used by this ELF object.', + 'threat.enrichments.indicator.file.elf.telfhash': 'telfhash hash for ELF file.', + 'threat.enrichments.indicator.file.extension': 'File extension, excluding the leading dot.', + 'threat.enrichments.indicator.file.fork_name': + 'A fork is additional data associated with a filesystem object.', + 'threat.enrichments.indicator.file.gid': 'Primary group ID (GID) of the file.', + 'threat.enrichments.indicator.file.group': 'Primary group name of the file.', + 'threat.enrichments.indicator.file.hash.md5': 'MD5 hash.', + 'threat.enrichments.indicator.file.hash.sha1': 'SHA1 hash.', + 'threat.enrichments.indicator.file.hash.sha256': 'SHA256 hash.', + 'threat.enrichments.indicator.file.hash.sha384': 'SHA384 hash.', + 'threat.enrichments.indicator.file.hash.sha512': 'SHA512 hash.', + 'threat.enrichments.indicator.file.hash.ssdeep': 'SSDEEP hash.', + 'threat.enrichments.indicator.file.hash.tlsh': 'TLSH hash.', + 'threat.enrichments.indicator.file.inode': 'Inode representing the file in the filesystem.', + 'threat.enrichments.indicator.file.mime_type': + 'Media type of file, document, or arrangement of bytes.', + 'threat.enrichments.indicator.file.mode': 'Mode of the file in octal representation.', + 'threat.enrichments.indicator.file.mtime': 'Last time the file content was modified.', + 'threat.enrichments.indicator.file.name': + 'Name of the file including the extension, without the directory.', + 'threat.enrichments.indicator.file.owner': 'File owners username.', + 'threat.enrichments.indicator.file.path': 'Full path to the file, including the file name.', + 'threat.enrichments.indicator.file.pe.architecture': 'CPU architecture target for the file.', + 'threat.enrichments.indicator.file.pe.company': + 'Internal company name of the file, provided at compile-time.', + 'threat.enrichments.indicator.file.pe.description': + 'Internal description of the file, provided at compile-time.', + 'threat.enrichments.indicator.file.pe.file_version': 'Process name.', + 'threat.enrichments.indicator.file.pe.go_import_hash': + 'A hash of the Go language imports in a PE file.', + 'threat.enrichments.indicator.file.pe.go_imports': + 'List of imported Go language element names and types.', + 'threat.enrichments.indicator.file.pe.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'threat.enrichments.indicator.file.pe.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'threat.enrichments.indicator.file.pe.go_stripped': + 'Whether the file is a stripped or obfuscated Go executable.', + 'threat.enrichments.indicator.file.pe.imphash': 'A hash of the imports in a PE file.', + 'threat.enrichments.indicator.file.pe.import_hash': 'A hash of the imports in a PE file.', + 'threat.enrichments.indicator.file.pe.imports': 'List of imported element names and types.', + 'threat.enrichments.indicator.file.pe.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'threat.enrichments.indicator.file.pe.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'threat.enrichments.indicator.file.pe.original_file_name': + 'Internal name of the file, provided at compile-time.', + 'threat.enrichments.indicator.file.pe.pehash': + 'A hash of the PE header and data from one or more PE sections.', + 'threat.enrichments.indicator.file.pe.product': + 'Internal product name of the file, provided at compile-time.', + 'threat.enrichments.indicator.file.pe.sections': 'Section information of the PE file.', + 'threat.enrichments.indicator.file.pe.sections.entropy': + 'Shannon entropy calculation from the section.', + 'threat.enrichments.indicator.file.pe.sections.name': 'PE Section List name.', + 'threat.enrichments.indicator.file.pe.sections.physical_size': 'PE Section List physical size.', + 'threat.enrichments.indicator.file.pe.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'threat.enrichments.indicator.file.pe.sections.virtual_size': + 'PE Section List virtual size. This is always the same as `physical_size`.', + 'threat.enrichments.indicator.file.size': 'File size in bytes.', + 'threat.enrichments.indicator.file.target_path': 'Target path for symlinks.', + 'threat.enrichments.indicator.file.type': 'File type (file, dir, or symlink).', + 'threat.enrichments.indicator.file.uid': + 'The user ID (UID) or security identifier (SID) of the file owner.', + 'threat.enrichments.indicator.file.x509.alternative_names': + 'List of subject alternative names (SAN).', + 'threat.enrichments.indicator.file.x509.issuer.common_name': + 'List of common name (CN) of issuing certificate authority.', + 'threat.enrichments.indicator.file.x509.issuer.country': 'List of country (C) codes', + 'threat.enrichments.indicator.file.x509.issuer.distinguished_name': + 'Distinguished name (DN) of issuing certificate authority.', + 'threat.enrichments.indicator.file.x509.issuer.locality': 'List of locality names (L)', + 'threat.enrichments.indicator.file.x509.issuer.organization': + 'List of organizations (O) of issuing certificate authority.', + 'threat.enrichments.indicator.file.x509.issuer.organizational_unit': + 'List of organizational units (OU) of issuing certificate authority.', + 'threat.enrichments.indicator.file.x509.issuer.state_or_province': + 'List of state or province names (ST, S, or P)', + 'threat.enrichments.indicator.file.x509.not_after': + 'Time at which the certificate is no longer considered valid.', + 'threat.enrichments.indicator.file.x509.not_before': + 'Time at which the certificate is first considered valid.', + 'threat.enrichments.indicator.file.x509.public_key_algorithm': + 'Algorithm used to generate the public key.', + 'threat.enrichments.indicator.file.x509.public_key_curve': + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + 'threat.enrichments.indicator.file.x509.public_key_exponent': + 'Exponent used to derive the public key. This is algorithm specific.', + 'threat.enrichments.indicator.file.x509.public_key_size': + 'The size of the public key space in bits.', + 'threat.enrichments.indicator.file.x509.serial_number': + 'Unique serial number issued by the certificate authority.', + 'threat.enrichments.indicator.file.x509.signature_algorithm': + 'Identifier for certificate signature algorithm.', + 'threat.enrichments.indicator.file.x509.subject.common_name': + 'List of common names (CN) of subject.', + 'threat.enrichments.indicator.file.x509.subject.country': 'List of country (C) code', + 'threat.enrichments.indicator.file.x509.subject.distinguished_name': + 'Distinguished name (DN) of the certificate subject entity.', + 'threat.enrichments.indicator.file.x509.subject.locality': 'List of locality names (L)', + 'threat.enrichments.indicator.file.x509.subject.organization': + 'List of organizations (O) of subject.', + 'threat.enrichments.indicator.file.x509.subject.organizational_unit': + 'List of organizational units (OU) of subject.', + 'threat.enrichments.indicator.file.x509.subject.state_or_province': + 'List of state or province names (ST, S, or P)', + 'threat.enrichments.indicator.file.x509.version_number': 'Version of x509 format.', + 'threat.enrichments.indicator.first_seen': 'Date/time indicator was first reported.', + 'threat.enrichments.indicator.geo.city_name': 'City name.', + 'threat.enrichments.indicator.geo.continent_code': 'Continent code.', + 'threat.enrichments.indicator.geo.continent_name': 'Name of the continent.', + 'threat.enrichments.indicator.geo.country_iso_code': 'Country ISO code.', + 'threat.enrichments.indicator.geo.country_name': 'Country name.', + 'threat.enrichments.indicator.geo.location': 'Longitude and latitude.', + 'threat.enrichments.indicator.geo.name': 'User-defined description of a location.', + 'threat.enrichments.indicator.geo.postal_code': 'Postal code.', + 'threat.enrichments.indicator.geo.region_iso_code': 'Region ISO code.', + 'threat.enrichments.indicator.geo.region_name': 'Region name.', + 'threat.enrichments.indicator.geo.timezone': 'Time zone.', + 'threat.enrichments.indicator.ip': 'Indicator IP address', + 'threat.enrichments.indicator.last_seen': 'Date/time indicator was last reported.', + 'threat.enrichments.indicator.marking.tlp': 'Indicator TLP marking', + 'threat.enrichments.indicator.marking.tlp_version': 'Indicator TLP version', + 'threat.enrichments.indicator.modified_at': 'Date/time indicator was last updated.', + 'threat.enrichments.indicator.name': 'Indicator display name', + 'threat.enrichments.indicator.port': 'Indicator port', + 'threat.enrichments.indicator.provider': 'Indicator provider', + 'threat.enrichments.indicator.reference': 'Indicator reference URL', + 'threat.enrichments.indicator.registry.data.bytes': + 'Original bytes written with base64 encoding.', + 'threat.enrichments.indicator.registry.data.strings': + 'List of strings representing what was written to the registry.', + 'threat.enrichments.indicator.registry.data.type': 'Standard registry type for encoding contents', + 'threat.enrichments.indicator.registry.hive': 'Abbreviated name for the hive.', + 'threat.enrichments.indicator.registry.key': 'Hive-relative path of keys.', + 'threat.enrichments.indicator.registry.path': 'Full path, including hive, key and value', + 'threat.enrichments.indicator.registry.value': 'Name of the value written.', + 'threat.enrichments.indicator.scanner_stats': 'Scanner statistics', + 'threat.enrichments.indicator.sightings': 'Number of times indicator observed', + 'threat.enrichments.indicator.type': 'Type of indicator', + 'threat.enrichments.indicator.url.domain': 'Domain of the url.', + 'threat.enrichments.indicator.url.extension': + 'File extension from the request url, excluding the leading dot.', + 'threat.enrichments.indicator.url.fragment': 'Portion of the url after the `#`.', + 'threat.enrichments.indicator.url.full': 'Full unparsed URL.', + 'threat.enrichments.indicator.url.original': + 'Unmodified original url as seen in the event source.', + 'threat.enrichments.indicator.url.password': 'Password of the request.', + 'threat.enrichments.indicator.url.path': 'Path of the request, such as "/search".', + 'threat.enrichments.indicator.url.port': 'Port of the request, such as 443.', + 'threat.enrichments.indicator.url.query': 'Query string of the request.', + 'threat.enrichments.indicator.url.registered_domain': + 'The highest registered url domain, stripped of the subdomain.', + 'threat.enrichments.indicator.url.scheme': 'Scheme of the url.', + 'threat.enrichments.indicator.url.subdomain': 'The subdomain of the domain.', + 'threat.enrichments.indicator.url.top_level_domain': + 'The effective top level domain (com, org, net, co.uk).', + 'threat.enrichments.indicator.url.username': 'Username of the request.', + 'threat.enrichments.indicator.x509.alternative_names': 'List of subject alternative names (SAN).', + 'threat.enrichments.indicator.x509.issuer.common_name': + 'List of common name (CN) of issuing certificate authority.', + 'threat.enrichments.indicator.x509.issuer.country': 'List of country (C) codes', + 'threat.enrichments.indicator.x509.issuer.distinguished_name': + 'Distinguished name (DN) of issuing certificate authority.', + 'threat.enrichments.indicator.x509.issuer.locality': 'List of locality names (L)', + 'threat.enrichments.indicator.x509.issuer.organization': + 'List of organizations (O) of issuing certificate authority.', + 'threat.enrichments.indicator.x509.issuer.organizational_unit': + 'List of organizational units (OU) of issuing certificate authority.', + 'threat.enrichments.indicator.x509.issuer.state_or_province': + 'List of state or province names (ST, S, or P)', + 'threat.enrichments.indicator.x509.not_after': + 'Time at which the certificate is no longer considered valid.', + 'threat.enrichments.indicator.x509.not_before': + 'Time at which the certificate is first considered valid.', + 'threat.enrichments.indicator.x509.public_key_algorithm': + 'Algorithm used to generate the public key.', + 'threat.enrichments.indicator.x509.public_key_curve': + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + 'threat.enrichments.indicator.x509.public_key_exponent': + 'Exponent used to derive the public key. This is algorithm specific.', + 'threat.enrichments.indicator.x509.public_key_size': 'The size of the public key space in bits.', + 'threat.enrichments.indicator.x509.serial_number': + 'Unique serial number issued by the certificate authority.', + 'threat.enrichments.indicator.x509.signature_algorithm': + 'Identifier for certificate signature algorithm.', + 'threat.enrichments.indicator.x509.subject.common_name': 'List of common names (CN) of subject.', + 'threat.enrichments.indicator.x509.subject.country': 'List of country (C) code', + 'threat.enrichments.indicator.x509.subject.distinguished_name': + 'Distinguished name (DN) of the certificate subject entity.', + 'threat.enrichments.indicator.x509.subject.locality': 'List of locality names (L)', + 'threat.enrichments.indicator.x509.subject.organization': 'List of organizations (O) of subject.', + 'threat.enrichments.indicator.x509.subject.organizational_unit': + 'List of organizational units (OU) of subject.', + 'threat.enrichments.indicator.x509.subject.state_or_province': + 'List of state or province names (ST, S, or P)', + 'threat.enrichments.indicator.x509.version_number': 'Version of x509 format.', + 'threat.enrichments.matched.atomic': 'Matched indicator value', + 'threat.enrichments.matched.field': 'Matched indicator field', + 'threat.enrichments.matched.id': 'Matched indicator identifier', + 'threat.enrichments.matched.index': 'Matched indicator index', + 'threat.enrichments.matched.occurred': 'Date of match', + 'threat.enrichments.matched.type': 'Type of indicator match', + 'threat.feed.dashboard_id': 'Feed dashboard ID.', + 'threat.feed.description': 'Description of the threat feed.', + 'threat.feed.name': 'Name of the threat feed.', + 'threat.feed.reference': 'Reference for the threat feed.', + 'threat.framework': 'Threat classification framework.', + 'threat.group.alias': 'Alias of the group.', + 'threat.group.id': 'ID of the group.', + 'threat.group.name': 'Name of the group.', + 'threat.group.reference': 'Reference URL of the group.', + 'threat.indicator.as.number': 'Unique number allocated to the autonomous system.', + 'threat.indicator.as.organization.name': 'Organization name.', + 'threat.indicator.confidence': 'Indicator confidence rating', + 'threat.indicator.description': 'Indicator description', + 'threat.indicator.email.address': 'Indicator email address', + 'threat.indicator.file.accessed': 'Last time the file was accessed.', + 'threat.indicator.file.attributes': 'Array of file attributes.', + 'threat.indicator.file.code_signature.digest_algorithm': + 'Hashing algorithm used to sign the process.', + 'threat.indicator.file.code_signature.exists': 'Boolean to capture if a signature is present.', + 'threat.indicator.file.code_signature.signing_id': 'The identifier used to sign the process.', + 'threat.indicator.file.code_signature.status': + 'Additional information about the certificate status.', + 'threat.indicator.file.code_signature.subject_name': 'Subject name of the code signer', + 'threat.indicator.file.code_signature.team_id': 'The team identifier used to sign the process.', + 'threat.indicator.file.code_signature.timestamp': 'When the signature was generated and signed.', + 'threat.indicator.file.code_signature.trusted': + 'Stores the trust status of the certificate chain.', + 'threat.indicator.file.code_signature.valid': + 'Boolean to capture if the digital signature is verified against the binary content.', + 'threat.indicator.file.created': 'File creation time.', + 'threat.indicator.file.ctime': 'Last time the file attributes or metadata changed.', + 'threat.indicator.file.device': 'Device that is the source of the file.', + 'threat.indicator.file.directory': 'Directory where the file is located.', + 'threat.indicator.file.drive_letter': 'Drive letter where the file is located.', + 'threat.indicator.file.elf.architecture': 'Machine architecture of the ELF file.', + 'threat.indicator.file.elf.byte_order': 'Byte sequence of ELF file.', + 'threat.indicator.file.elf.cpu_type': 'CPU type of the ELF file.', + 'threat.indicator.file.elf.creation_date': 'Build or compile date.', + 'threat.indicator.file.elf.exports': 'List of exported element names and types.', + 'threat.indicator.file.elf.go_import_hash': 'A hash of the Go language imports in an ELF file.', + 'threat.indicator.file.elf.go_imports': 'List of imported Go language element names and types.', + 'threat.indicator.file.elf.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'threat.indicator.file.elf.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'threat.indicator.file.elf.go_stripped': + 'Whether the file is a stripped or obfuscated Go executable.', + 'threat.indicator.file.elf.header.abi_version': + 'Version of the ELF Application Binary Interface (ABI).', + 'threat.indicator.file.elf.header.class': 'Header class of the ELF file.', + 'threat.indicator.file.elf.header.data': 'Data table of the ELF header.', + 'threat.indicator.file.elf.header.entrypoint': 'Header entrypoint of the ELF file.', + 'threat.indicator.file.elf.header.object_version': '"0x1" for original ELF files.', + 'threat.indicator.file.elf.header.os_abi': 'Application Binary Interface (ABI) of the Linux OS.', + 'threat.indicator.file.elf.header.type': 'Header type of the ELF file.', + 'threat.indicator.file.elf.header.version': 'Version of the ELF header.', + 'threat.indicator.file.elf.import_hash': 'A hash of the imports in an ELF file.', + 'threat.indicator.file.elf.imports': 'List of imported element names and types.', + 'threat.indicator.file.elf.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'threat.indicator.file.elf.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'threat.indicator.file.elf.sections': 'Section information of the ELF file.', + 'threat.indicator.file.elf.sections.chi2': 'Chi-square probability distribution of the section.', + 'threat.indicator.file.elf.sections.entropy': 'Shannon entropy calculation from the section.', + 'threat.indicator.file.elf.sections.flags': 'ELF Section List flags.', + 'threat.indicator.file.elf.sections.name': 'ELF Section List name.', + 'threat.indicator.file.elf.sections.physical_offset': 'ELF Section List offset.', + 'threat.indicator.file.elf.sections.physical_size': 'ELF Section List physical size.', + 'threat.indicator.file.elf.sections.type': 'ELF Section List type.', + 'threat.indicator.file.elf.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'threat.indicator.file.elf.sections.virtual_address': 'ELF Section List virtual address.', + 'threat.indicator.file.elf.sections.virtual_size': 'ELF Section List virtual size.', + 'threat.indicator.file.elf.segments': 'ELF object segment list.', + 'threat.indicator.file.elf.segments.sections': 'ELF object segment sections.', + 'threat.indicator.file.elf.segments.type': 'ELF object segment type.', + 'threat.indicator.file.elf.shared_libraries': 'List of shared libraries used by this ELF object.', + 'threat.indicator.file.elf.telfhash': 'telfhash hash for ELF file.', + 'threat.indicator.file.extension': 'File extension, excluding the leading dot.', + 'threat.indicator.file.fork_name': + 'A fork is additional data associated with a filesystem object.', + 'threat.indicator.file.gid': 'Primary group ID (GID) of the file.', + 'threat.indicator.file.group': 'Primary group name of the file.', + 'threat.indicator.file.hash.md5': 'MD5 hash.', + 'threat.indicator.file.hash.sha1': 'SHA1 hash.', + 'threat.indicator.file.hash.sha256': 'SHA256 hash.', + 'threat.indicator.file.hash.sha384': 'SHA384 hash.', + 'threat.indicator.file.hash.sha512': 'SHA512 hash.', + 'threat.indicator.file.hash.ssdeep': 'SSDEEP hash.', + 'threat.indicator.file.hash.tlsh': 'TLSH hash.', + 'threat.indicator.file.inode': 'Inode representing the file in the filesystem.', + 'threat.indicator.file.mime_type': 'Media type of file, document, or arrangement of bytes.', + 'threat.indicator.file.mode': 'Mode of the file in octal representation.', + 'threat.indicator.file.mtime': 'Last time the file content was modified.', + 'threat.indicator.file.name': 'Name of the file including the extension, without the directory.', + 'threat.indicator.file.owner': 'File owners username.', + 'threat.indicator.file.path': 'Full path to the file, including the file name.', + 'threat.indicator.file.pe.architecture': 'CPU architecture target for the file.', + 'threat.indicator.file.pe.company': + 'Internal company name of the file, provided at compile-time.', + 'threat.indicator.file.pe.description': + 'Internal description of the file, provided at compile-time.', + 'threat.indicator.file.pe.file_version': 'Process name.', + 'threat.indicator.file.pe.go_import_hash': 'A hash of the Go language imports in a PE file.', + 'threat.indicator.file.pe.go_imports': 'List of imported Go language element names and types.', + 'threat.indicator.file.pe.go_imports_names_entropy': + 'Shannon entropy calculation from the list of Go imports.', + 'threat.indicator.file.pe.go_imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of Go imports.', + 'threat.indicator.file.pe.go_stripped': + 'Whether the file is a stripped or obfuscated Go executable.', + 'threat.indicator.file.pe.imphash': 'A hash of the imports in a PE file.', + 'threat.indicator.file.pe.import_hash': 'A hash of the imports in a PE file.', + 'threat.indicator.file.pe.imports': 'List of imported element names and types.', + 'threat.indicator.file.pe.imports_names_entropy': + 'Shannon entropy calculation from the list of imported element names and types.', + 'threat.indicator.file.pe.imports_names_var_entropy': + 'Variance for Shannon entropy calculation from the list of imported element names and types.', + 'threat.indicator.file.pe.original_file_name': + 'Internal name of the file, provided at compile-time.', + 'threat.indicator.file.pe.pehash': + 'A hash of the PE header and data from one or more PE sections.', + 'threat.indicator.file.pe.product': + 'Internal product name of the file, provided at compile-time.', + 'threat.indicator.file.pe.sections': 'Section information of the PE file.', + 'threat.indicator.file.pe.sections.entropy': 'Shannon entropy calculation from the section.', + 'threat.indicator.file.pe.sections.name': 'PE Section List name.', + 'threat.indicator.file.pe.sections.physical_size': 'PE Section List physical size.', + 'threat.indicator.file.pe.sections.var_entropy': + 'Variance for Shannon entropy calculation from the section.', + 'threat.indicator.file.pe.sections.virtual_size': + 'PE Section List virtual size. This is always the same as `physical_size`.', + 'threat.indicator.file.size': 'File size in bytes.', + 'threat.indicator.file.target_path': 'Target path for symlinks.', + 'threat.indicator.file.type': 'File type (file, dir, or symlink).', + 'threat.indicator.file.uid': 'The user ID (UID) or security identifier (SID) of the file owner.', + 'threat.indicator.file.x509.alternative_names': 'List of subject alternative names (SAN).', + 'threat.indicator.file.x509.issuer.common_name': + 'List of common name (CN) of issuing certificate authority.', + 'threat.indicator.file.x509.issuer.country': 'List of country (C) codes', + 'threat.indicator.file.x509.issuer.distinguished_name': + 'Distinguished name (DN) of issuing certificate authority.', + 'threat.indicator.file.x509.issuer.locality': 'List of locality names (L)', + 'threat.indicator.file.x509.issuer.organization': + 'List of organizations (O) of issuing certificate authority.', + 'threat.indicator.file.x509.issuer.organizational_unit': + 'List of organizational units (OU) of issuing certificate authority.', + 'threat.indicator.file.x509.issuer.state_or_province': + 'List of state or province names (ST, S, or P)', + 'threat.indicator.file.x509.not_after': + 'Time at which the certificate is no longer considered valid.', + 'threat.indicator.file.x509.not_before': + 'Time at which the certificate is first considered valid.', + 'threat.indicator.file.x509.public_key_algorithm': 'Algorithm used to generate the public key.', + 'threat.indicator.file.x509.public_key_curve': + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + 'threat.indicator.file.x509.public_key_exponent': + 'Exponent used to derive the public key. This is algorithm specific.', + 'threat.indicator.file.x509.public_key_size': 'The size of the public key space in bits.', + 'threat.indicator.file.x509.serial_number': + 'Unique serial number issued by the certificate authority.', + 'threat.indicator.file.x509.signature_algorithm': + 'Identifier for certificate signature algorithm.', + 'threat.indicator.file.x509.subject.common_name': 'List of common names (CN) of subject.', + 'threat.indicator.file.x509.subject.country': 'List of country (C) code', + 'threat.indicator.file.x509.subject.distinguished_name': + 'Distinguished name (DN) of the certificate subject entity.', + 'threat.indicator.file.x509.subject.locality': 'List of locality names (L)', + 'threat.indicator.file.x509.subject.organization': 'List of organizations (O) of subject.', + 'threat.indicator.file.x509.subject.organizational_unit': + 'List of organizational units (OU) of subject.', + 'threat.indicator.file.x509.subject.state_or_province': + 'List of state or province names (ST, S, or P)', + 'threat.indicator.file.x509.version_number': 'Version of x509 format.', + 'threat.indicator.first_seen': 'Date/time indicator was first reported.', + 'threat.indicator.geo.city_name': 'City name.', + 'threat.indicator.geo.continent_code': 'Continent code.', + 'threat.indicator.geo.continent_name': 'Name of the continent.', + 'threat.indicator.geo.country_iso_code': 'Country ISO code.', + 'threat.indicator.geo.country_name': 'Country name.', + 'threat.indicator.geo.location': 'Longitude and latitude.', + 'threat.indicator.geo.name': 'User-defined description of a location.', + 'threat.indicator.geo.postal_code': 'Postal code.', + 'threat.indicator.geo.region_iso_code': 'Region ISO code.', + 'threat.indicator.geo.region_name': 'Region name.', + 'threat.indicator.geo.timezone': 'Time zone.', + 'threat.indicator.ip': 'Indicator IP address', + 'threat.indicator.last_seen': 'Date/time indicator was last reported.', + 'threat.indicator.marking.tlp': 'Indicator TLP marking', + 'threat.indicator.marking.tlp_version': 'Indicator TLP version', + 'threat.indicator.modified_at': 'Date/time indicator was last updated.', + 'threat.indicator.name': 'Indicator display name', + 'threat.indicator.port': 'Indicator port', + 'threat.indicator.provider': 'Indicator provider', + 'threat.indicator.reference': 'Indicator reference URL', + 'threat.indicator.registry.data.bytes': 'Original bytes written with base64 encoding.', + 'threat.indicator.registry.data.strings': + 'List of strings representing what was written to the registry.', + 'threat.indicator.registry.data.type': 'Standard registry type for encoding contents', + 'threat.indicator.registry.hive': 'Abbreviated name for the hive.', + 'threat.indicator.registry.key': 'Hive-relative path of keys.', + 'threat.indicator.registry.path': 'Full path, including hive, key and value', + 'threat.indicator.registry.value': 'Name of the value written.', + 'threat.indicator.scanner_stats': 'Scanner statistics', + 'threat.indicator.sightings': 'Number of times indicator observed', + 'threat.indicator.type': 'Type of indicator', + 'threat.indicator.url.domain': 'Domain of the url.', + 'threat.indicator.url.extension': + 'File extension from the request url, excluding the leading dot.', + 'threat.indicator.url.fragment': 'Portion of the url after the `#`.', + 'threat.indicator.url.full': 'Full unparsed URL.', + 'threat.indicator.url.original': 'Unmodified original url as seen in the event source.', + 'threat.indicator.url.password': 'Password of the request.', + 'threat.indicator.url.path': 'Path of the request, such as "/search".', + 'threat.indicator.url.port': 'Port of the request, such as 443.', + 'threat.indicator.url.query': 'Query string of the request.', + 'threat.indicator.url.registered_domain': + 'The highest registered url domain, stripped of the subdomain.', + 'threat.indicator.url.scheme': 'Scheme of the url.', + 'threat.indicator.url.subdomain': 'The subdomain of the domain.', + 'threat.indicator.url.top_level_domain': 'The effective top level domain (com, org, net, co.uk).', + 'threat.indicator.url.username': 'Username of the request.', + 'threat.indicator.x509.alternative_names': 'List of subject alternative names (SAN).', + 'threat.indicator.x509.issuer.common_name': + 'List of common name (CN) of issuing certificate authority.', + 'threat.indicator.x509.issuer.country': 'List of country (C) codes', + 'threat.indicator.x509.issuer.distinguished_name': + 'Distinguished name (DN) of issuing certificate authority.', + 'threat.indicator.x509.issuer.locality': 'List of locality names (L)', + 'threat.indicator.x509.issuer.organization': + 'List of organizations (O) of issuing certificate authority.', + 'threat.indicator.x509.issuer.organizational_unit': + 'List of organizational units (OU) of issuing certificate authority.', + 'threat.indicator.x509.issuer.state_or_province': 'List of state or province names (ST, S, or P)', + 'threat.indicator.x509.not_after': 'Time at which the certificate is no longer considered valid.', + 'threat.indicator.x509.not_before': 'Time at which the certificate is first considered valid.', + 'threat.indicator.x509.public_key_algorithm': 'Algorithm used to generate the public key.', + 'threat.indicator.x509.public_key_curve': + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + 'threat.indicator.x509.public_key_exponent': + 'Exponent used to derive the public key. This is algorithm specific.', + 'threat.indicator.x509.public_key_size': 'The size of the public key space in bits.', + 'threat.indicator.x509.serial_number': + 'Unique serial number issued by the certificate authority.', + 'threat.indicator.x509.signature_algorithm': 'Identifier for certificate signature algorithm.', + 'threat.indicator.x509.subject.common_name': 'List of common names (CN) of subject.', + 'threat.indicator.x509.subject.country': 'List of country (C) code', + 'threat.indicator.x509.subject.distinguished_name': + 'Distinguished name (DN) of the certificate subject entity.', + 'threat.indicator.x509.subject.locality': 'List of locality names (L)', + 'threat.indicator.x509.subject.organization': 'List of organizations (O) of subject.', + 'threat.indicator.x509.subject.organizational_unit': + 'List of organizational units (OU) of subject.', + 'threat.indicator.x509.subject.state_or_province': + 'List of state or province names (ST, S, or P)', + 'threat.indicator.x509.version_number': 'Version of x509 format.', + 'threat.software.alias': 'Alias of the software', + 'threat.software.id': 'ID of the software', + 'threat.software.name': 'Name of the software.', + 'threat.software.platforms': 'Platforms of the software.', + 'threat.software.reference': 'Software reference URL.', + 'threat.software.type': 'Software type.', + 'threat.tactic.id': 'Threat tactic id.', + 'threat.tactic.name': 'Threat tactic.', + 'threat.tactic.reference': 'Threat tactic URL reference.', + 'threat.technique.id': 'Threat technique id.', + 'threat.technique.name': 'Threat technique name.', + 'threat.technique.reference': 'Threat technique URL reference.', + 'threat.technique.subtechnique.id': 'Threat subtechnique id.', + 'threat.technique.subtechnique.name': 'Threat subtechnique name.', + 'threat.technique.subtechnique.reference': 'Threat subtechnique URL reference.', + 'tls.cipher': 'String indicating the cipher used during the current connection.', + 'tls.client.certificate': 'PEM-encoded stand-alone certificate offered by the client.', + 'tls.client.certificate_chain': + 'Array of PEM-encoded certificates that make up the certificate chain offered by the client.', + 'tls.client.hash.md5': + 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client.', + 'tls.client.hash.sha1': + 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client.', + 'tls.client.hash.sha256': + 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client.', + 'tls.client.issuer': + 'Distinguished name of subject of the issuer of the x.509 certificate presented by the client.', + 'tls.client.ja3': + 'A hash that identifies clients based on how they perform an SSL/TLS handshake.', + 'tls.client.not_after': + 'Date/Time indicating when client certificate is no longer considered valid.', + 'tls.client.not_before': + 'Date/Time indicating when client certificate is first considered valid.', + 'tls.client.server_name': 'Hostname the client is trying to connect to. Also called the SNI.', + 'tls.client.subject': + 'Distinguished name of subject of the x.509 certificate presented by the client.', + 'tls.client.supported_ciphers': 'Array of ciphers offered by the client during the client hello.', + 'tls.client.x509.alternative_names': 'List of subject alternative names (SAN).', + 'tls.client.x509.issuer.common_name': + 'List of common name (CN) of issuing certificate authority.', + 'tls.client.x509.issuer.country': 'List of country (C) codes', + 'tls.client.x509.issuer.distinguished_name': + 'Distinguished name (DN) of issuing certificate authority.', + 'tls.client.x509.issuer.locality': 'List of locality names (L)', + 'tls.client.x509.issuer.organization': + 'List of organizations (O) of issuing certificate authority.', + 'tls.client.x509.issuer.organizational_unit': + 'List of organizational units (OU) of issuing certificate authority.', + 'tls.client.x509.issuer.state_or_province': 'List of state or province names (ST, S, or P)', + 'tls.client.x509.not_after': 'Time at which the certificate is no longer considered valid.', + 'tls.client.x509.not_before': 'Time at which the certificate is first considered valid.', + 'tls.client.x509.public_key_algorithm': 'Algorithm used to generate the public key.', + 'tls.client.x509.public_key_curve': + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + 'tls.client.x509.public_key_exponent': + 'Exponent used to derive the public key. This is algorithm specific.', + 'tls.client.x509.public_key_size': 'The size of the public key space in bits.', + 'tls.client.x509.serial_number': 'Unique serial number issued by the certificate authority.', + 'tls.client.x509.signature_algorithm': 'Identifier for certificate signature algorithm.', + 'tls.client.x509.subject.common_name': 'List of common names (CN) of subject.', + 'tls.client.x509.subject.country': 'List of country (C) code', + 'tls.client.x509.subject.distinguished_name': + 'Distinguished name (DN) of the certificate subject entity.', + 'tls.client.x509.subject.locality': 'List of locality names (L)', + 'tls.client.x509.subject.organization': 'List of organizations (O) of subject.', + 'tls.client.x509.subject.organizational_unit': 'List of organizational units (OU) of subject.', + 'tls.client.x509.subject.state_or_province': 'List of state or province names (ST, S, or P)', + 'tls.client.x509.version_number': 'Version of x509 format.', + 'tls.curve': 'String indicating the curve used for the given cipher, when applicable.', + 'tls.established': + 'Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.', + 'tls.next_protocol': 'String indicating the protocol being tunneled.', + 'tls.resumed': + 'Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.', + 'tls.server.certificate': 'PEM-encoded stand-alone certificate offered by the server.', + 'tls.server.certificate_chain': + 'Array of PEM-encoded certificates that make up the certificate chain offered by the server.', + 'tls.server.hash.md5': + 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server.', + 'tls.server.hash.sha1': + 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server.', + 'tls.server.hash.sha256': + 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server.', + 'tls.server.issuer': 'Subject of the issuer of the x.509 certificate presented by the server.', + 'tls.server.ja3s': + 'A hash that identifies servers based on how they perform an SSL/TLS handshake.', + 'tls.server.not_after': + 'Timestamp indicating when server certificate is no longer considered valid.', + 'tls.server.not_before': + 'Timestamp indicating when server certificate is first considered valid.', + 'tls.server.subject': 'Subject of the x.509 certificate presented by the server.', + 'tls.server.x509.alternative_names': 'List of subject alternative names (SAN).', + 'tls.server.x509.issuer.common_name': + 'List of common name (CN) of issuing certificate authority.', + 'tls.server.x509.issuer.country': 'List of country (C) codes', + 'tls.server.x509.issuer.distinguished_name': + 'Distinguished name (DN) of issuing certificate authority.', + 'tls.server.x509.issuer.locality': 'List of locality names (L)', + 'tls.server.x509.issuer.organization': + 'List of organizations (O) of issuing certificate authority.', + 'tls.server.x509.issuer.organizational_unit': + 'List of organizational units (OU) of issuing certificate authority.', + 'tls.server.x509.issuer.state_or_province': 'List of state or province names (ST, S, or P)', + 'tls.server.x509.not_after': 'Time at which the certificate is no longer considered valid.', + 'tls.server.x509.not_before': 'Time at which the certificate is first considered valid.', + 'tls.server.x509.public_key_algorithm': 'Algorithm used to generate the public key.', + 'tls.server.x509.public_key_curve': + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + 'tls.server.x509.public_key_exponent': + 'Exponent used to derive the public key. This is algorithm specific.', + 'tls.server.x509.public_key_size': 'The size of the public key space in bits.', + 'tls.server.x509.serial_number': 'Unique serial number issued by the certificate authority.', + 'tls.server.x509.signature_algorithm': 'Identifier for certificate signature algorithm.', + 'tls.server.x509.subject.common_name': 'List of common names (CN) of subject.', + 'tls.server.x509.subject.country': 'List of country (C) code', + 'tls.server.x509.subject.distinguished_name': + 'Distinguished name (DN) of the certificate subject entity.', + 'tls.server.x509.subject.locality': 'List of locality names (L)', + 'tls.server.x509.subject.organization': 'List of organizations (O) of subject.', + 'tls.server.x509.subject.organizational_unit': 'List of organizational units (OU) of subject.', + 'tls.server.x509.subject.state_or_province': 'List of state or province names (ST, S, or P)', + 'tls.server.x509.version_number': 'Version of x509 format.', + 'tls.version': 'Numeric part of the version parsed from the original string.', + 'tls.version_protocol': 'Normalized lowercase protocol name parsed from original string.', + 'trace.id': 'Unique identifier of the trace.', + 'transaction.id': 'Unique identifier of the transaction within the scope of its trace.', + 'url.domain': 'Domain of the url.', + 'url.extension': 'File extension from the request url, excluding the leading dot.', + 'url.fragment': 'Portion of the url after the `#`.', + 'url.full': 'Full unparsed URL.', + 'url.original': 'Unmodified original url as seen in the event source.', + 'url.password': 'Password of the request.', + 'url.path': 'Path of the request, such as "/search".', + 'url.port': 'Port of the request, such as 443.', + 'url.query': 'Query string of the request.', + 'url.registered_domain': 'The highest registered url domain, stripped of the subdomain.', + 'url.scheme': 'Scheme of the url.', + 'url.subdomain': 'The subdomain of the domain.', + 'url.top_level_domain': 'The effective top level domain (com, org, net, co.uk).', + 'url.username': 'Username of the request.', + 'user.changes.domain': 'Name of the directory the user is a member of.', + 'user.changes.email': 'User email address.', + 'user.changes.full_name': 'Users full name, if available.', + 'user.changes.group.domain': 'Name of the directory the group is a member of.', + 'user.changes.group.id': 'Unique identifier for the group on the system/platform.', + 'user.changes.group.name': 'Name of the group.', + 'user.changes.hash': 'Unique user hash to correlate information for a user in anonymized form.', + 'user.changes.id': 'Unique identifier of the user.', + 'user.changes.name': 'Short name or login of the user.', + 'user.changes.roles': 'Array of user roles at the time of the event.', + 'user.domain': 'Name of the directory the user is a member of.', + 'user.effective.domain': 'Name of the directory the user is a member of.', + 'user.effective.email': 'User email address.', + 'user.effective.full_name': 'Users full name, if available.', + 'user.effective.group.domain': 'Name of the directory the group is a member of.', + 'user.effective.group.id': 'Unique identifier for the group on the system/platform.', + 'user.effective.group.name': 'Name of the group.', + 'user.effective.hash': 'Unique user hash to correlate information for a user in anonymized form.', + 'user.effective.id': 'Unique identifier of the user.', + 'user.effective.name': 'Short name or login of the user.', + 'user.effective.roles': 'Array of user roles at the time of the event.', + 'user.email': 'User email address.', + 'user.full_name': 'Users full name, if available.', + 'user.group.domain': 'Name of the directory the group is a member of.', + 'user.group.id': 'Unique identifier for the group on the system/platform.', + 'user.group.name': 'Name of the group.', + 'user.hash': 'Unique user hash to correlate information for a user in anonymized form.', + 'user.id': 'Unique identifier of the user.', + 'user.name': 'Short name or login of the user.', + 'user.risk.calculated_level': + 'A risk classification level calculated by an internal system as part of entity analytics and entity risk scoring.', + 'user.risk.calculated_score': + 'A risk classification score calculated by an internal system as part of entity analytics and entity risk scoring.', + 'user.risk.calculated_score_norm': 'A normalized risk score calculated by an internal system.', + 'user.risk.static_level': + 'A risk classification level obtained from outside the system, such as from some external Threat Intelligence Platform.', + 'user.risk.static_score': + 'A risk classification score obtained from outside the system, such as from some external Threat Intelligence Platform.', + 'user.risk.static_score_norm': 'A normalized risk score calculated by an external system.', + 'user.roles': 'Array of user roles at the time of the event.', + 'user.target.domain': 'Name of the directory the user is a member of.', + 'user.target.email': 'User email address.', + 'user.target.full_name': 'Users full name, if available.', + 'user.target.group.domain': 'Name of the directory the group is a member of.', + 'user.target.group.id': 'Unique identifier for the group on the system/platform.', + 'user.target.group.name': 'Name of the group.', + 'user.target.hash': 'Unique user hash to correlate information for a user in anonymized form.', + 'user.target.id': 'Unique identifier of the user.', + 'user.target.name': 'Short name or login of the user.', + 'user.target.roles': 'Array of user roles at the time of the event.', + 'user_agent.device.name': 'Name of the device.', + 'user_agent.name': 'Name of the user agent.', + 'user_agent.original': 'Unparsed user_agent string.', + 'user_agent.os.family': 'OS family (such as redhat, debian, freebsd, windows).', + 'user_agent.os.full': 'Operating system name, including the version or code name.', + 'user_agent.os.kernel': 'Operating system kernel version as a raw string.', + 'user_agent.os.name': 'Operating system name, without the version.', + 'user_agent.os.platform': 'Operating system platform (such centos, ubuntu, windows).', + 'user_agent.os.type': + 'Which commercial OS family (one of: linux, macos, unix, windows, ios or android).', + 'user_agent.os.version': 'Operating system version as a raw string.', + 'user_agent.version': 'Version of the user agent.', + 'volume.bus_type': 'Bus type of the device.', + 'volume.default_access': 'Bus type of the device.', + 'volume.device_name': 'Device name of the volume.', + 'volume.device_type': 'Volume device type.', + 'volume.dos_name': 'DOS name of the device.', + 'volume.file_system_type': 'Volume device file system type.', + 'volume.mount_name': 'Mount name of the volume.', + 'volume.nt_name': 'NT name of the device.', + 'volume.product_id': 'ProductID of the device.', + 'volume.product_name': 'Produce name of the volume.', + 'volume.removable': 'Indicates if the volume is removable.', + 'volume.serial_number': 'Serial number of the device.', + 'volume.size': 'Size of the volume device in bytes.', + 'volume.vendor_id': 'VendorID of the device.', + 'volume.vendor_name': 'Vendor name of the device.', + 'volume.writable': 'Indicates if the volume is writable.', + 'vulnerability.category': 'Category of a vulnerability.', + 'vulnerability.classification': 'Classification of the vulnerability.', + 'vulnerability.description': 'Description of the vulnerability.', + 'vulnerability.enumeration': 'Identifier of the vulnerability.', + 'vulnerability.id': 'ID of the vulnerability.', + 'vulnerability.reference': 'Reference of the vulnerability.', + 'vulnerability.report_id': 'Scan identification number.', + 'vulnerability.scanner.vendor': 'Name of the scanner vendor.', + 'vulnerability.score.base': 'Vulnerability Base score.', + 'vulnerability.score.environmental': 'Vulnerability Environmental score.', + 'vulnerability.score.temporal': 'Vulnerability Temporal score.', + 'vulnerability.score.version': 'CVSS version.', + 'vulnerability.severity': 'Severity of the vulnerability.', +}; diff --git a/x-pack/plugins/integration_assistant/common/index.ts b/x-pack/plugins/integration_assistant/common/index.ts new file mode 100644 index 0000000000000..99b6cb8793a48 --- /dev/null +++ b/x-pack/plugins/integration_assistant/common/index.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export type { + BuildIntegrationApiRequest, + EcsMappingApiRequest, + CategorizationApiRequest, + RelatedApiRequest, + CategorizationApiResponse, + RelatedApiResponse, + EcsMappingApiResponse, + Pipeline, + ESProcessorItem, + ESProcessorOptions, + DataStream, + Integration, + InputTypes, + TestPipelineApiRequest, + TestPipelineApiResponse, +} from './types'; + +export { + PLUGIN_ID, + INTEGRATION_ASSISTANT_APP_ROUTE, + ECS_GRAPH_PATH, + CATEGORIZATION_GRAPH_PATH, + RELATED_GRAPH_PATH, + TEST_PIPELINE_PATH, + INTEGRATION_BUILDER_PATH, + INTEGRATION_ASSISTANT_BASE_PATH, +} from './constants'; diff --git a/x-pack/plugins/integration_assistant/common/types.ts b/x-pack/plugins/integration_assistant/common/types.ts new file mode 100644 index 0000000000000..50da197460e1e --- /dev/null +++ b/x-pack/plugins/integration_assistant/common/types.ts @@ -0,0 +1,119 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface ESProcessorOptions { + on_failure?: ESProcessorItem[]; + ignore_failure?: boolean; + ignore_missing?: boolean; + if?: string; + tag?: string; + [key: string]: unknown; +} + +export interface ESProcessorItem { + [processorName: string]: ESProcessorOptions; +} + +export interface Pipeline { + name?: string; + description?: string; + version?: number; + processors: ESProcessorItem[]; + on_failure?: ESProcessorItem[]; +} + +export enum InputTypes { + Cloudwatch = 'aws-cloudwatch', + S3 = 'aws-s3', + AzureBlobStorage = 'azure-blob-storage', + EventHub = 'azure-eventhub', + Cloudfoundry = 'cloudfoundry', + FileStream = 'filestream', + PubSub = 'gcp-pubsub', + GoogleCloudStorage = 'gcs', + HTTPListener = 'http_endpoint', + Journald = 'journald', + Kafka = 'kafka', + TCP = 'tcp', + UDP = 'udp', +} + +export interface DataStream { + name: string; + title: string; + description: string; + inputTypes: InputTypes[]; + rawSamples: string[]; + pipeline: object; + docs: object[]; +} + +export interface Integration { + name: string; + title: string; + description: string; + dataStreams: DataStream[]; + logo?: string; +} + +// Server Request Schemas +export interface BuildIntegrationApiRequest { + integration: Integration; +} + +export interface EcsMappingApiRequest { + packageName: string; + dataStreamName: string; + rawSamples: string[]; + mapping?: object; +} + +export interface CategorizationApiRequest { + packageName: string; + dataStreamName: string; + rawSamples: string[]; + currentPipeline: object; +} + +export interface RelatedApiRequest { + packageName: string; + dataStreamName: string; + rawSamples: string[]; + currentPipeline: object; +} + +export interface TestPipelineApiRequest { + rawSamples: string[]; + currentPipeline: Pipeline; +} + +// Server Response Schemas +export interface CategorizationApiResponse { + results: { + pipeline: object; + docs: object[]; + }; +} + +export interface RelatedApiResponse { + results: { + pipeline: object; + docs: object[]; + }; +} + +export interface EcsMappingApiResponse { + results: { + mapping: object; + pipeline: object; + }; +} + +export interface TestPipelineApiResponse { + pipelineResults: object[]; + errors?: object[]; +} diff --git a/x-pack/plugins/integration_assistant/jest.config.js b/x-pack/plugins/integration_assistant/jest.config.js new file mode 100644 index 0000000000000..5da1e904b8894 --- /dev/null +++ b/x-pack/plugins/integration_assistant/jest.config.js @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/x-pack/plugins/integration_assistant'], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/integration_assistant', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/plugins/integration_assistant/{common,server}/**/*.{ts,tsx}', + '!/x-pack/plugins/integration_assistant/{__jest__}/**/*', + '!/x-pack/plugins/integration_assistant/*.test.{ts,tsx}', + '!/x-pack/plugins/integration_assistant/*.config.ts', + ], + setupFiles: ['jest-canvas-mock'], +}; diff --git a/x-pack/plugins/integration_assistant/kibana.jsonc b/x-pack/plugins/integration_assistant/kibana.jsonc new file mode 100644 index 0000000000000..9ce4f435c893b --- /dev/null +++ b/x-pack/plugins/integration_assistant/kibana.jsonc @@ -0,0 +1,15 @@ +{ + "type": "plugin", + "id": "@kbn/integration-assistant-plugin", + "owner": "@elastic/security-solution", + "description": "A simple example of how to use core's routing services test", + "plugin": { + "id": "integrationAssistant", + "server": true, + "browser": false, + "configPath": ["xpack", "integration_assistant"], + "requiredPlugins": ["actions", "licensing", "management", "features", "share", "fileUpload"], + "optionalPlugins": ["security", "usageCollection", "console"], + "extraPublicDirs": ["common"] + } +} diff --git a/x-pack/plugins/integration_assistant/server/config.ts b/x-pack/plugins/integration_assistant/server/config.ts new file mode 100644 index 0000000000000..c8c81b9f63743 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/config.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema, type TypeOf } from '@kbn/config-schema'; +import type { PluginConfigDescriptor } from '@kbn/core/server'; + +export const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: false }), +}); +export type ServerlessSecuritySchema = TypeOf; + +export const config: PluginConfigDescriptor = { + schema: configSchema, +}; diff --git a/x-pack/plugins/integration_assistant/server/constants.ts b/x-pack/plugins/integration_assistant/server/constants.ts new file mode 100644 index 0000000000000..1c4ed1918d310 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/constants.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const ROUTE_HANDLER_TIMEOUT = 10 * 60 * 1000; // 10 * 60 seconds = 10 minutes +export const LANG_CHAIN_TIMEOUT = ROUTE_HANDLER_TIMEOUT - 10_000; // 9 minutes 50 seconds +export const CONNECTOR_TIMEOUT = LANG_CHAIN_TIMEOUT - 10_000; // 9 minutes 40 seconds diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/categorization.test.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/categorization.test.ts new file mode 100644 index 0000000000000..3ad0926297bbc --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/categorization.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleCategorization } from './categorization'; +import type { CategorizationState } from '../../types'; +import { + categorizationTestState, + categorizationMockProcessors, + categorizationExpectedHandlerResponse, +} from '../../../__jest__/fixtures/categorization'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: JSON.stringify(categorizationMockProcessors, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: CategorizationState = categorizationTestState; + +describe('Testing categorization handler', () => { + it('handleCategorization()', async () => { + const response = await handleCategorization(testState, mockLlm); + expect(response.currentPipeline).toStrictEqual( + categorizationExpectedHandlerResponse.currentPipeline + ); + expect(response.lastExecutedChain).toBe('categorization'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/categorization.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/categorization.ts new file mode 100644 index 0000000000000..ed1a88c3a1cfd --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/categorization.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { ESProcessorItem, Pipeline } from '../../../common'; +import type { CategorizationState } from '../../types'; +import { combineProcessors } from '../../util/processors'; +import { CATEGORIZATION_MAIN_PROMPT } from './prompts'; + +export async function handleCategorization( + state: CategorizationState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const categorizationMainPrompt = CATEGORIZATION_MAIN_PROMPT; + const outputParser = new JsonOutputParser(); + const categorizationMainGraph = categorizationMainPrompt.pipe(model).pipe(outputParser); + + const currentProcessors = (await categorizationMainGraph.invoke({ + pipeline_results: JSON.stringify(state.pipelineResults, null, 2), + ex_answer: state?.exAnswer, + ecs_categories: state?.ecsCategories, + ecs_types: state?.ecsTypes, + })) as ESProcessorItem[]; + + const currentPipeline = combineProcessors(state.initialPipeline as Pipeline, currentProcessors); + + return { + currentPipeline, + currentProcessors, + lastExecutedChain: 'categorization', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/constants.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/constants.ts new file mode 100644 index 0000000000000..ca875c15f026d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/constants.ts @@ -0,0 +1,242 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export const ECS_CATEGORIES = { + api: 'Covers events from API calls, including those from OS and network protocols. Allowed event.type combinations: access, admin, allowed, change, creation, deletion, denied, end, info, start, user', + authentication: + 'Focuses on login and credential verification processes. Allowed event.type combinations: start, end, info', + configuration: + 'Deals with application, process, or system settings changes. Allowed event.type combinations: access, change, creation, deletion, info', + database: + 'Relates to data storage systems, such as SQL or Elasticsearch. Allowed event.type combinations: access, change, info, error', + driver: + 'Involves OS device driver activities. Allowed event.type combinations: change, end, info, start', + email: 'Covers events from email messages and protocols. Allowed event.type combinations: info', + file: 'Related to file creation, access, and deletion. Allowed event.type combinations: access, change, creation, deletion, info', + host: 'Provides information about hosts, excluding activity on them. Allowed event.type combinations: access, change, end, info, start', + iam: 'Concerns users, groups, and administration events. Allowed event.type combinations: admin, change, creation, deletion, group, info, user', + intrusion_detection: + 'Detects intrusions from IDS/IPS systems. Allowed event.type combinations: allowed, denied, info', + library: + 'Refers to the loading of libraries into processes. Allowed event.type combinations: start', + malware: 'Focuses on malware detection events and alerts. Allowed event.type combinations: info', + network: + 'Captures all network-related activities. Allowed event.type combinations: access, allowed, connection, denied, end, info, protocol, start', + package: + 'Concerns software packages on hosts. Allowed event.type combinations: access, change, deletion, info, installation, start', + process: + 'Addresses process-specific details. Allowed event.type combinations: access, change, end, info, start', + registry: + 'Focuses on Windows registry settings. Allowed event.type combinations: access, change, creation, deletion', + session: + 'Relates to persistent connections to hosts/services. Allowed event.type combinations: start, end, info', + threat: + "Describes threat actors' intentions and behaviors. Allowed event.type combinations: indicator", + vulnerability: 'Pertain to vulnerability scan outcomes. Allowed event.type combinations: info', + web: 'Concerns web server access events. access, error, Allowed event.type combinations: info', +}; + +export const ECS_TYPES = { + access: 'Used to indicate something was accessed. Examples include accessing databases or files.', + admin: + 'Pertains to events related to admin objects, like administrative changes in IAM not tied to specific users or groups.', + allowed: + 'Indicates that a certain action or event was permitted, like firewall connections that were permitted.', + change: + 'Used for events indicating that something has changed, such as modifications in files or processes.', + connection: + 'Mainly for network-related events, capturing details sufficient for flow or connection analysis, like Netflow or IPFIX events.', + creation: 'Denotes that something was created. A typical example is file creation.', + deletion: 'Indicates that something was removed or deleted, for instance, file deletions.', + denied: + 'Refers to events where something was denied or blocked, such as a network connection that was blocked by a firewall.', + end: 'Suggests that something has concluded or ended, like a process.', + error: + 'Used for events that describe errors, but not errors during event ingestion. For instance, database errors.', + group: + 'Pertains to group-related events within categories, like creation or modification of user groups in IAM.', + indicator: + 'Represents events that contain indicators of compromise (IOCs), commonly associated with threat detection.', + info: "Denotes purely informational events that don't imply a state change or an action. For example, system information logs.", + installation: 'Indicates that something was installed, typically software or packages.', + protocol: + 'Used for events containing detailed protocol analysis, beyond just naming the protocol, especially in network events.', + start: 'Signals the commencement of something, such as a process.', + user: 'Relates to user-centric events within categories, like user creation or deletion in IAM.', +}; + +export const EVENT_TYPES = [ + 'access', + 'admin', + 'allowed', + 'change', + 'connection', + 'creation', + 'deletion', + 'denied', + 'end', + 'error', + 'group', + 'indicator', + 'info', + 'installation', + 'protocol', + 'start', + 'user', +]; + +export const EVENT_CATEGORIES = [ + 'api', + 'authentication', + 'configuration', + 'database', + 'driver', + 'email', + 'file', + 'host', + 'iam', + 'intrusion_detection', + 'library', + 'malware', + 'network', + 'package', + 'process', + 'registry', + 'session', + 'threat', + 'vulnerability', + 'web', +]; + +export type EventCategories = + | 'api' + | 'authentication' + | 'configuration' + | 'database' + | 'driver' + | 'email' + | 'file' + | 'host' + | 'iam' + | 'intrusion_detection' + | 'library' + | 'network' + | 'package' + | 'process' + | 'registry' + | 'session' + | 'threat' + | 'user' + | 'vulnerability' + | 'web'; + +export const ECS_EVENT_TYPES_PER_CATEGORY: { + [key in EventCategories]: string[]; +} = { + api: [ + 'access', + 'admin', + 'allowed', + 'change', + 'creation', + 'deletion', + 'denied', + 'end', + 'info', + 'start', + 'user', + ], + authentication: ['start', 'end', 'info'], + configuration: ['access', 'change', 'creation', 'deletion', 'info'], + database: ['access', 'change', 'info', 'error'], + driver: ['change', 'end', 'info', 'start'], + email: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + file: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + host: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + iam: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + intrusion_detection: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + library: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + network: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + package: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + process: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + registry: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + session: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + threat: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + user: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + vulnerability: ['access', 'change', 'creation', 'deletion', 'info', 'start'], + web: ['access', 'change', 'creation', 'deletion', 'info', 'start'], +}; + +export const CATEGORIZATION_EXAMPLE_PROCESSORS = ` +If condition that determines if ctx.checkpoint?.operation is not of a specific value: +{ + "append": { + "field": "event.category", + "value": "network", + "allow_duplicates": false, + "if": "ctx.checkpoint?.operation != 'Log In'" + } +} + +If condition that determines if ctx.checkpoint?.operation is of a specific value: +{ + "append": { + "field": "event.category", + "value": "authentication", + "allow_duplicates": false, + "if": "ctx.checkpoint?.operation == 'Log In'" + } +} + +Appending multiple values when either the value Accept or Allow is found in ctx.checkpoint?.rule_action: +{ + "append": { + "field": "event.type", + "value": [ + "allowed", + "connection" + ], + "allow_duplicates": false, + "if": "['Accept', 'Allow'].contains(ctx.checkpoint?.rule_action)" + } +} +`; + +export const CATEGORIZATION_EXAMPLE_ANSWER = [ + { append: { field: 'event.type', value: ['access'] } }, + { + append: { + field: 'event.type', + value: ['allowed', 'connection'], + allow_duplicates: false, + if: "['Accept', 'Allow'].contains(ctx.checkpoint?.rule_action)", + }, + }, + { + append: { + field: 'event.category', + value: ['network'], + allow_duplicates: false, + if: "['Accept', 'Allow'].contains(ctx.checkpoint?.rule_action)", + }, + }, + { + append: { + field: 'event.type', + value: ['start'], + allow_duplicates: false, + if: "ctx.checkpoint?.operation == 'Log In'", + }, + }, + { + append: { + field: 'event.category', + value: ['authentication'], + allow_duplicates: false, + if: "ctx.checkpoint?.operation == 'Log In'", + }, + }, +]; diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/errors.test.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/errors.test.ts new file mode 100644 index 0000000000000..18d8c1842080a --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/errors.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleErrors } from './errors'; +import type { CategorizationState } from '../../types'; +import { + categorizationTestState, + categorizationMockProcessors, + categorizationExpectedHandlerResponse, +} from '../../../__jest__/fixtures/categorization'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: JSON.stringify(categorizationMockProcessors, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: CategorizationState = categorizationTestState; + +describe('Testing categorization handler', () => { + it('handleErrors()', async () => { + const response = await handleErrors(testState, mockLlm); + expect(response.currentPipeline).toStrictEqual( + categorizationExpectedHandlerResponse.currentPipeline + ); + expect(response.lastExecutedChain).toBe('error'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/errors.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/errors.ts new file mode 100644 index 0000000000000..d8cb7beedc9bf --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/errors.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { ESProcessorItem, Pipeline } from '../../../common'; +import type { CategorizationState } from '../../types'; +import { combineProcessors } from '../../util/processors'; +import { CATEGORIZATION_ERROR_PROMPT } from './prompts'; + +export async function handleErrors( + state: CategorizationState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const categorizationErrorPrompt = CATEGORIZATION_ERROR_PROMPT; + + const outputParser = new JsonOutputParser(); + const categorizationErrorGraph = categorizationErrorPrompt.pipe(model).pipe(outputParser); + + const currentProcessors = (await categorizationErrorGraph.invoke({ + current_processors: JSON.stringify(state.currentProcessors, null, 2), + ex_answer: state.exAnswer, + errors: JSON.stringify(state.errors, null, 2), + package_name: state.packageName, + data_stream_name: state.dataStreamName, + })) as ESProcessorItem[]; + + const currentPipeline = combineProcessors(state.initialPipeline as Pipeline, currentProcessors); + + return { + currentPipeline, + currentProcessors, + reviewed: false, + lastExecutedChain: 'error', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.test.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.test.ts new file mode 100644 index 0000000000000..4122d4540dbc0 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.test.ts @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IScopedClusterClient } from '@kbn/core/server'; +import { FakeLLM } from '@langchain/core/utils/testing'; +import { getCategorizationGraph } from './graph'; +import { + categorizationExpectedResults, + categorizationErrorMockedResponse, + categorizationInitialMockedResponse, + categorizationInvalidMockedResponse, + categorizationReviewMockedResponse, + categorizationInitialPipeline, + testPipelineError, + testPipelineValidResult, + testPipelineInvalidEcs, +} from '../../../__jest__/fixtures/categorization'; +import { mockedRequestWithPipeline } from '../../../__jest__/fixtures'; +import { handleReview } from './review'; +import { handleCategorization } from './categorization'; +import { handleErrors } from './errors'; +import { handleInvalidCategorization } from './invalid'; +import { testPipeline, combineProcessors } from '../../util'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: "I'll callback later.", +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +jest.mock('./errors'); +jest.mock('./review'); +jest.mock('./categorization'); +jest.mock('./invalid'); + +jest.mock('../../util/pipeline', () => ({ + testPipeline: jest.fn(), +})); + +describe('runCategorizationGraph', () => { + const mockClient = { + asCurrentUser: { + ingest: { + simulate: jest.fn(), + }, + }, + } as unknown as IScopedClusterClient; + beforeEach(() => { + // Mocked responses for each node that requires an LLM API call/response. + const mockInvokeCategorization = jest + .fn() + .mockResolvedValue(categorizationInitialMockedResponse); + const mockInvokeError = jest.fn().mockResolvedValue(categorizationErrorMockedResponse); + const mockInvokeInvalid = jest.fn().mockResolvedValue(categorizationInvalidMockedResponse); + const mockInvokeReview = jest.fn().mockResolvedValue(categorizationReviewMockedResponse); + + // We do not care about ES in these tests, the mock is just to prevent errors. + + // After this is triggered, the mock of TestPipeline will trigger the expected error, to route to error handler + (handleCategorization as jest.Mock).mockImplementation(async () => ({ + currentPipeline: categorizationInitialPipeline, + currentProcessors: await mockInvokeCategorization(), + reviewed: false, + finalized: false, + lastExecutedChain: 'categorization', + })); + // Error pipeline resolves it, though the responce includes an invalid categorization + (handleErrors as jest.Mock).mockImplementation(async () => ({ + currentPipeline: categorizationInitialPipeline, + currentProcessors: await mockInvokeError(), + reviewed: false, + finalized: false, + lastExecutedChain: 'error', + })); + // Invalid categorization is resolved and returned correctly, which routes it to a review + (handleInvalidCategorization as jest.Mock).mockImplementation(async () => ({ + currentPipeline: categorizationInitialPipeline, + currentProcessors: await mockInvokeInvalid(), + reviewed: false, + finalized: false, + lastExecutedChain: 'invalidCategorization', + })); + // After the review it should route to modelOutput and finish. + (handleReview as jest.Mock).mockImplementation(async () => { + const currentProcessors = await mockInvokeReview(); + const currentPipeline = combineProcessors(categorizationInitialPipeline, currentProcessors); + return { + currentProcessors, + currentPipeline, + reviewed: true, + finalized: false, + lastExecutedChain: 'review', + }; + }); + }); + + it('Ensures that the graph compiles', async () => { + try { + await getCategorizationGraph(mockClient, mockLlm); + } catch (error) { + // noop + } + }); + + it('Runs the whole graph, with mocked outputs from the LLM.', async () => { + const categorizationGraph = await getCategorizationGraph(mockClient, mockLlm); + + (testPipeline as jest.Mock) + .mockResolvedValueOnce(testPipelineValidResult) + .mockResolvedValueOnce(testPipelineError) + .mockResolvedValueOnce(testPipelineInvalidEcs) + .mockResolvedValueOnce(testPipelineValidResult) + .mockResolvedValueOnce(testPipelineValidResult) + .mockResolvedValueOnce(testPipelineValidResult); + + let response; + try { + response = await categorizationGraph.invoke(mockedRequestWithPipeline); + } catch (e) { + // noop + } + + expect(response.results).toStrictEqual(categorizationExpectedResults); + + // Check if the functions were called + expect(handleCategorization).toHaveBeenCalled(); + expect(handleErrors).toHaveBeenCalled(); + expect(handleInvalidCategorization).toHaveBeenCalled(); + expect(handleReview).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.ts new file mode 100644 index 0000000000000..6834fcf892a9e --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/graph.ts @@ -0,0 +1,193 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import type { StateGraphArgs } from '@langchain/langgraph'; +import { StateGraph, END, START } from '@langchain/langgraph'; +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import type { CategorizationState } from '../../types'; +import { modifySamples, formatSamples } from '../../util/samples'; +import { handleCategorization } from './categorization'; +import { handleValidatePipeline } from '../../util/graph'; +import { handleCategorizationValidation } from './validate'; +import { handleInvalidCategorization } from './invalid'; +import { handleErrors } from './errors'; +import { handleReview } from './review'; +import { CATEGORIZATION_EXAMPLE_ANSWER, ECS_CATEGORIES, ECS_TYPES } from './constants'; + +const graphState: StateGraphArgs['channels'] = { + lastExecutedChain: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + rawSamples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + samples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + formattedSamples: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + ecsTypes: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + ecsCategories: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + exAnswer: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + packageName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + dataStreamName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + finalized: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + reviewed: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + errors: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + pipelineResults: { + value: (x: object[], y?: object[]) => y ?? x, + default: () => [{}], + }, + currentPipeline: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + currentProcessors: { + value: (x: object[], y?: object[]) => y ?? x, + default: () => [], + }, + invalidCategorization: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + initialPipeline: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + results: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, +}; + +function modelInput(state: CategorizationState): Partial { + const samples = modifySamples(state); + const formattedSamples = formatSamples(samples); + const initialPipeline = JSON.parse(JSON.stringify(state.currentPipeline)); + return { + exAnswer: JSON.stringify(CATEGORIZATION_EXAMPLE_ANSWER, null, 2), + ecsCategories: JSON.stringify(ECS_CATEGORIES, null, 2), + ecsTypes: JSON.stringify(ECS_TYPES, null, 2), + samples, + formattedSamples, + initialPipeline, + finalized: false, + reviewed: false, + lastExecutedChain: 'modelInput', + }; +} + +function modelOutput(state: CategorizationState): Partial { + return { + finalized: true, + lastExecutedChain: 'modelOutput', + results: { + docs: state.pipelineResults, + pipeline: state.currentPipeline, + }, + }; +} + +function validationRouter(state: CategorizationState): string { + if (Object.keys(state.currentProcessors).length === 0) { + return 'categorization'; + } + return 'validateCategorization'; +} + +function chainRouter(state: CategorizationState): string { + if (Object.keys(state.errors).length > 0) { + return 'errors'; + } + if (Object.keys(state.invalidCategorization).length > 0) { + return 'invalidCategorization'; + } + if (!state.reviewed) { + return 'review'; + } + if (!state.finalized) { + return 'modelOutput'; + } + + return END; +} + +export async function getCategorizationGraph( + client: IScopedClusterClient, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const workflow = new StateGraph({ + channels: graphState, + }) + .addNode('modelInput', modelInput) + .addNode('modelOutput', modelOutput) + .addNode('handleCategorization', (state: CategorizationState) => + handleCategorization(state, model) + ) + .addNode('handleValidatePipeline', (state: CategorizationState) => + handleValidatePipeline(state, client) + ) + .addNode('handleCategorizationValidation', handleCategorizationValidation) + .addNode('handleInvalidCategorization', (state: CategorizationState) => + handleInvalidCategorization(state, model) + ) + .addNode('handleErrors', (state: CategorizationState) => handleErrors(state, model)) + .addNode('handleReview', (state: CategorizationState) => handleReview(state, model)) + .addEdge(START, 'modelInput') + .addEdge('modelOutput', END) + .addEdge('modelInput', 'handleValidatePipeline') + .addEdge('handleCategorization', 'handleValidatePipeline') + .addEdge('handleInvalidCategorization', 'handleValidatePipeline') + .addEdge('handleErrors', 'handleValidatePipeline') + .addEdge('handleReview', 'handleValidatePipeline') + .addConditionalEdges('handleValidatePipeline', validationRouter, { + categorization: 'handleCategorization', + validateCategorization: 'handleCategorizationValidation', + }) + .addConditionalEdges('handleCategorizationValidation', chainRouter, { + modelOutput: 'modelOutput', + errors: 'handleErrors', + invalidCategorization: 'handleInvalidCategorization', + review: 'handleReview', + }); + + const compiledCategorizationGraph = workflow.compile(); + return compiledCategorizationGraph; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/index.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/index.ts new file mode 100644 index 0000000000000..03e8cb360de67 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export { getCategorizationGraph } from './graph'; diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/invalid.test.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/invalid.test.ts new file mode 100644 index 0000000000000..10560137093d8 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/invalid.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleInvalidCategorization } from './invalid'; +import type { CategorizationState } from '../../types'; +import { + categorizationTestState, + categorizationMockProcessors, + categorizationExpectedHandlerResponse, +} from '../../../__jest__/fixtures/categorization'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: JSON.stringify(categorizationMockProcessors, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: CategorizationState = categorizationTestState; + +describe('Testing categorization handler', () => { + it('handleInvalidCategorization()', async () => { + const response = await handleInvalidCategorization(testState, mockLlm); + expect(response.currentPipeline).toStrictEqual( + categorizationExpectedHandlerResponse.currentPipeline + ); + expect(response.lastExecutedChain).toBe('invalidCategorization'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/invalid.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/invalid.ts new file mode 100644 index 0000000000000..413694b594518 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/invalid.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { ESProcessorItem, Pipeline } from '../../../common'; +import type { CategorizationState } from '../../types'; +import { combineProcessors } from '../../util/processors'; +import { ECS_EVENT_TYPES_PER_CATEGORY } from './constants'; +import { CATEGORIZATION_VALIDATION_PROMPT } from './prompts'; + +export async function handleInvalidCategorization( + state: CategorizationState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const categorizationInvalidPrompt = CATEGORIZATION_VALIDATION_PROMPT; + + const outputParser = new JsonOutputParser(); + const categorizationInvalidGraph = categorizationInvalidPrompt.pipe(model).pipe(outputParser); + + const currentProcessors = (await categorizationInvalidGraph.invoke({ + current_processors: JSON.stringify(state.currentProcessors, null, 2), + invalid_categorization: JSON.stringify(state.invalidCategorization, null, 2), + ex_answer: state.exAnswer, + compatible_types: JSON.stringify(ECS_EVENT_TYPES_PER_CATEGORY, null, 2), + })) as ESProcessorItem[]; + + const currentPipeline = combineProcessors(state.initialPipeline as Pipeline, currentProcessors); + + return { + currentPipeline, + currentProcessors, + reviewed: false, + lastExecutedChain: 'invalidCategorization', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/prompts.ts new file mode 100644 index 0000000000000..a03f373499aea --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/prompts.ts @@ -0,0 +1,204 @@ +/* + * Copyright 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 { ChatPromptTemplate } from '@langchain/core/prompts'; + +export const CATEGORIZATION_MAIN_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant on Elasticsearch Ingest Pipelines, focusing on providing append processors that can be used to enrich samples with all relevant event.type and event.category values. +Here are some context for you to reference for your task, read it carefully as you will get questions about it later: + + +Event Category (event.category): +Purpose: It is the second level in the ECS category hierarchy, representing the primary category or "big bucket" for event classification. +Type: It's a keyword type and can have multiple values (list). +Relationship: Works alongside event.type, which acts as a subcategory. +Allowed categories and their descriptions: +{ecs_categories} + +Event Type (event.type): +Purpose: It is the third level in the ECS category hierarchy, represents a categorization "sub-bucket". +Type: It's a keyword type and can have multiple values (list). +Relationship: Works alongside event.category, which acts as a subcategory. +Allowed types and their descriptions: +{ecs_types} + +`, + ], + [ + 'human', + `Please help me by providing all relevant append processors for any detected event.category and event.type combinations that would fit the below pipeline results as an array of JSON objects. + + +{pipeline_results} + + +Go through each of the pipeline results above step by step and do the following to add all relevant event.type and event.category combinations. +1. Try to understand what is unique about each pipeline result, and what sort of event.categorization and event.type combinations that fit best, and if there is any unique values for each result. +2. For for each combination of event.category and event.type that you find, add a new append processor to your array of JSON objects. +3. If only certain results are relevant to the event.category and event.type combination, add an if condition similar to the above example processors, that describes what value or field needs to be available for this categorization to take place. The if condition should be inside the processor object. +4. Always check if the combination of event.category and event.type is common in the ecs context above. +5. Always make sure the value for event.category and event.type is strictly from the allowed categories and allowed types in the ecs context above. +6. The value argument for the append processor is an array of one or more types and categories. + +You ALWAYS follow these guidelines when writing your response: + +- You can add as many append processors you need to cover all the unique combinations that you detected. +- If conditions should always use a ? character when accessing nested fields, in case the field might not always be available, see example processors above. +- When an if condition is not needed the argument should not be used for the processor object. +- When using a range based if condition like > 0, you first need to check that the field is not null, for example: ctx.somefield?.production != null && ctx.somefield?.production > 0 +- Do not respond with anything except the array of processors as a valid JSON objects enclosed with 3 backticks (\`), see example response below. + + +Example response format: + +A: Please find the Categorization processors below: +\`\`\`json +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the Categorization processors below:'], +]); + +export const CATEGORIZATION_REVIEW_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant on Elasticsearch Ingest Pipelines, focusing on adding improvements to the provided array of processors and reviewing the current results. + +Here is some context that you can reference for your task, read it carefully as you will get questions about it later: + + +{current_processors} + + +{compatibility_matrix} + +`, + ], + [ + 'human', + `Testing my current pipeline returned me with the results: + +{pipeline_results} + + +Please review the pipeline results and the array of current processors, ensuring to identify all the possible event.type and event.category combinatinations that would match each pipeline result document. If any event.type or event.category is missing from any of the pipeline results, add them by updating the array of current processors and return the whole updated array of processors. + +For each pipeline result you review step by step, remember the below steps: +1. Check if each of the pipeline results have at least one event.category and event.type added to them. If not then try to correlate the results with the current processors and see if either a new append processor should be added to the list with a matching if condition, or if any of the if conditions should be modified as they are not matching that is in the results. +2. If the results have at least one event.category and event.type value, see if more of them could match, if so it could be added to the relevant append processor which added the initial values. +3. When adding more values to event.type and event.category please keep in mind the compatibility_matrix in the context to make sure only compatible event.type , event.category pairs that are compatible are created. +4. Ensure that all append processors has allow_duplicates: false, as seen in the example response. + +You ALWAYS follow these guidelines when writing your response: + +- You can use as many append processors as you need to add all relevant ECS categories and types combinations. +- If conditions should always use a ? character when accessing nested fields, in case the field might not always be available, see example processors above. +- When an if condition is not needed the argument should not be used for the processor object. +- If not updates are needed you respond with the initially provided current processors. +- Each append processor needs to have the allow_duplicates: false argument, as shown in the below example response. +- Do not respond with anything except updated array of processors as a valid JSON object enclosed with 3 backticks (\`), see example response below. + + +Example response format: + +A: Please find the updated ECS categorization append processors below: +\`\`\` +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the updated ECS categorization append processors below:'], +]); + +export const CATEGORIZATION_VALIDATION_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant on Elasticsearch Ingest Pipelines, focusing on resolving errors and issues with append processors used for categorization. +Here is some context that you can reference for your task, read it carefully as you will get questions about it later: + + +{current_processors} + + +{compatible_types} + + +{invalid_categorization} + +`, + ], + [ + 'human', + `Please go through each error above, carefully review the provided current processors, and resolve the most likely cause to the supplied error by returning an updated version of the current_processors. + +Follow these steps to help resolve the current ingest pipeline issues: +1. Try to fix all related errors before responding. +2. Apply all fixes to the provided array of current append processors. +3. If you do not know how to fix an error, then continue to the next and return the complete updated array of current append processors. + +You ALWAYS follow these guidelines when writing your response: + +- If the error complains about having event.type or event.category not in the allowed values , fix the corresponding append processors to use the allowed values mentioned in the error. +- If the error is about event.type not compatible with any event.category, please refer to the 'compatible_types' in the context to fix the corresponding append processors to use valid combination of event.type and event.category +- Do not respond with anything except the complete updated array of processors as a valid JSON object enclosed with 3 backticks (\`), see example response below. + + +Example response format: + +A: Please find the updated ECS categorization append processors below: +\`\`\`json +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the updated ECS categorization append processors below:'], +]); + +export const CATEGORIZATION_ERROR_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant on Elasticsearch Ingest Pipelines, focusing on resolving errors and issues with append processors used for categorization. +Here is some context that you can reference for your task, read it carefully as you will get questions about it later: + + +{current_processors} + + +{errors} + +`, + ], + [ + 'human', + `Please go through each error above, carefully review the provided current processors, and resolve the most likely cause to the supplied error by returning an updated version of the current_processors. + +Follow these steps to help resolve the current ingest pipeline issues: +1. Try to fix all related errors before responding. +2. Apply all fixes to the provided array of current append processors. +3. If you do not know how to fix an error, then continue to the next and return the complete updated array of current append processors. + +You ALWAYS follow these guidelines when writing your response: + +- When checking for the existance of multiple values in a single variable, use this format: "if": "['value1', 'value2'].contains(ctx.{package_name}?.{data_stream_name}?.field)" +- If conditions should never be in a format like "if": "true". If it exist in the current array of append processors, remove only the redundant if condition. +- If the error complains that it is a null point exception, always ensure the if conditions uses a ? when accessing nested fields. For example ctx.field1?.nestedfield1?.nestedfield2. +- If the error complains about having values not in the list of allowed values , fix the corresponding append processors to use the allowed values as mentioned in the error. +- Do not respond with anything except the complete updated array of processors as a valid JSON object enclosed with 3 backticks (\`), see example response below. + + +Example response format: + +A: Please find the updated ECS categorization append processors below: +\`\`\`json +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the updated ECS categorization append processors below:'], +]); diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/review.test.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/review.test.ts new file mode 100644 index 0000000000000..7775b69c5b6a8 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/review.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleReview } from './review'; +import type { CategorizationState } from '../../types'; +import { + categorizationTestState, + categorizationMockProcessors, + categorizationExpectedHandlerResponse, +} from '../../../__jest__/fixtures/categorization'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: JSON.stringify(categorizationMockProcessors, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: CategorizationState = categorizationTestState; + +describe('Testing categorization handler', () => { + it('handleReview()', async () => { + const response = await handleReview(testState, mockLlm); + expect(response.currentPipeline).toStrictEqual( + categorizationExpectedHandlerResponse.currentPipeline + ); + expect(response.lastExecutedChain).toBe('review'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/review.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/review.ts new file mode 100644 index 0000000000000..12b3880737237 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/review.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import { CATEGORIZATION_REVIEW_PROMPT } from './prompts'; + +import type { ESProcessorItem, Pipeline } from '../../../common'; +import type { CategorizationState } from '../../types'; +import { combineProcessors } from '../../util/processors'; +import { ECS_EVENT_TYPES_PER_CATEGORY } from './constants'; + +export async function handleReview( + state: CategorizationState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const categorizationReviewPrompt = CATEGORIZATION_REVIEW_PROMPT; + const outputParser = new JsonOutputParser(); + const categorizationReview = categorizationReviewPrompt.pipe(model).pipe(outputParser); + + const currentProcessors = (await categorizationReview.invoke({ + current_processors: JSON.stringify(state.currentProcessors, null, 2), + pipeline_results: JSON.stringify(state.pipelineResults, null, 2), + ex_answer: state?.exAnswer, + package_name: state?.packageName, + compatibility_matrix: JSON.stringify(ECS_EVENT_TYPES_PER_CATEGORY, null, 2), + })) as ESProcessorItem[]; + + const currentPipeline = combineProcessors(state.initialPipeline as Pipeline, currentProcessors); + + return { + currentPipeline, + currentProcessors, + reviewed: true, + lastExecutedChain: 'review', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/categorization/validate.ts b/x-pack/plugins/integration_assistant/server/graphs/categorization/validate.ts new file mode 100644 index 0000000000000..40e37cd3b0363 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/categorization/validate.ts @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { CategorizationState } from '../../types'; +import { ECS_EVENT_TYPES_PER_CATEGORY, EVENT_CATEGORIES, EVENT_TYPES } from './constants'; + +import type { EventCategories } from './constants'; + +interface Event { + type?: string[]; + category?: string[]; +} + +interface PipelineResult { + event?: Event; +} + +interface CategorizationError { + error: string; +} + +export function handleCategorizationValidation(state: CategorizationState): { + invalidCategorization: CategorizationError[]; + lastExecutedChain: string; +} { + const errors: CategorizationError[] = []; + const pipelineResults = state.pipelineResults as PipelineResult[]; + + // Loops through the pipeline results to find invalid categories and types + for (const doc of pipelineResults) { + let types: string[] = []; + let categories: string[] = []; + if (doc?.event?.type) { + types = doc.event.type; + } + if (doc?.event?.category) { + categories = doc.event.category; + } + + const invalidCategories = findInvalidCategories(categories); + const invalidTypes = findInvalidTypes(types); + + if (invalidCategories.length > 0) { + errors.push(createErrorMessage('event.category', invalidCategories, EVENT_CATEGORIES)); + } + + if (invalidTypes.length > 0) { + errors.push(createErrorMessage('event.type', invalidTypes, EVENT_TYPES)); + } + + // Compatibility check is done only on valid categories and types + const validCategories = categories.filter((x) => !invalidCategories.includes(x)); + const validTypes = types.filter((x) => !invalidTypes.includes(x)); + + const compatibleErrors = getTypeCategoryIncompatibleError(validCategories, validTypes); + for (const ce of compatibleErrors) { + errors.push(ce); + } + } + + return { + invalidCategorization: errors, + lastExecutedChain: 'handleCategorizationValidation', + }; +} + +function createErrorMessage( + field: string, + errorList: string[], + allowedValues: string[] +): CategorizationError { + return { + error: `field ${field}'s values (${errorList.join( + ', ' + )}) is not one of the allowed values (${allowedValues.join(', ')})`, + }; +} + +function findInvalidCategories(categories: string[]): string[] { + const invalidCategories: string[] = []; + for (const c of categories) { + if (!EVENT_CATEGORIES.includes(c)) { + invalidCategories.push(c); + } + } + return invalidCategories; +} + +function findInvalidTypes(types: string[]): string[] { + const invalidTypes: string[] = []; + for (const t of types) { + if (!EVENT_TYPES.includes(t)) { + invalidTypes.push(t); + } + } + return invalidTypes; +} + +function getTypeCategoryIncompatibleError( + categories: string[], + types: string[] +): CategorizationError[] { + const errors: CategorizationError[] = []; + let unmatchedTypes = new Set(types); + const matchCategories = new Set(categories); + let categoryExists = false; + + for (const c of matchCategories) { + if (c in ECS_EVENT_TYPES_PER_CATEGORY) { + categoryExists = true; + const matchTypes = new Set(ECS_EVENT_TYPES_PER_CATEGORY[c as EventCategories]); + unmatchedTypes = new Set([...unmatchedTypes].filter((x) => !matchTypes.has(x))); + } + } + + if (categoryExists && unmatchedTypes.size > 0) { + errors.push({ + error: `event.type (${[...unmatchedTypes].join( + ', ' + )}) not compatible with any of the event.category (${[...matchCategories].join(', ')})`, + }); + } + + return errors; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/constants.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/constants.ts new file mode 100644 index 0000000000000..607655541ca9d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/constants.ts @@ -0,0 +1,1930 @@ +/* + * Copyright 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. + */ + +interface EcsFields { + [key: string]: string; +} + +export const ECS_TYPES: EcsFields = { + '@timestamp': 'date', + 'agent.build.original': 'keyword', + 'agent.ephemeral_id': 'keyword', + 'agent.id': 'keyword', + 'agent.name': 'keyword', + 'agent.type': 'keyword', + 'agent.version': 'keyword', + 'client.address': 'keyword', + 'client.as.number': 'long', + 'client.as.organization.name': 'keyword', + 'client.bytes': 'long', + 'client.domain': 'keyword', + 'client.geo.city_name': 'keyword', + 'client.geo.continent_code': 'keyword', + 'client.geo.continent_name': 'keyword', + 'client.geo.country_iso_code': 'keyword', + 'client.geo.country_name': 'keyword', + 'client.geo.location': 'geo_point', + 'client.geo.name': 'keyword', + 'client.geo.postal_code': 'keyword', + 'client.geo.region_iso_code': 'keyword', + 'client.geo.region_name': 'keyword', + 'client.geo.timezone': 'keyword', + 'client.ip': 'ip', + 'client.mac': 'keyword', + 'client.nat.ip': 'ip', + 'client.nat.port': 'long', + 'client.packets': 'long', + 'client.port': 'long', + 'client.registered_domain': 'keyword', + 'client.subdomain': 'keyword', + 'client.top_level_domain': 'keyword', + 'client.user.domain': 'keyword', + 'client.user.email': 'keyword', + 'client.user.full_name': 'keyword', + 'client.user.group.domain': 'keyword', + 'client.user.group.id': 'keyword', + 'client.user.group.name': 'keyword', + 'client.user.hash': 'keyword', + 'client.user.id': 'keyword', + 'client.user.name': 'keyword', + 'client.user.roles': 'keyword', + 'cloud.account.id': 'keyword', + 'cloud.account.name': 'keyword', + 'cloud.availability_zone': 'keyword', + 'cloud.instance.id': 'keyword', + 'cloud.instance.name': 'keyword', + 'cloud.machine.type': 'keyword', + 'cloud.origin.account.id': 'keyword', + 'cloud.origin.account.name': 'keyword', + 'cloud.origin.availability_zone': 'keyword', + 'cloud.origin.instance.id': 'keyword', + 'cloud.origin.instance.name': 'keyword', + 'cloud.origin.machine.type': 'keyword', + 'cloud.origin.project.id': 'keyword', + 'cloud.origin.project.name': 'keyword', + 'cloud.origin.provider': 'keyword', + 'cloud.origin.region': 'keyword', + 'cloud.origin.service.name': 'keyword', + 'cloud.project.id': 'keyword', + 'cloud.project.name': 'keyword', + 'cloud.provider': 'keyword', + 'cloud.region': 'keyword', + 'cloud.service.name': 'keyword', + 'cloud.target.account.id': 'keyword', + 'cloud.target.account.name': 'keyword', + 'cloud.target.availability_zone': 'keyword', + 'cloud.target.instance.id': 'keyword', + 'cloud.target.instance.name': 'keyword', + 'cloud.target.machine.type': 'keyword', + 'cloud.target.project.id': 'keyword', + 'cloud.target.project.name': 'keyword', + 'cloud.target.provider': 'keyword', + 'cloud.target.region': 'keyword', + 'cloud.target.service.name': 'keyword', + 'container.cpu.usage': 'scaled_float', + 'container.disk.read.bytes': 'long', + 'container.disk.write.bytes': 'long', + 'container.id': 'keyword', + 'container.image.hash.all': 'keyword', + 'container.image.name': 'keyword', + 'container.image.tag': 'keyword', + 'container.labels': 'object', + 'container.memory.usage': 'scaled_float', + 'container.name': 'keyword', + 'container.network.egress.bytes': 'long', + 'container.network.ingress.bytes': 'long', + 'container.runtime': 'keyword', + 'container.security_context.privileged': 'boolean', + 'data_stream.dataset': 'constant_keyword', + 'data_stream.namespace': 'constant_keyword', + 'data_stream.type': 'constant_keyword', + 'destination.address': 'keyword', + 'destination.as.number': 'long', + 'destination.as.organization.name': 'keyword', + 'destination.bytes': 'long', + 'destination.domain': 'keyword', + 'destination.geo.city_name': 'keyword', + 'destination.geo.continent_code': 'keyword', + 'destination.geo.continent_name': 'keyword', + 'destination.geo.country_iso_code': 'keyword', + 'destination.geo.country_name': 'keyword', + 'destination.geo.location': 'geo_point', + 'destination.geo.name': 'keyword', + 'destination.geo.postal_code': 'keyword', + 'destination.geo.region_iso_code': 'keyword', + 'destination.geo.region_name': 'keyword', + 'destination.geo.timezone': 'keyword', + 'destination.ip': 'ip', + 'destination.mac': 'keyword', + 'destination.nat.ip': 'ip', + 'destination.nat.port': 'long', + 'destination.packets': 'long', + 'destination.port': 'long', + 'destination.registered_domain': 'keyword', + 'destination.subdomain': 'keyword', + 'destination.top_level_domain': 'keyword', + 'destination.user.domain': 'keyword', + 'destination.user.email': 'keyword', + 'destination.user.full_name': 'keyword', + 'destination.user.group.domain': 'keyword', + 'destination.user.group.id': 'keyword', + 'destination.user.group.name': 'keyword', + 'destination.user.hash': 'keyword', + 'destination.user.id': 'keyword', + 'destination.user.name': 'keyword', + 'destination.user.roles': 'keyword', + 'device.id': 'keyword', + 'device.manufacturer': 'keyword', + 'device.model.identifier': 'keyword', + 'device.model.name': 'keyword', + 'dll.code_signature.digest_algorithm': 'keyword', + 'dll.code_signature.exists': 'boolean', + 'dll.code_signature.signing_id': 'keyword', + 'dll.code_signature.status': 'keyword', + 'dll.code_signature.subject_name': 'keyword', + 'dll.code_signature.team_id': 'keyword', + 'dll.code_signature.timestamp': 'date', + 'dll.code_signature.trusted': 'boolean', + 'dll.code_signature.valid': 'boolean', + 'dll.hash.md5': 'keyword', + 'dll.hash.sha1': 'keyword', + 'dll.hash.sha256': 'keyword', + 'dll.hash.sha384': 'keyword', + 'dll.hash.sha512': 'keyword', + 'dll.hash.ssdeep': 'keyword', + 'dll.hash.tlsh': 'keyword', + 'dll.name': 'keyword', + 'dll.path': 'keyword', + 'dll.pe.architecture': 'keyword', + 'dll.pe.company': 'keyword', + 'dll.pe.description': 'keyword', + 'dll.pe.file_version': 'keyword', + 'dll.pe.go_import_hash': 'keyword', + 'dll.pe.go_imports': 'flattened', + 'dll.pe.go_imports_names_entropy': 'long', + 'dll.pe.go_imports_names_var_entropy': 'long', + 'dll.pe.go_stripped': 'boolean', + 'dll.pe.imphash': 'keyword', + 'dll.pe.import_hash': 'keyword', + 'dll.pe.imports': 'flattened', + 'dll.pe.imports_names_entropy': 'long', + 'dll.pe.imports_names_var_entropy': 'long', + 'dll.pe.original_file_name': 'keyword', + 'dll.pe.pehash': 'keyword', + 'dll.pe.product': 'keyword', + 'dll.pe.sections': 'nested', + 'dll.pe.sections.entropy': 'long', + 'dll.pe.sections.name': 'keyword', + 'dll.pe.sections.physical_size': 'long', + 'dll.pe.sections.var_entropy': 'long', + 'dll.pe.sections.virtual_size': 'long', + 'dns.answers': 'object', + 'dns.answers.class': 'keyword', + 'dns.answers.data': 'keyword', + 'dns.answers.name': 'keyword', + 'dns.answers.ttl': 'long', + 'dns.answers.type': 'keyword', + 'dns.header_flags': 'keyword', + 'dns.id': 'keyword', + 'dns.op_code': 'keyword', + 'dns.question.class': 'keyword', + 'dns.question.name': 'keyword', + 'dns.question.registered_domain': 'keyword', + 'dns.question.subdomain': 'keyword', + 'dns.question.top_level_domain': 'keyword', + 'dns.question.type': 'keyword', + 'dns.resolved_ip': 'ip', + 'dns.response_code': 'keyword', + 'dns.type': 'keyword', + 'ecs.version': 'keyword', + 'email.attachments': 'nested', + 'email.attachments.file.extension': 'keyword', + 'email.attachments.file.hash.md5': 'keyword', + 'email.attachments.file.hash.sha1': 'keyword', + 'email.attachments.file.hash.sha256': 'keyword', + 'email.attachments.file.hash.sha384': 'keyword', + 'email.attachments.file.hash.sha512': 'keyword', + 'email.attachments.file.hash.ssdeep': 'keyword', + 'email.attachments.file.hash.tlsh': 'keyword', + 'email.attachments.file.mime_type': 'keyword', + 'email.attachments.file.name': 'keyword', + 'email.attachments.file.size': 'long', + 'email.bcc.address': 'keyword', + 'email.cc.address': 'keyword', + 'email.content_type': 'keyword', + 'email.delivery_timestamp': 'date', + 'email.direction': 'keyword', + 'email.from.address': 'keyword', + 'email.local_id': 'keyword', + 'email.message_id': 'wildcard', + 'email.origination_timestamp': 'date', + 'email.reply_to.address': 'keyword', + 'email.sender.address': 'keyword', + 'email.subject': 'keyword', + 'email.to.address': 'keyword', + 'email.x_mailer': 'keyword', + 'error.code': 'keyword', + 'error.id': 'keyword', + 'error.message': 'match_only_text', + 'error.stack_trace': 'wildcard', + 'error.type': 'keyword', + 'event.action': 'keyword', + 'event.agent_id_status': 'keyword', + 'event.category': 'keyword', + 'event.code': 'keyword', + 'event.created': 'date', + 'event.dataset': 'keyword', + 'event.duration': 'long', + 'event.end': 'date', + 'event.hash': 'keyword', + 'event.id': 'keyword', + 'event.ingested': 'date', + 'event.kind': 'keyword', + 'event.module': 'keyword', + 'event.original': 'keyword', + 'event.outcome': 'keyword', + 'event.provider': 'keyword', + 'event.reason': 'keyword', + 'event.reference': 'keyword', + 'event.risk_score': 'float', + 'event.risk_score_norm': 'float', + 'event.sequence': 'long', + 'event.severity': 'long', + 'event.start': 'date', + 'event.timezone': 'keyword', + 'event.type': 'keyword', + 'event.url': 'keyword', + 'faas.coldstart': 'boolean', + 'faas.execution': 'keyword', + 'faas.id': 'keyword', + 'faas.name': 'keyword', + 'faas.trigger.request_id': 'keyword', + 'faas.trigger.type': 'keyword', + 'faas.version': 'keyword', + 'file.accessed': 'date', + 'file.attributes': 'keyword', + 'file.code_signature.digest_algorithm': 'keyword', + 'file.code_signature.exists': 'boolean', + 'file.code_signature.signing_id': 'keyword', + 'file.code_signature.status': 'keyword', + 'file.code_signature.subject_name': 'keyword', + 'file.code_signature.team_id': 'keyword', + 'file.code_signature.timestamp': 'date', + 'file.code_signature.trusted': 'boolean', + 'file.code_signature.valid': 'boolean', + 'file.created': 'date', + 'file.ctime': 'date', + 'file.device': 'keyword', + 'file.directory': 'keyword', + 'file.drive_letter': 'keyword', + 'file.elf.architecture': 'keyword', + 'file.elf.byte_order': 'keyword', + 'file.elf.cpu_type': 'keyword', + 'file.elf.creation_date': 'date', + 'file.elf.exports': 'flattened', + 'file.elf.go_import_hash': 'keyword', + 'file.elf.go_imports': 'flattened', + 'file.elf.go_imports_names_entropy': 'long', + 'file.elf.go_imports_names_var_entropy': 'long', + 'file.elf.go_stripped': 'boolean', + 'file.elf.header.abi_version': 'keyword', + 'file.elf.header.class': 'keyword', + 'file.elf.header.data': 'keyword', + 'file.elf.header.entrypoint': 'long', + 'file.elf.header.object_version': 'keyword', + 'file.elf.header.os_abi': 'keyword', + 'file.elf.header.type': 'keyword', + 'file.elf.header.version': 'keyword', + 'file.elf.import_hash': 'keyword', + 'file.elf.imports': 'flattened', + 'file.elf.imports_names_entropy': 'long', + 'file.elf.imports_names_var_entropy': 'long', + 'file.elf.sections': 'nested', + 'file.elf.sections.chi2': 'long', + 'file.elf.sections.entropy': 'long', + 'file.elf.sections.flags': 'keyword', + 'file.elf.sections.name': 'keyword', + 'file.elf.sections.physical_offset': 'keyword', + 'file.elf.sections.physical_size': 'long', + 'file.elf.sections.type': 'keyword', + 'file.elf.sections.var_entropy': 'long', + 'file.elf.sections.virtual_address': 'long', + 'file.elf.sections.virtual_size': 'long', + 'file.elf.segments': 'nested', + 'file.elf.segments.sections': 'keyword', + 'file.elf.segments.type': 'keyword', + 'file.elf.shared_libraries': 'keyword', + 'file.elf.telfhash': 'keyword', + 'file.extension': 'keyword', + 'file.fork_name': 'keyword', + 'file.gid': 'keyword', + 'file.group': 'keyword', + 'file.hash.md5': 'keyword', + 'file.hash.sha1': 'keyword', + 'file.hash.sha256': 'keyword', + 'file.hash.sha384': 'keyword', + 'file.hash.sha512': 'keyword', + 'file.hash.ssdeep': 'keyword', + 'file.hash.tlsh': 'keyword', + 'file.inode': 'keyword', + 'file.macho.go_import_hash': 'keyword', + 'file.macho.go_imports': 'flattened', + 'file.macho.go_imports_names_entropy': 'long', + 'file.macho.go_imports_names_var_entropy': 'long', + 'file.macho.go_stripped': 'boolean', + 'file.macho.import_hash': 'keyword', + 'file.macho.imports': 'flattened', + 'file.macho.imports_names_entropy': 'long', + 'file.macho.imports_names_var_entropy': 'long', + 'file.macho.sections': 'nested', + 'file.macho.sections.entropy': 'long', + 'file.macho.sections.name': 'keyword', + 'file.macho.sections.physical_size': 'long', + 'file.macho.sections.var_entropy': 'long', + 'file.macho.sections.virtual_size': 'long', + 'file.macho.symhash': 'keyword', + 'file.mime_type': 'keyword', + 'file.mode': 'keyword', + 'file.mtime': 'date', + 'file.name': 'keyword', + 'file.owner': 'keyword', + 'file.path': 'keyword', + 'file.pe.architecture': 'keyword', + 'file.pe.company': 'keyword', + 'file.pe.description': 'keyword', + 'file.pe.file_version': 'keyword', + 'file.pe.go_import_hash': 'keyword', + 'file.pe.go_imports': 'flattened', + 'file.pe.go_imports_names_entropy': 'long', + 'file.pe.go_imports_names_var_entropy': 'long', + 'file.pe.go_stripped': 'boolean', + 'file.pe.imphash': 'keyword', + 'file.pe.import_hash': 'keyword', + 'file.pe.imports': 'flattened', + 'file.pe.imports_names_entropy': 'long', + 'file.pe.imports_names_var_entropy': 'long', + 'file.pe.original_file_name': 'keyword', + 'file.pe.pehash': 'keyword', + 'file.pe.product': 'keyword', + 'file.pe.sections': 'nested', + 'file.pe.sections.entropy': 'long', + 'file.pe.sections.name': 'keyword', + 'file.pe.sections.physical_size': 'long', + 'file.pe.sections.var_entropy': 'long', + 'file.pe.sections.virtual_size': 'long', + 'file.size': 'long', + 'file.target_path': 'keyword', + 'file.type': 'keyword', + 'file.uid': 'keyword', + 'file.x509.alternative_names': 'keyword', + 'file.x509.issuer.common_name': 'keyword', + 'file.x509.issuer.country': 'keyword', + 'file.x509.issuer.distinguished_name': 'keyword', + 'file.x509.issuer.locality': 'keyword', + 'file.x509.issuer.organization': 'keyword', + 'file.x509.issuer.organizational_unit': 'keyword', + 'file.x509.issuer.state_or_province': 'keyword', + 'file.x509.not_after': 'date', + 'file.x509.not_before': 'date', + 'file.x509.public_key_algorithm': 'keyword', + 'file.x509.public_key_curve': 'keyword', + 'file.x509.public_key_exponent': 'long', + 'file.x509.public_key_size': 'long', + 'file.x509.serial_number': 'keyword', + 'file.x509.signature_algorithm': 'keyword', + 'file.x509.subject.common_name': 'keyword', + 'file.x509.subject.country': 'keyword', + 'file.x509.subject.distinguished_name': 'keyword', + 'file.x509.subject.locality': 'keyword', + 'file.x509.subject.organization': 'keyword', + 'file.x509.subject.organizational_unit': 'keyword', + 'file.x509.subject.state_or_province': 'keyword', + 'file.x509.version_number': 'keyword', + 'group.domain': 'keyword', + 'group.id': 'keyword', + 'group.name': 'keyword', + 'host.architecture': 'keyword', + 'host.boot.id': 'keyword', + 'host.cpu.usage': 'scaled_float', + 'host.disk.read.bytes': 'long', + 'host.disk.write.bytes': 'long', + 'host.domain': 'keyword', + 'host.geo.city_name': 'keyword', + 'host.geo.continent_code': 'keyword', + 'host.geo.continent_name': 'keyword', + 'host.geo.country_iso_code': 'keyword', + 'host.geo.country_name': 'keyword', + 'host.geo.location': 'geo_point', + 'host.geo.name': 'keyword', + 'host.geo.postal_code': 'keyword', + 'host.geo.region_iso_code': 'keyword', + 'host.geo.region_name': 'keyword', + 'host.geo.timezone': 'keyword', + 'host.hostname': 'keyword', + 'host.id': 'keyword', + 'host.ip': 'ip', + 'host.mac': 'keyword', + 'host.name': 'keyword', + 'host.network.egress.bytes': 'long', + 'host.network.egress.packets': 'long', + 'host.network.ingress.bytes': 'long', + 'host.network.ingress.packets': 'long', + 'host.os.family': 'keyword', + 'host.os.full': 'keyword', + 'host.os.kernel': 'keyword', + 'host.os.name': 'keyword', + 'host.os.platform': 'keyword', + 'host.os.type': 'keyword', + 'host.os.version': 'keyword', + 'host.pid_ns_ino': 'keyword', + 'host.risk.calculated_level': 'keyword', + 'host.risk.calculated_score': 'float', + 'host.risk.calculated_score_norm': 'float', + 'host.risk.static_level': 'keyword', + 'host.risk.static_score': 'float', + 'host.risk.static_score_norm': 'float', + 'host.type': 'keyword', + 'host.uptime': 'long', + 'http.request.body.bytes': 'long', + 'http.request.body.content': 'wildcard', + 'http.request.bytes': 'long', + 'http.request.id': 'keyword', + 'http.request.method': 'keyword', + 'http.request.mime_type': 'keyword', + 'http.request.referrer': 'keyword', + 'http.response.body.bytes': 'long', + 'http.response.body.content': 'wildcard', + 'http.response.bytes': 'long', + 'http.response.mime_type': 'keyword', + 'http.response.status_code': 'long', + 'http.version': 'keyword', + labels: 'object', + 'log.file.path': 'keyword', + 'log.level': 'keyword', + 'log.logger': 'keyword', + 'log.origin.file.line': 'long', + 'log.origin.file.name': 'keyword', + 'log.origin.function': 'keyword', + 'log.syslog': 'object', + 'log.syslog.appname': 'keyword', + 'log.syslog.facility.code': 'long', + 'log.syslog.facility.name': 'keyword', + 'log.syslog.hostname': 'keyword', + 'log.syslog.msgid': 'keyword', + 'log.syslog.priority': 'long', + 'log.syslog.procid': 'keyword', + 'log.syslog.severity.code': 'long', + 'log.syslog.severity.name': 'keyword', + 'log.syslog.structured_data': 'flattened', + 'log.syslog.version': 'keyword', + message: 'match_only_text', + 'network.application': 'keyword', + 'network.bytes': 'long', + 'network.community_id': 'keyword', + 'network.direction': 'keyword', + 'network.forwarded_ip': 'ip', + 'network.iana_number': 'keyword', + 'network.inner': 'object', + 'network.inner.vlan.id': 'keyword', + 'network.inner.vlan.name': 'keyword', + 'network.name': 'keyword', + 'network.packets': 'long', + 'network.protocol': 'keyword', + 'network.transport': 'keyword', + 'network.type': 'keyword', + 'network.vlan.id': 'keyword', + 'network.vlan.name': 'keyword', + 'observer.egress': 'object', + 'observer.egress.interface.alias': 'keyword', + 'observer.egress.interface.id': 'keyword', + 'observer.egress.interface.name': 'keyword', + 'observer.egress.vlan.id': 'keyword', + 'observer.egress.vlan.name': 'keyword', + 'observer.egress.zone': 'keyword', + 'observer.geo.city_name': 'keyword', + 'observer.geo.continent_code': 'keyword', + 'observer.geo.continent_name': 'keyword', + 'observer.geo.country_iso_code': 'keyword', + 'observer.geo.country_name': 'keyword', + 'observer.geo.location': 'geo_point', + 'observer.geo.name': 'keyword', + 'observer.geo.postal_code': 'keyword', + 'observer.geo.region_iso_code': 'keyword', + 'observer.geo.region_name': 'keyword', + 'observer.geo.timezone': 'keyword', + 'observer.hostname': 'keyword', + 'observer.ingress': 'object', + 'observer.ingress.interface.alias': 'keyword', + 'observer.ingress.interface.id': 'keyword', + 'observer.ingress.interface.name': 'keyword', + 'observer.ingress.vlan.id': 'keyword', + 'observer.ingress.vlan.name': 'keyword', + 'observer.ingress.zone': 'keyword', + 'observer.ip': 'ip', + 'observer.mac': 'keyword', + 'observer.name': 'keyword', + 'observer.os.family': 'keyword', + 'observer.os.full': 'keyword', + 'observer.os.kernel': 'keyword', + 'observer.os.name': 'keyword', + 'observer.os.platform': 'keyword', + 'observer.os.type': 'keyword', + 'observer.os.version': 'keyword', + 'observer.product': 'keyword', + 'observer.serial_number': 'keyword', + 'observer.type': 'keyword', + 'observer.vendor': 'keyword', + 'observer.version': 'keyword', + 'orchestrator.api_version': 'keyword', + 'orchestrator.cluster.id': 'keyword', + 'orchestrator.cluster.name': 'keyword', + 'orchestrator.cluster.url': 'keyword', + 'orchestrator.cluster.version': 'keyword', + 'orchestrator.namespace': 'keyword', + 'orchestrator.organization': 'keyword', + 'orchestrator.resource.annotation': 'keyword', + 'orchestrator.resource.id': 'keyword', + 'orchestrator.resource.ip': 'ip', + 'orchestrator.resource.label': 'keyword', + 'orchestrator.resource.name': 'keyword', + 'orchestrator.resource.parent.type': 'keyword', + 'orchestrator.resource.type': 'keyword', + 'orchestrator.type': 'keyword', + 'organization.id': 'keyword', + 'organization.name': 'keyword', + 'package.architecture': 'keyword', + 'package.build_version': 'keyword', + 'package.checksum': 'keyword', + 'package.description': 'keyword', + 'package.install_scope': 'keyword', + 'package.installed': 'date', + 'package.license': 'keyword', + 'package.name': 'keyword', + 'package.path': 'keyword', + 'package.reference': 'keyword', + 'package.size': 'long', + 'package.type': 'keyword', + 'package.version': 'keyword', + 'process.args': 'keyword', + 'process.args_count': 'long', + 'process.code_signature.digest_algorithm': 'keyword', + 'process.code_signature.exists': 'boolean', + 'process.code_signature.signing_id': 'keyword', + 'process.code_signature.status': 'keyword', + 'process.code_signature.subject_name': 'keyword', + 'process.code_signature.team_id': 'keyword', + 'process.code_signature.timestamp': 'date', + 'process.code_signature.trusted': 'boolean', + 'process.code_signature.valid': 'boolean', + 'process.command_line': 'wildcard', + 'process.elf.architecture': 'keyword', + 'process.elf.byte_order': 'keyword', + 'process.elf.cpu_type': 'keyword', + 'process.elf.creation_date': 'date', + 'process.elf.exports': 'flattened', + 'process.elf.go_import_hash': 'keyword', + 'process.elf.go_imports': 'flattened', + 'process.elf.go_imports_names_entropy': 'long', + 'process.elf.go_imports_names_var_entropy': 'long', + 'process.elf.go_stripped': 'boolean', + 'process.elf.header.abi_version': 'keyword', + 'process.elf.header.class': 'keyword', + 'process.elf.header.data': 'keyword', + 'process.elf.header.entrypoint': 'long', + 'process.elf.header.object_version': 'keyword', + 'process.elf.header.os_abi': 'keyword', + 'process.elf.header.type': 'keyword', + 'process.elf.header.version': 'keyword', + 'process.elf.import_hash': 'keyword', + 'process.elf.imports': 'flattened', + 'process.elf.imports_names_entropy': 'long', + 'process.elf.imports_names_var_entropy': 'long', + 'process.elf.sections': 'nested', + 'process.elf.sections.chi2': 'long', + 'process.elf.sections.entropy': 'long', + 'process.elf.sections.flags': 'keyword', + 'process.elf.sections.name': 'keyword', + 'process.elf.sections.physical_offset': 'keyword', + 'process.elf.sections.physical_size': 'long', + 'process.elf.sections.type': 'keyword', + 'process.elf.sections.var_entropy': 'long', + 'process.elf.sections.virtual_address': 'long', + 'process.elf.sections.virtual_size': 'long', + 'process.elf.segments': 'nested', + 'process.elf.segments.sections': 'keyword', + 'process.elf.segments.type': 'keyword', + 'process.elf.shared_libraries': 'keyword', + 'process.elf.telfhash': 'keyword', + 'process.end': 'date', + 'process.entity_id': 'keyword', + 'process.entry_leader.args': 'keyword', + 'process.entry_leader.args_count': 'long', + 'process.entry_leader.attested_groups.name': 'keyword', + 'process.entry_leader.attested_user.id': 'keyword', + 'process.entry_leader.attested_user.name': 'keyword', + 'process.entry_leader.command_line': 'wildcard', + 'process.entry_leader.entity_id': 'keyword', + 'process.entry_leader.entry_meta.source.ip': 'ip', + 'process.entry_leader.entry_meta.type': 'keyword', + 'process.entry_leader.executable': 'keyword', + 'process.entry_leader.group.id': 'keyword', + 'process.entry_leader.group.name': 'keyword', + 'process.entry_leader.interactive': 'boolean', + 'process.entry_leader.name': 'keyword', + 'process.entry_leader.parent.entity_id': 'keyword', + 'process.entry_leader.parent.pid': 'long', + 'process.entry_leader.parent.session_leader.entity_id': 'keyword', + 'process.entry_leader.parent.session_leader.pid': 'long', + 'process.entry_leader.parent.session_leader.start': 'date', + 'process.entry_leader.parent.session_leader.vpid': 'long', + 'process.entry_leader.parent.start': 'date', + 'process.entry_leader.parent.vpid': 'long', + 'process.entry_leader.pid': 'long', + 'process.entry_leader.real_group.id': 'keyword', + 'process.entry_leader.real_group.name': 'keyword', + 'process.entry_leader.real_user.id': 'keyword', + 'process.entry_leader.real_user.name': 'keyword', + 'process.entry_leader.same_as_process': 'boolean', + 'process.entry_leader.saved_group.id': 'keyword', + 'process.entry_leader.saved_group.name': 'keyword', + 'process.entry_leader.saved_user.id': 'keyword', + 'process.entry_leader.saved_user.name': 'keyword', + 'process.entry_leader.start': 'date', + 'process.entry_leader.supplemental_groups.id': 'keyword', + 'process.entry_leader.supplemental_groups.name': 'keyword', + 'process.entry_leader.tty': 'object', + 'process.entry_leader.tty.char_device.major': 'long', + 'process.entry_leader.tty.char_device.minor': 'long', + 'process.entry_leader.user.id': 'keyword', + 'process.entry_leader.user.name': 'keyword', + 'process.entry_leader.vpid': 'long', + 'process.entry_leader.working_directory': 'keyword', + 'process.env_vars': 'keyword', + 'process.executable': 'keyword', + 'process.exit_code': 'long', + 'process.group_leader.args': 'keyword', + 'process.group_leader.args_count': 'long', + 'process.group_leader.command_line': 'wildcard', + 'process.group_leader.entity_id': 'keyword', + 'process.group_leader.executable': 'keyword', + 'process.group_leader.group.id': 'keyword', + 'process.group_leader.group.name': 'keyword', + 'process.group_leader.interactive': 'boolean', + 'process.group_leader.name': 'keyword', + 'process.group_leader.pid': 'long', + 'process.group_leader.real_group.id': 'keyword', + 'process.group_leader.real_group.name': 'keyword', + 'process.group_leader.real_user.id': 'keyword', + 'process.group_leader.real_user.name': 'keyword', + 'process.group_leader.same_as_process': 'boolean', + 'process.group_leader.saved_group.id': 'keyword', + 'process.group_leader.saved_group.name': 'keyword', + 'process.group_leader.saved_user.id': 'keyword', + 'process.group_leader.saved_user.name': 'keyword', + 'process.group_leader.start': 'date', + 'process.group_leader.supplemental_groups.id': 'keyword', + 'process.group_leader.supplemental_groups.name': 'keyword', + 'process.group_leader.tty': 'object', + 'process.group_leader.tty.char_device.major': 'long', + 'process.group_leader.tty.char_device.minor': 'long', + 'process.group_leader.user.id': 'keyword', + 'process.group_leader.user.name': 'keyword', + 'process.group_leader.vpid': 'long', + 'process.group_leader.working_directory': 'keyword', + 'process.hash.md5': 'keyword', + 'process.hash.sha1': 'keyword', + 'process.hash.sha256': 'keyword', + 'process.hash.sha384': 'keyword', + 'process.hash.sha512': 'keyword', + 'process.hash.ssdeep': 'keyword', + 'process.hash.tlsh': 'keyword', + 'process.interactive': 'boolean', + 'process.io': 'object', + 'process.io.bytes_skipped': 'object', + 'process.io.bytes_skipped.length': 'long', + 'process.io.bytes_skipped.offset': 'long', + 'process.io.max_bytes_per_process_exceeded': 'boolean', + 'process.io.text': 'wildcard', + 'process.io.total_bytes_captured': 'long', + 'process.io.total_bytes_skipped': 'long', + 'process.io.type': 'keyword', + 'process.macho.go_import_hash': 'keyword', + 'process.macho.go_imports': 'flattened', + 'process.macho.go_imports_names_entropy': 'long', + 'process.macho.go_imports_names_var_entropy': 'long', + 'process.macho.go_stripped': 'boolean', + 'process.macho.import_hash': 'keyword', + 'process.macho.imports': 'flattened', + 'process.macho.imports_names_entropy': 'long', + 'process.macho.imports_names_var_entropy': 'long', + 'process.macho.sections': 'nested', + 'process.macho.sections.entropy': 'long', + 'process.macho.sections.name': 'keyword', + 'process.macho.sections.physical_size': 'long', + 'process.macho.sections.var_entropy': 'long', + 'process.macho.sections.virtual_size': 'long', + 'process.macho.symhash': 'keyword', + 'process.name': 'keyword', + 'process.parent.args': 'keyword', + 'process.parent.args_count': 'long', + 'process.parent.code_signature.digest_algorithm': 'keyword', + 'process.parent.code_signature.exists': 'boolean', + 'process.parent.code_signature.signing_id': 'keyword', + 'process.parent.code_signature.status': 'keyword', + 'process.parent.code_signature.subject_name': 'keyword', + 'process.parent.code_signature.team_id': 'keyword', + 'process.parent.code_signature.timestamp': 'date', + 'process.parent.code_signature.trusted': 'boolean', + 'process.parent.code_signature.valid': 'boolean', + 'process.parent.command_line': 'wildcard', + 'process.parent.elf.architecture': 'keyword', + 'process.parent.elf.byte_order': 'keyword', + 'process.parent.elf.cpu_type': 'keyword', + 'process.parent.elf.creation_date': 'date', + 'process.parent.elf.exports': 'flattened', + 'process.parent.elf.go_import_hash': 'keyword', + 'process.parent.elf.go_imports': 'flattened', + 'process.parent.elf.go_imports_names_entropy': 'long', + 'process.parent.elf.go_imports_names_var_entropy': 'long', + 'process.parent.elf.go_stripped': 'boolean', + 'process.parent.elf.header.abi_version': 'keyword', + 'process.parent.elf.header.class': 'keyword', + 'process.parent.elf.header.data': 'keyword', + 'process.parent.elf.header.entrypoint': 'long', + 'process.parent.elf.header.object_version': 'keyword', + 'process.parent.elf.header.os_abi': 'keyword', + 'process.parent.elf.header.type': 'keyword', + 'process.parent.elf.header.version': 'keyword', + 'process.parent.elf.import_hash': 'keyword', + 'process.parent.elf.imports': 'flattened', + 'process.parent.elf.imports_names_entropy': 'long', + 'process.parent.elf.imports_names_var_entropy': 'long', + 'process.parent.elf.sections': 'nested', + 'process.parent.elf.sections.chi2': 'long', + 'process.parent.elf.sections.entropy': 'long', + 'process.parent.elf.sections.flags': 'keyword', + 'process.parent.elf.sections.name': 'keyword', + 'process.parent.elf.sections.physical_offset': 'keyword', + 'process.parent.elf.sections.physical_size': 'long', + 'process.parent.elf.sections.type': 'keyword', + 'process.parent.elf.sections.var_entropy': 'long', + 'process.parent.elf.sections.virtual_address': 'long', + 'process.parent.elf.sections.virtual_size': 'long', + 'process.parent.elf.segments': 'nested', + 'process.parent.elf.segments.sections': 'keyword', + 'process.parent.elf.segments.type': 'keyword', + 'process.parent.elf.shared_libraries': 'keyword', + 'process.parent.elf.telfhash': 'keyword', + 'process.parent.end': 'date', + 'process.parent.entity_id': 'keyword', + 'process.parent.executable': 'keyword', + 'process.parent.exit_code': 'long', + 'process.parent.group.id': 'keyword', + 'process.parent.group.name': 'keyword', + 'process.parent.group_leader.entity_id': 'keyword', + 'process.parent.group_leader.pid': 'long', + 'process.parent.group_leader.start': 'date', + 'process.parent.group_leader.vpid': 'long', + 'process.parent.hash.md5': 'keyword', + 'process.parent.hash.sha1': 'keyword', + 'process.parent.hash.sha256': 'keyword', + 'process.parent.hash.sha384': 'keyword', + 'process.parent.hash.sha512': 'keyword', + 'process.parent.hash.ssdeep': 'keyword', + 'process.parent.hash.tlsh': 'keyword', + 'process.parent.interactive': 'boolean', + 'process.parent.macho.go_import_hash': 'keyword', + 'process.parent.macho.go_imports': 'flattened', + 'process.parent.macho.go_imports_names_entropy': 'long', + 'process.parent.macho.go_imports_names_var_entropy': 'long', + 'process.parent.macho.go_stripped': 'boolean', + 'process.parent.macho.import_hash': 'keyword', + 'process.parent.macho.imports': 'flattened', + 'process.parent.macho.imports_names_entropy': 'long', + 'process.parent.macho.imports_names_var_entropy': 'long', + 'process.parent.macho.sections': 'nested', + 'process.parent.macho.sections.entropy': 'long', + 'process.parent.macho.sections.name': 'keyword', + 'process.parent.macho.sections.physical_size': 'long', + 'process.parent.macho.sections.var_entropy': 'long', + 'process.parent.macho.sections.virtual_size': 'long', + 'process.parent.macho.symhash': 'keyword', + 'process.parent.name': 'keyword', + 'process.parent.pe.architecture': 'keyword', + 'process.parent.pe.company': 'keyword', + 'process.parent.pe.description': 'keyword', + 'process.parent.pe.file_version': 'keyword', + 'process.parent.pe.go_import_hash': 'keyword', + 'process.parent.pe.go_imports': 'flattened', + 'process.parent.pe.go_imports_names_entropy': 'long', + 'process.parent.pe.go_imports_names_var_entropy': 'long', + 'process.parent.pe.go_stripped': 'boolean', + 'process.parent.pe.imphash': 'keyword', + 'process.parent.pe.import_hash': 'keyword', + 'process.parent.pe.imports': 'flattened', + 'process.parent.pe.imports_names_entropy': 'long', + 'process.parent.pe.imports_names_var_entropy': 'long', + 'process.parent.pe.original_file_name': 'keyword', + 'process.parent.pe.pehash': 'keyword', + 'process.parent.pe.product': 'keyword', + 'process.parent.pe.sections': 'nested', + 'process.parent.pe.sections.entropy': 'long', + 'process.parent.pe.sections.name': 'keyword', + 'process.parent.pe.sections.physical_size': 'long', + 'process.parent.pe.sections.var_entropy': 'long', + 'process.parent.pe.sections.virtual_size': 'long', + 'process.parent.pgid': 'long', + 'process.parent.pid': 'long', + 'process.parent.real_group.id': 'keyword', + 'process.parent.real_group.name': 'keyword', + 'process.parent.real_user.id': 'keyword', + 'process.parent.real_user.name': 'keyword', + 'process.parent.saved_group.id': 'keyword', + 'process.parent.saved_group.name': 'keyword', + 'process.parent.saved_user.id': 'keyword', + 'process.parent.saved_user.name': 'keyword', + 'process.parent.start': 'date', + 'process.parent.supplemental_groups.id': 'keyword', + 'process.parent.supplemental_groups.name': 'keyword', + 'process.parent.thread.capabilities.effective': 'keyword', + 'process.parent.thread.capabilities.permitted': 'keyword', + 'process.parent.thread.id': 'long', + 'process.parent.thread.name': 'keyword', + 'process.parent.title': 'keyword', + 'process.parent.tty': 'object', + 'process.parent.tty.char_device.major': 'long', + 'process.parent.tty.char_device.minor': 'long', + 'process.parent.uptime': 'long', + 'process.parent.user.id': 'keyword', + 'process.parent.user.name': 'keyword', + 'process.parent.vpid': 'long', + 'process.parent.working_directory': 'keyword', + 'process.pe.architecture': 'keyword', + 'process.pe.company': 'keyword', + 'process.pe.description': 'keyword', + 'process.pe.file_version': 'keyword', + 'process.pe.go_import_hash': 'keyword', + 'process.pe.go_imports': 'flattened', + 'process.pe.go_imports_names_entropy': 'long', + 'process.pe.go_imports_names_var_entropy': 'long', + 'process.pe.go_stripped': 'boolean', + 'process.pe.imphash': 'keyword', + 'process.pe.import_hash': 'keyword', + 'process.pe.imports': 'flattened', + 'process.pe.imports_names_entropy': 'long', + 'process.pe.imports_names_var_entropy': 'long', + 'process.pe.original_file_name': 'keyword', + 'process.pe.pehash': 'keyword', + 'process.pe.product': 'keyword', + 'process.pe.sections': 'nested', + 'process.pe.sections.entropy': 'long', + 'process.pe.sections.name': 'keyword', + 'process.pe.sections.physical_size': 'long', + 'process.pe.sections.var_entropy': 'long', + 'process.pe.sections.virtual_size': 'long', + 'process.pgid': 'long', + 'process.pid': 'long', + 'process.previous.args': 'keyword', + 'process.previous.args_count': 'long', + 'process.previous.executable': 'keyword', + 'process.real_group.id': 'keyword', + 'process.real_group.name': 'keyword', + 'process.real_user.id': 'keyword', + 'process.real_user.name': 'keyword', + 'process.saved_group.id': 'keyword', + 'process.saved_group.name': 'keyword', + 'process.saved_user.id': 'keyword', + 'process.saved_user.name': 'keyword', + 'process.session_leader.args': 'keyword', + 'process.session_leader.args_count': 'long', + 'process.session_leader.command_line': 'wildcard', + 'process.session_leader.entity_id': 'keyword', + 'process.session_leader.executable': 'keyword', + 'process.session_leader.group.id': 'keyword', + 'process.session_leader.group.name': 'keyword', + 'process.session_leader.interactive': 'boolean', + 'process.session_leader.name': 'keyword', + 'process.session_leader.parent.entity_id': 'keyword', + 'process.session_leader.parent.pid': 'long', + 'process.session_leader.parent.session_leader.entity_id': 'keyword', + 'process.session_leader.parent.session_leader.pid': 'long', + 'process.session_leader.parent.session_leader.start': 'date', + 'process.session_leader.parent.session_leader.vpid': 'long', + 'process.session_leader.parent.start': 'date', + 'process.session_leader.parent.vpid': 'long', + 'process.session_leader.pid': 'long', + 'process.session_leader.real_group.id': 'keyword', + 'process.session_leader.real_group.name': 'keyword', + 'process.session_leader.real_user.id': 'keyword', + 'process.session_leader.real_user.name': 'keyword', + 'process.session_leader.same_as_process': 'boolean', + 'process.session_leader.saved_group.id': 'keyword', + 'process.session_leader.saved_group.name': 'keyword', + 'process.session_leader.saved_user.id': 'keyword', + 'process.session_leader.saved_user.name': 'keyword', + 'process.session_leader.start': 'date', + 'process.session_leader.supplemental_groups.id': 'keyword', + 'process.session_leader.supplemental_groups.name': 'keyword', + 'process.session_leader.tty': 'object', + 'process.session_leader.tty.char_device.major': 'long', + 'process.session_leader.tty.char_device.minor': 'long', + 'process.session_leader.user.id': 'keyword', + 'process.session_leader.user.name': 'keyword', + 'process.session_leader.vpid': 'long', + 'process.session_leader.working_directory': 'keyword', + 'process.start': 'date', + 'process.supplemental_groups.id': 'keyword', + 'process.supplemental_groups.name': 'keyword', + 'process.thread.capabilities.effective': 'keyword', + 'process.thread.capabilities.permitted': 'keyword', + 'process.thread.id': 'long', + 'process.thread.name': 'keyword', + 'process.title': 'keyword', + 'process.tty': 'object', + 'process.tty.char_device.major': 'long', + 'process.tty.char_device.minor': 'long', + 'process.tty.columns': 'long', + 'process.tty.rows': 'long', + 'process.uptime': 'long', + 'process.user.id': 'keyword', + 'process.user.name': 'keyword', + 'process.vpid': 'long', + 'process.working_directory': 'keyword', + 'registry.data.bytes': 'keyword', + 'registry.data.strings': 'wildcard', + 'registry.data.type': 'keyword', + 'registry.hive': 'keyword', + 'registry.key': 'keyword', + 'registry.path': 'keyword', + 'registry.value': 'keyword', + 'related.hash': 'keyword', + 'related.hosts': 'keyword', + 'related.ip': 'ip', + 'related.user': 'keyword', + 'rule.author': 'keyword', + 'rule.category': 'keyword', + 'rule.description': 'keyword', + 'rule.id': 'keyword', + 'rule.license': 'keyword', + 'rule.name': 'keyword', + 'rule.reference': 'keyword', + 'rule.ruleset': 'keyword', + 'rule.uuid': 'keyword', + 'rule.version': 'keyword', + 'server.address': 'keyword', + 'server.as.number': 'long', + 'server.as.organization.name': 'keyword', + 'server.bytes': 'long', + 'server.domain': 'keyword', + 'server.geo.city_name': 'keyword', + 'server.geo.continent_code': 'keyword', + 'server.geo.continent_name': 'keyword', + 'server.geo.country_iso_code': 'keyword', + 'server.geo.country_name': 'keyword', + 'server.geo.location': 'geo_point', + 'server.geo.name': 'keyword', + 'server.geo.postal_code': 'keyword', + 'server.geo.region_iso_code': 'keyword', + 'server.geo.region_name': 'keyword', + 'server.geo.timezone': 'keyword', + 'server.ip': 'ip', + 'server.mac': 'keyword', + 'server.nat.ip': 'ip', + 'server.nat.port': 'long', + 'server.packets': 'long', + 'server.port': 'long', + 'server.registered_domain': 'keyword', + 'server.subdomain': 'keyword', + 'server.top_level_domain': 'keyword', + 'server.user.domain': 'keyword', + 'server.user.email': 'keyword', + 'server.user.full_name': 'keyword', + 'server.user.group.domain': 'keyword', + 'server.user.group.id': 'keyword', + 'server.user.group.name': 'keyword', + 'server.user.hash': 'keyword', + 'server.user.id': 'keyword', + 'server.user.name': 'keyword', + 'server.user.roles': 'keyword', + 'service.address': 'keyword', + 'service.environment': 'keyword', + 'service.ephemeral_id': 'keyword', + 'service.id': 'keyword', + 'service.name': 'keyword', + 'service.node.name': 'keyword', + 'service.node.role': 'keyword', + 'service.node.roles': 'keyword', + 'service.origin.address': 'keyword', + 'service.origin.environment': 'keyword', + 'service.origin.ephemeral_id': 'keyword', + 'service.origin.id': 'keyword', + 'service.origin.name': 'keyword', + 'service.origin.node.name': 'keyword', + 'service.origin.node.role': 'keyword', + 'service.origin.node.roles': 'keyword', + 'service.origin.state': 'keyword', + 'service.origin.type': 'keyword', + 'service.origin.version': 'keyword', + 'service.state': 'keyword', + 'service.target.address': 'keyword', + 'service.target.environment': 'keyword', + 'service.target.ephemeral_id': 'keyword', + 'service.target.id': 'keyword', + 'service.target.name': 'keyword', + 'service.target.node.name': 'keyword', + 'service.target.node.role': 'keyword', + 'service.target.node.roles': 'keyword', + 'service.target.state': 'keyword', + 'service.target.type': 'keyword', + 'service.target.version': 'keyword', + 'service.type': 'keyword', + 'service.version': 'keyword', + 'source.address': 'keyword', + 'source.as.number': 'long', + 'source.as.organization.name': 'keyword', + 'source.bytes': 'long', + 'source.domain': 'keyword', + 'source.geo.city_name': 'keyword', + 'source.geo.continent_code': 'keyword', + 'source.geo.continent_name': 'keyword', + 'source.geo.country_iso_code': 'keyword', + 'source.geo.country_name': 'keyword', + 'source.geo.location': 'geo_point', + 'source.geo.name': 'keyword', + 'source.geo.postal_code': 'keyword', + 'source.geo.region_iso_code': 'keyword', + 'source.geo.region_name': 'keyword', + 'source.geo.timezone': 'keyword', + 'source.ip': 'ip', + 'source.mac': 'keyword', + 'source.nat.ip': 'ip', + 'source.nat.port': 'long', + 'source.packets': 'long', + 'source.port': 'long', + 'source.registered_domain': 'keyword', + 'source.subdomain': 'keyword', + 'source.top_level_domain': 'keyword', + 'source.user.domain': 'keyword', + 'source.user.email': 'keyword', + 'source.user.full_name': 'keyword', + 'source.user.group.domain': 'keyword', + 'source.user.group.id': 'keyword', + 'source.user.group.name': 'keyword', + 'source.user.hash': 'keyword', + 'source.user.id': 'keyword', + 'source.user.name': 'keyword', + 'source.user.roles': 'keyword', + 'span.id': 'keyword', + tags: 'keyword', + 'threat.enrichments': 'nested', + 'threat.enrichments.indicator': 'object', + 'threat.enrichments.indicator.as.number': 'long', + 'threat.enrichments.indicator.as.organization.name': 'keyword', + 'threat.enrichments.indicator.confidence': 'keyword', + 'threat.enrichments.indicator.description': 'keyword', + 'threat.enrichments.indicator.email.address': 'keyword', + 'threat.enrichments.indicator.file.accessed': 'date', + 'threat.enrichments.indicator.file.attributes': 'keyword', + 'threat.enrichments.indicator.file.code_signature.digest_algorithm': 'keyword', + 'threat.enrichments.indicator.file.code_signature.exists': 'boolean', + 'threat.enrichments.indicator.file.code_signature.signing_id': 'keyword', + 'threat.enrichments.indicator.file.code_signature.status': 'keyword', + 'threat.enrichments.indicator.file.code_signature.subject_name': 'keyword', + 'threat.enrichments.indicator.file.code_signature.team_id': 'keyword', + 'threat.enrichments.indicator.file.code_signature.timestamp': 'date', + 'threat.enrichments.indicator.file.code_signature.trusted': 'boolean', + 'threat.enrichments.indicator.file.code_signature.valid': 'boolean', + 'threat.enrichments.indicator.file.created': 'date', + 'threat.enrichments.indicator.file.ctime': 'date', + 'threat.enrichments.indicator.file.device': 'keyword', + 'threat.enrichments.indicator.file.directory': 'keyword', + 'threat.enrichments.indicator.file.drive_letter': 'keyword', + 'threat.enrichments.indicator.file.elf.architecture': 'keyword', + 'threat.enrichments.indicator.file.elf.byte_order': 'keyword', + 'threat.enrichments.indicator.file.elf.cpu_type': 'keyword', + 'threat.enrichments.indicator.file.elf.creation_date': 'date', + 'threat.enrichments.indicator.file.elf.exports': 'flattened', + 'threat.enrichments.indicator.file.elf.go_import_hash': 'keyword', + 'threat.enrichments.indicator.file.elf.go_imports': 'flattened', + 'threat.enrichments.indicator.file.elf.go_imports_names_entropy': 'long', + 'threat.enrichments.indicator.file.elf.go_imports_names_var_entropy': 'long', + 'threat.enrichments.indicator.file.elf.go_stripped': 'boolean', + 'threat.enrichments.indicator.file.elf.header.abi_version': 'keyword', + 'threat.enrichments.indicator.file.elf.header.class': 'keyword', + 'threat.enrichments.indicator.file.elf.header.data': 'keyword', + 'threat.enrichments.indicator.file.elf.header.entrypoint': 'long', + 'threat.enrichments.indicator.file.elf.header.object_version': 'keyword', + 'threat.enrichments.indicator.file.elf.header.os_abi': 'keyword', + 'threat.enrichments.indicator.file.elf.header.type': 'keyword', + 'threat.enrichments.indicator.file.elf.header.version': 'keyword', + 'threat.enrichments.indicator.file.elf.import_hash': 'keyword', + 'threat.enrichments.indicator.file.elf.imports': 'flattened', + 'threat.enrichments.indicator.file.elf.imports_names_entropy': 'long', + 'threat.enrichments.indicator.file.elf.imports_names_var_entropy': 'long', + 'threat.enrichments.indicator.file.elf.sections': 'nested', + 'threat.enrichments.indicator.file.elf.sections.chi2': 'long', + 'threat.enrichments.indicator.file.elf.sections.entropy': 'long', + 'threat.enrichments.indicator.file.elf.sections.flags': 'keyword', + 'threat.enrichments.indicator.file.elf.sections.name': 'keyword', + 'threat.enrichments.indicator.file.elf.sections.physical_offset': 'keyword', + 'threat.enrichments.indicator.file.elf.sections.physical_size': 'long', + 'threat.enrichments.indicator.file.elf.sections.type': 'keyword', + 'threat.enrichments.indicator.file.elf.sections.var_entropy': 'long', + 'threat.enrichments.indicator.file.elf.sections.virtual_address': 'long', + 'threat.enrichments.indicator.file.elf.sections.virtual_size': 'long', + 'threat.enrichments.indicator.file.elf.segments': 'nested', + 'threat.enrichments.indicator.file.elf.segments.sections': 'keyword', + 'threat.enrichments.indicator.file.elf.segments.type': 'keyword', + 'threat.enrichments.indicator.file.elf.shared_libraries': 'keyword', + 'threat.enrichments.indicator.file.elf.telfhash': 'keyword', + 'threat.enrichments.indicator.file.extension': 'keyword', + 'threat.enrichments.indicator.file.fork_name': 'keyword', + 'threat.enrichments.indicator.file.gid': 'keyword', + 'threat.enrichments.indicator.file.group': 'keyword', + 'threat.enrichments.indicator.file.hash.md5': 'keyword', + 'threat.enrichments.indicator.file.hash.sha1': 'keyword', + 'threat.enrichments.indicator.file.hash.sha256': 'keyword', + 'threat.enrichments.indicator.file.hash.sha384': 'keyword', + 'threat.enrichments.indicator.file.hash.sha512': 'keyword', + 'threat.enrichments.indicator.file.hash.ssdeep': 'keyword', + 'threat.enrichments.indicator.file.hash.tlsh': 'keyword', + 'threat.enrichments.indicator.file.inode': 'keyword', + 'threat.enrichments.indicator.file.mime_type': 'keyword', + 'threat.enrichments.indicator.file.mode': 'keyword', + 'threat.enrichments.indicator.file.mtime': 'date', + 'threat.enrichments.indicator.file.name': 'keyword', + 'threat.enrichments.indicator.file.owner': 'keyword', + 'threat.enrichments.indicator.file.path': 'keyword', + 'threat.enrichments.indicator.file.pe.architecture': 'keyword', + 'threat.enrichments.indicator.file.pe.company': 'keyword', + 'threat.enrichments.indicator.file.pe.description': 'keyword', + 'threat.enrichments.indicator.file.pe.file_version': 'keyword', + 'threat.enrichments.indicator.file.pe.go_import_hash': 'keyword', + 'threat.enrichments.indicator.file.pe.go_imports': 'flattened', + 'threat.enrichments.indicator.file.pe.go_imports_names_entropy': 'long', + 'threat.enrichments.indicator.file.pe.go_imports_names_var_entropy': 'long', + 'threat.enrichments.indicator.file.pe.go_stripped': 'boolean', + 'threat.enrichments.indicator.file.pe.imphash': 'keyword', + 'threat.enrichments.indicator.file.pe.import_hash': 'keyword', + 'threat.enrichments.indicator.file.pe.imports': 'flattened', + 'threat.enrichments.indicator.file.pe.imports_names_entropy': 'long', + 'threat.enrichments.indicator.file.pe.imports_names_var_entropy': 'long', + 'threat.enrichments.indicator.file.pe.original_file_name': 'keyword', + 'threat.enrichments.indicator.file.pe.pehash': 'keyword', + 'threat.enrichments.indicator.file.pe.product': 'keyword', + 'threat.enrichments.indicator.file.pe.sections': 'nested', + 'threat.enrichments.indicator.file.pe.sections.entropy': 'long', + 'threat.enrichments.indicator.file.pe.sections.name': 'keyword', + 'threat.enrichments.indicator.file.pe.sections.physical_size': 'long', + 'threat.enrichments.indicator.file.pe.sections.var_entropy': 'long', + 'threat.enrichments.indicator.file.pe.sections.virtual_size': 'long', + 'threat.enrichments.indicator.file.size': 'long', + 'threat.enrichments.indicator.file.target_path': 'keyword', + 'threat.enrichments.indicator.file.type': 'keyword', + 'threat.enrichments.indicator.file.uid': 'keyword', + 'threat.enrichments.indicator.file.x509.alternative_names': 'keyword', + 'threat.enrichments.indicator.file.x509.issuer.common_name': 'keyword', + 'threat.enrichments.indicator.file.x509.issuer.country': 'keyword', + 'threat.enrichments.indicator.file.x509.issuer.distinguished_name': 'keyword', + 'threat.enrichments.indicator.file.x509.issuer.locality': 'keyword', + 'threat.enrichments.indicator.file.x509.issuer.organization': 'keyword', + 'threat.enrichments.indicator.file.x509.issuer.organizational_unit': 'keyword', + 'threat.enrichments.indicator.file.x509.issuer.state_or_province': 'keyword', + 'threat.enrichments.indicator.file.x509.not_after': 'date', + 'threat.enrichments.indicator.file.x509.not_before': 'date', + 'threat.enrichments.indicator.file.x509.public_key_algorithm': 'keyword', + 'threat.enrichments.indicator.file.x509.public_key_curve': 'keyword', + 'threat.enrichments.indicator.file.x509.public_key_exponent': 'long', + 'threat.enrichments.indicator.file.x509.public_key_size': 'long', + 'threat.enrichments.indicator.file.x509.serial_number': 'keyword', + 'threat.enrichments.indicator.file.x509.signature_algorithm': 'keyword', + 'threat.enrichments.indicator.file.x509.subject.common_name': 'keyword', + 'threat.enrichments.indicator.file.x509.subject.country': 'keyword', + 'threat.enrichments.indicator.file.x509.subject.distinguished_name': 'keyword', + 'threat.enrichments.indicator.file.x509.subject.locality': 'keyword', + 'threat.enrichments.indicator.file.x509.subject.organization': 'keyword', + 'threat.enrichments.indicator.file.x509.subject.organizational_unit': 'keyword', + 'threat.enrichments.indicator.file.x509.subject.state_or_province': 'keyword', + 'threat.enrichments.indicator.file.x509.version_number': 'keyword', + 'threat.enrichments.indicator.first_seen': 'date', + 'threat.enrichments.indicator.geo.city_name': 'keyword', + 'threat.enrichments.indicator.geo.continent_code': 'keyword', + 'threat.enrichments.indicator.geo.continent_name': 'keyword', + 'threat.enrichments.indicator.geo.country_iso_code': 'keyword', + 'threat.enrichments.indicator.geo.country_name': 'keyword', + 'threat.enrichments.indicator.geo.location': 'geo_point', + 'threat.enrichments.indicator.geo.name': 'keyword', + 'threat.enrichments.indicator.geo.postal_code': 'keyword', + 'threat.enrichments.indicator.geo.region_iso_code': 'keyword', + 'threat.enrichments.indicator.geo.region_name': 'keyword', + 'threat.enrichments.indicator.geo.timezone': 'keyword', + 'threat.enrichments.indicator.ip': 'ip', + 'threat.enrichments.indicator.last_seen': 'date', + 'threat.enrichments.indicator.marking.tlp': 'keyword', + 'threat.enrichments.indicator.marking.tlp_version': 'keyword', + 'threat.enrichments.indicator.modified_at': 'date', + 'threat.enrichments.indicator.name': 'keyword', + 'threat.enrichments.indicator.port': 'long', + 'threat.enrichments.indicator.provider': 'keyword', + 'threat.enrichments.indicator.reference': 'keyword', + 'threat.enrichments.indicator.registry.data.bytes': 'keyword', + 'threat.enrichments.indicator.registry.data.strings': 'wildcard', + 'threat.enrichments.indicator.registry.data.type': 'keyword', + 'threat.enrichments.indicator.registry.hive': 'keyword', + 'threat.enrichments.indicator.registry.key': 'keyword', + 'threat.enrichments.indicator.registry.path': 'keyword', + 'threat.enrichments.indicator.registry.value': 'keyword', + 'threat.enrichments.indicator.scanner_stats': 'long', + 'threat.enrichments.indicator.sightings': 'long', + 'threat.enrichments.indicator.type': 'keyword', + 'threat.enrichments.indicator.url.domain': 'keyword', + 'threat.enrichments.indicator.url.extension': 'keyword', + 'threat.enrichments.indicator.url.fragment': 'keyword', + 'threat.enrichments.indicator.url.full': 'wildcard', + 'threat.enrichments.indicator.url.original': 'wildcard', + 'threat.enrichments.indicator.url.password': 'keyword', + 'threat.enrichments.indicator.url.path': 'wildcard', + 'threat.enrichments.indicator.url.port': 'long', + 'threat.enrichments.indicator.url.query': 'keyword', + 'threat.enrichments.indicator.url.registered_domain': 'keyword', + 'threat.enrichments.indicator.url.scheme': 'keyword', + 'threat.enrichments.indicator.url.subdomain': 'keyword', + 'threat.enrichments.indicator.url.top_level_domain': 'keyword', + 'threat.enrichments.indicator.url.username': 'keyword', + 'threat.enrichments.indicator.x509.alternative_names': 'keyword', + 'threat.enrichments.indicator.x509.issuer.common_name': 'keyword', + 'threat.enrichments.indicator.x509.issuer.country': 'keyword', + 'threat.enrichments.indicator.x509.issuer.distinguished_name': 'keyword', + 'threat.enrichments.indicator.x509.issuer.locality': 'keyword', + 'threat.enrichments.indicator.x509.issuer.organization': 'keyword', + 'threat.enrichments.indicator.x509.issuer.organizational_unit': 'keyword', + 'threat.enrichments.indicator.x509.issuer.state_or_province': 'keyword', + 'threat.enrichments.indicator.x509.not_after': 'date', + 'threat.enrichments.indicator.x509.not_before': 'date', + 'threat.enrichments.indicator.x509.public_key_algorithm': 'keyword', + 'threat.enrichments.indicator.x509.public_key_curve': 'keyword', + 'threat.enrichments.indicator.x509.public_key_exponent': 'long', + 'threat.enrichments.indicator.x509.public_key_size': 'long', + 'threat.enrichments.indicator.x509.serial_number': 'keyword', + 'threat.enrichments.indicator.x509.signature_algorithm': 'keyword', + 'threat.enrichments.indicator.x509.subject.common_name': 'keyword', + 'threat.enrichments.indicator.x509.subject.country': 'keyword', + 'threat.enrichments.indicator.x509.subject.distinguished_name': 'keyword', + 'threat.enrichments.indicator.x509.subject.locality': 'keyword', + 'threat.enrichments.indicator.x509.subject.organization': 'keyword', + 'threat.enrichments.indicator.x509.subject.organizational_unit': 'keyword', + 'threat.enrichments.indicator.x509.subject.state_or_province': 'keyword', + 'threat.enrichments.indicator.x509.version_number': 'keyword', + 'threat.enrichments.matched.atomic': 'keyword', + 'threat.enrichments.matched.field': 'keyword', + 'threat.enrichments.matched.id': 'keyword', + 'threat.enrichments.matched.index': 'keyword', + 'threat.enrichments.matched.occurred': 'date', + 'threat.enrichments.matched.type': 'keyword', + 'threat.feed.dashboard_id': 'keyword', + 'threat.feed.description': 'keyword', + 'threat.feed.name': 'keyword', + 'threat.feed.reference': 'keyword', + 'threat.framework': 'keyword', + 'threat.group.alias': 'keyword', + 'threat.group.id': 'keyword', + 'threat.group.name': 'keyword', + 'threat.group.reference': 'keyword', + 'threat.indicator.as.number': 'long', + 'threat.indicator.as.organization.name': 'keyword', + 'threat.indicator.confidence': 'keyword', + 'threat.indicator.description': 'keyword', + 'threat.indicator.email.address': 'keyword', + 'threat.indicator.file.accessed': 'date', + 'threat.indicator.file.attributes': 'keyword', + 'threat.indicator.file.code_signature.digest_algorithm': 'keyword', + 'threat.indicator.file.code_signature.exists': 'boolean', + 'threat.indicator.file.code_signature.signing_id': 'keyword', + 'threat.indicator.file.code_signature.status': 'keyword', + 'threat.indicator.file.code_signature.subject_name': 'keyword', + 'threat.indicator.file.code_signature.team_id': 'keyword', + 'threat.indicator.file.code_signature.timestamp': 'date', + 'threat.indicator.file.code_signature.trusted': 'boolean', + 'threat.indicator.file.code_signature.valid': 'boolean', + 'threat.indicator.file.created': 'date', + 'threat.indicator.file.ctime': 'date', + 'threat.indicator.file.device': 'keyword', + 'threat.indicator.file.directory': 'keyword', + 'threat.indicator.file.drive_letter': 'keyword', + 'threat.indicator.file.elf.architecture': 'keyword', + 'threat.indicator.file.elf.byte_order': 'keyword', + 'threat.indicator.file.elf.cpu_type': 'keyword', + 'threat.indicator.file.elf.creation_date': 'date', + 'threat.indicator.file.elf.exports': 'flattened', + 'threat.indicator.file.elf.go_import_hash': 'keyword', + 'threat.indicator.file.elf.go_imports': 'flattened', + 'threat.indicator.file.elf.go_imports_names_entropy': 'long', + 'threat.indicator.file.elf.go_imports_names_var_entropy': 'long', + 'threat.indicator.file.elf.go_stripped': 'boolean', + 'threat.indicator.file.elf.header.abi_version': 'keyword', + 'threat.indicator.file.elf.header.class': 'keyword', + 'threat.indicator.file.elf.header.data': 'keyword', + 'threat.indicator.file.elf.header.entrypoint': 'long', + 'threat.indicator.file.elf.header.object_version': 'keyword', + 'threat.indicator.file.elf.header.os_abi': 'keyword', + 'threat.indicator.file.elf.header.type': 'keyword', + 'threat.indicator.file.elf.header.version': 'keyword', + 'threat.indicator.file.elf.import_hash': 'keyword', + 'threat.indicator.file.elf.imports': 'flattened', + 'threat.indicator.file.elf.imports_names_entropy': 'long', + 'threat.indicator.file.elf.imports_names_var_entropy': 'long', + 'threat.indicator.file.elf.sections': 'nested', + 'threat.indicator.file.elf.sections.chi2': 'long', + 'threat.indicator.file.elf.sections.entropy': 'long', + 'threat.indicator.file.elf.sections.flags': 'keyword', + 'threat.indicator.file.elf.sections.name': 'keyword', + 'threat.indicator.file.elf.sections.physical_offset': 'keyword', + 'threat.indicator.file.elf.sections.physical_size': 'long', + 'threat.indicator.file.elf.sections.type': 'keyword', + 'threat.indicator.file.elf.sections.var_entropy': 'long', + 'threat.indicator.file.elf.sections.virtual_address': 'long', + 'threat.indicator.file.elf.sections.virtual_size': 'long', + 'threat.indicator.file.elf.segments': 'nested', + 'threat.indicator.file.elf.segments.sections': 'keyword', + 'threat.indicator.file.elf.segments.type': 'keyword', + 'threat.indicator.file.elf.shared_libraries': 'keyword', + 'threat.indicator.file.elf.telfhash': 'keyword', + 'threat.indicator.file.extension': 'keyword', + 'threat.indicator.file.fork_name': 'keyword', + 'threat.indicator.file.gid': 'keyword', + 'threat.indicator.file.group': 'keyword', + 'threat.indicator.file.hash.md5': 'keyword', + 'threat.indicator.file.hash.sha1': 'keyword', + 'threat.indicator.file.hash.sha256': 'keyword', + 'threat.indicator.file.hash.sha384': 'keyword', + 'threat.indicator.file.hash.sha512': 'keyword', + 'threat.indicator.file.hash.ssdeep': 'keyword', + 'threat.indicator.file.hash.tlsh': 'keyword', + 'threat.indicator.file.inode': 'keyword', + 'threat.indicator.file.mime_type': 'keyword', + 'threat.indicator.file.mode': 'keyword', + 'threat.indicator.file.mtime': 'date', + 'threat.indicator.file.name': 'keyword', + 'threat.indicator.file.owner': 'keyword', + 'threat.indicator.file.path': 'keyword', + 'threat.indicator.file.pe.architecture': 'keyword', + 'threat.indicator.file.pe.company': 'keyword', + 'threat.indicator.file.pe.description': 'keyword', + 'threat.indicator.file.pe.file_version': 'keyword', + 'threat.indicator.file.pe.go_import_hash': 'keyword', + 'threat.indicator.file.pe.go_imports': 'flattened', + 'threat.indicator.file.pe.go_imports_names_entropy': 'long', + 'threat.indicator.file.pe.go_imports_names_var_entropy': 'long', + 'threat.indicator.file.pe.go_stripped': 'boolean', + 'threat.indicator.file.pe.imphash': 'keyword', + 'threat.indicator.file.pe.import_hash': 'keyword', + 'threat.indicator.file.pe.imports': 'flattened', + 'threat.indicator.file.pe.imports_names_entropy': 'long', + 'threat.indicator.file.pe.imports_names_var_entropy': 'long', + 'threat.indicator.file.pe.original_file_name': 'keyword', + 'threat.indicator.file.pe.pehash': 'keyword', + 'threat.indicator.file.pe.product': 'keyword', + 'threat.indicator.file.pe.sections': 'nested', + 'threat.indicator.file.pe.sections.entropy': 'long', + 'threat.indicator.file.pe.sections.name': 'keyword', + 'threat.indicator.file.pe.sections.physical_size': 'long', + 'threat.indicator.file.pe.sections.var_entropy': 'long', + 'threat.indicator.file.pe.sections.virtual_size': 'long', + 'threat.indicator.file.size': 'long', + 'threat.indicator.file.target_path': 'keyword', + 'threat.indicator.file.type': 'keyword', + 'threat.indicator.file.uid': 'keyword', + 'threat.indicator.file.x509.alternative_names': 'keyword', + 'threat.indicator.file.x509.issuer.common_name': 'keyword', + 'threat.indicator.file.x509.issuer.country': 'keyword', + 'threat.indicator.file.x509.issuer.distinguished_name': 'keyword', + 'threat.indicator.file.x509.issuer.locality': 'keyword', + 'threat.indicator.file.x509.issuer.organization': 'keyword', + 'threat.indicator.file.x509.issuer.organizational_unit': 'keyword', + 'threat.indicator.file.x509.issuer.state_or_province': 'keyword', + 'threat.indicator.file.x509.not_after': 'date', + 'threat.indicator.file.x509.not_before': 'date', + 'threat.indicator.file.x509.public_key_algorithm': 'keyword', + 'threat.indicator.file.x509.public_key_curve': 'keyword', + 'threat.indicator.file.x509.public_key_exponent': 'long', + 'threat.indicator.file.x509.public_key_size': 'long', + 'threat.indicator.file.x509.serial_number': 'keyword', + 'threat.indicator.file.x509.signature_algorithm': 'keyword', + 'threat.indicator.file.x509.subject.common_name': 'keyword', + 'threat.indicator.file.x509.subject.country': 'keyword', + 'threat.indicator.file.x509.subject.distinguished_name': 'keyword', + 'threat.indicator.file.x509.subject.locality': 'keyword', + 'threat.indicator.file.x509.subject.organization': 'keyword', + 'threat.indicator.file.x509.subject.organizational_unit': 'keyword', + 'threat.indicator.file.x509.subject.state_or_province': 'keyword', + 'threat.indicator.file.x509.version_number': 'keyword', + 'threat.indicator.first_seen': 'date', + 'threat.indicator.geo.city_name': 'keyword', + 'threat.indicator.geo.continent_code': 'keyword', + 'threat.indicator.geo.continent_name': 'keyword', + 'threat.indicator.geo.country_iso_code': 'keyword', + 'threat.indicator.geo.country_name': 'keyword', + 'threat.indicator.geo.location': 'geo_point', + 'threat.indicator.geo.name': 'keyword', + 'threat.indicator.geo.postal_code': 'keyword', + 'threat.indicator.geo.region_iso_code': 'keyword', + 'threat.indicator.geo.region_name': 'keyword', + 'threat.indicator.geo.timezone': 'keyword', + 'threat.indicator.ip': 'ip', + 'threat.indicator.last_seen': 'date', + 'threat.indicator.marking.tlp': 'keyword', + 'threat.indicator.marking.tlp_version': 'keyword', + 'threat.indicator.modified_at': 'date', + 'threat.indicator.name': 'keyword', + 'threat.indicator.port': 'long', + 'threat.indicator.provider': 'keyword', + 'threat.indicator.reference': 'keyword', + 'threat.indicator.registry.data.bytes': 'keyword', + 'threat.indicator.registry.data.strings': 'wildcard', + 'threat.indicator.registry.data.type': 'keyword', + 'threat.indicator.registry.hive': 'keyword', + 'threat.indicator.registry.key': 'keyword', + 'threat.indicator.registry.path': 'keyword', + 'threat.indicator.registry.value': 'keyword', + 'threat.indicator.scanner_stats': 'long', + 'threat.indicator.sightings': 'long', + 'threat.indicator.type': 'keyword', + 'threat.indicator.url.domain': 'keyword', + 'threat.indicator.url.extension': 'keyword', + 'threat.indicator.url.fragment': 'keyword', + 'threat.indicator.url.full': 'wildcard', + 'threat.indicator.url.original': 'wildcard', + 'threat.indicator.url.password': 'keyword', + 'threat.indicator.url.path': 'wildcard', + 'threat.indicator.url.port': 'long', + 'threat.indicator.url.query': 'keyword', + 'threat.indicator.url.registered_domain': 'keyword', + 'threat.indicator.url.scheme': 'keyword', + 'threat.indicator.url.subdomain': 'keyword', + 'threat.indicator.url.top_level_domain': 'keyword', + 'threat.indicator.url.username': 'keyword', + 'threat.indicator.x509.alternative_names': 'keyword', + 'threat.indicator.x509.issuer.common_name': 'keyword', + 'threat.indicator.x509.issuer.country': 'keyword', + 'threat.indicator.x509.issuer.distinguished_name': 'keyword', + 'threat.indicator.x509.issuer.locality': 'keyword', + 'threat.indicator.x509.issuer.organization': 'keyword', + 'threat.indicator.x509.issuer.organizational_unit': 'keyword', + 'threat.indicator.x509.issuer.state_or_province': 'keyword', + 'threat.indicator.x509.not_after': 'date', + 'threat.indicator.x509.not_before': 'date', + 'threat.indicator.x509.public_key_algorithm': 'keyword', + 'threat.indicator.x509.public_key_curve': 'keyword', + 'threat.indicator.x509.public_key_exponent': 'long', + 'threat.indicator.x509.public_key_size': 'long', + 'threat.indicator.x509.serial_number': 'keyword', + 'threat.indicator.x509.signature_algorithm': 'keyword', + 'threat.indicator.x509.subject.common_name': 'keyword', + 'threat.indicator.x509.subject.country': 'keyword', + 'threat.indicator.x509.subject.distinguished_name': 'keyword', + 'threat.indicator.x509.subject.locality': 'keyword', + 'threat.indicator.x509.subject.organization': 'keyword', + 'threat.indicator.x509.subject.organizational_unit': 'keyword', + 'threat.indicator.x509.subject.state_or_province': 'keyword', + 'threat.indicator.x509.version_number': 'keyword', + 'threat.software.alias': 'keyword', + 'threat.software.id': 'keyword', + 'threat.software.name': 'keyword', + 'threat.software.platforms': 'keyword', + 'threat.software.reference': 'keyword', + 'threat.software.type': 'keyword', + 'threat.tactic.id': 'keyword', + 'threat.tactic.name': 'keyword', + 'threat.tactic.reference': 'keyword', + 'threat.technique.id': 'keyword', + 'threat.technique.name': 'keyword', + 'threat.technique.reference': 'keyword', + 'threat.technique.subtechnique.id': 'keyword', + 'threat.technique.subtechnique.name': 'keyword', + 'threat.technique.subtechnique.reference': 'keyword', + 'tls.cipher': 'keyword', + 'tls.client.certificate': 'keyword', + 'tls.client.certificate_chain': 'keyword', + 'tls.client.hash.md5': 'keyword', + 'tls.client.hash.sha1': 'keyword', + 'tls.client.hash.sha256': 'keyword', + 'tls.client.issuer': 'keyword', + 'tls.client.ja3': 'keyword', + 'tls.client.not_after': 'date', + 'tls.client.not_before': 'date', + 'tls.client.server_name': 'keyword', + 'tls.client.subject': 'keyword', + 'tls.client.supported_ciphers': 'keyword', + 'tls.client.x509.alternative_names': 'keyword', + 'tls.client.x509.issuer.common_name': 'keyword', + 'tls.client.x509.issuer.country': 'keyword', + 'tls.client.x509.issuer.distinguished_name': 'keyword', + 'tls.client.x509.issuer.locality': 'keyword', + 'tls.client.x509.issuer.organization': 'keyword', + 'tls.client.x509.issuer.organizational_unit': 'keyword', + 'tls.client.x509.issuer.state_or_province': 'keyword', + 'tls.client.x509.not_after': 'date', + 'tls.client.x509.not_before': 'date', + 'tls.client.x509.public_key_algorithm': 'keyword', + 'tls.client.x509.public_key_curve': 'keyword', + 'tls.client.x509.public_key_exponent': 'long', + 'tls.client.x509.public_key_size': 'long', + 'tls.client.x509.serial_number': 'keyword', + 'tls.client.x509.signature_algorithm': 'keyword', + 'tls.client.x509.subject.common_name': 'keyword', + 'tls.client.x509.subject.country': 'keyword', + 'tls.client.x509.subject.distinguished_name': 'keyword', + 'tls.client.x509.subject.locality': 'keyword', + 'tls.client.x509.subject.organization': 'keyword', + 'tls.client.x509.subject.organizational_unit': 'keyword', + 'tls.client.x509.subject.state_or_province': 'keyword', + 'tls.client.x509.version_number': 'keyword', + 'tls.curve': 'keyword', + 'tls.established': 'boolean', + 'tls.next_protocol': 'keyword', + 'tls.resumed': 'boolean', + 'tls.server.certificate': 'keyword', + 'tls.server.certificate_chain': 'keyword', + 'tls.server.hash.md5': 'keyword', + 'tls.server.hash.sha1': 'keyword', + 'tls.server.hash.sha256': 'keyword', + 'tls.server.issuer': 'keyword', + 'tls.server.ja3s': 'keyword', + 'tls.server.not_after': 'date', + 'tls.server.not_before': 'date', + 'tls.server.subject': 'keyword', + 'tls.server.x509.alternative_names': 'keyword', + 'tls.server.x509.issuer.common_name': 'keyword', + 'tls.server.x509.issuer.country': 'keyword', + 'tls.server.x509.issuer.distinguished_name': 'keyword', + 'tls.server.x509.issuer.locality': 'keyword', + 'tls.server.x509.issuer.organization': 'keyword', + 'tls.server.x509.issuer.organizational_unit': 'keyword', + 'tls.server.x509.issuer.state_or_province': 'keyword', + 'tls.server.x509.not_after': 'date', + 'tls.server.x509.not_before': 'date', + 'tls.server.x509.public_key_algorithm': 'keyword', + 'tls.server.x509.public_key_curve': 'keyword', + 'tls.server.x509.public_key_exponent': 'long', + 'tls.server.x509.public_key_size': 'long', + 'tls.server.x509.serial_number': 'keyword', + 'tls.server.x509.signature_algorithm': 'keyword', + 'tls.server.x509.subject.common_name': 'keyword', + 'tls.server.x509.subject.country': 'keyword', + 'tls.server.x509.subject.distinguished_name': 'keyword', + 'tls.server.x509.subject.locality': 'keyword', + 'tls.server.x509.subject.organization': 'keyword', + 'tls.server.x509.subject.organizational_unit': 'keyword', + 'tls.server.x509.subject.state_or_province': 'keyword', + 'tls.server.x509.version_number': 'keyword', + 'tls.version': 'keyword', + 'tls.version_protocol': 'keyword', + 'trace.id': 'keyword', + 'transaction.id': 'keyword', + 'url.domain': 'keyword', + 'url.extension': 'keyword', + 'url.fragment': 'keyword', + 'url.full': 'wildcard', + 'url.original': 'wildcard', + 'url.password': 'keyword', + 'url.path': 'wildcard', + 'url.port': 'long', + 'url.query': 'keyword', + 'url.registered_domain': 'keyword', + 'url.scheme': 'keyword', + 'url.subdomain': 'keyword', + 'url.top_level_domain': 'keyword', + 'url.username': 'keyword', + 'user.changes.domain': 'keyword', + 'user.changes.email': 'keyword', + 'user.changes.full_name': 'keyword', + 'user.changes.group.domain': 'keyword', + 'user.changes.group.id': 'keyword', + 'user.changes.group.name': 'keyword', + 'user.changes.hash': 'keyword', + 'user.changes.id': 'keyword', + 'user.changes.name': 'keyword', + 'user.changes.roles': 'keyword', + 'user.domain': 'keyword', + 'user.effective.domain': 'keyword', + 'user.effective.email': 'keyword', + 'user.effective.full_name': 'keyword', + 'user.effective.group.domain': 'keyword', + 'user.effective.group.id': 'keyword', + 'user.effective.group.name': 'keyword', + 'user.effective.hash': 'keyword', + 'user.effective.id': 'keyword', + 'user.effective.name': 'keyword', + 'user.effective.roles': 'keyword', + 'user.email': 'keyword', + 'user.full_name': 'keyword', + 'user.group.domain': 'keyword', + 'user.group.id': 'keyword', + 'user.group.name': 'keyword', + 'user.hash': 'keyword', + 'user.id': 'keyword', + 'user.name': 'keyword', + 'user.risk.calculated_level': 'keyword', + 'user.risk.calculated_score': 'float', + 'user.risk.calculated_score_norm': 'float', + 'user.risk.static_level': 'keyword', + 'user.risk.static_score': 'float', + 'user.risk.static_score_norm': 'float', + 'user.roles': 'keyword', + 'user.target.domain': 'keyword', + 'user.target.email': 'keyword', + 'user.target.full_name': 'keyword', + 'user.target.group.domain': 'keyword', + 'user.target.group.id': 'keyword', + 'user.target.group.name': 'keyword', + 'user.target.hash': 'keyword', + 'user.target.id': 'keyword', + 'user.target.name': 'keyword', + 'user.target.roles': 'keyword', + 'user_agent.device.name': 'keyword', + 'user_agent.name': 'keyword', + 'user_agent.original': 'keyword', + 'user_agent.os.family': 'keyword', + 'user_agent.os.full': 'keyword', + 'user_agent.os.kernel': 'keyword', + 'user_agent.os.name': 'keyword', + 'user_agent.os.platform': 'keyword', + 'user_agent.os.type': 'keyword', + 'user_agent.os.version': 'keyword', + 'user_agent.version': 'keyword', + 'volume.bus_type': 'keyword', + 'volume.default_access': 'keyword', + 'volume.device_name': 'keyword', + 'volume.device_type': 'keyword', + 'volume.dos_name': 'keyword', + 'volume.file_system_type': 'keyword', + 'volume.mount_name': 'keyword', + 'volume.nt_name': 'keyword', + 'volume.product_id': 'keyword', + 'volume.product_name': 'keyword', + 'volume.removable': 'boolean', + 'volume.serial_number': 'keyword', + 'volume.size': 'long', + 'volume.vendor_id': 'keyword', + 'volume.vendor_name': 'keyword', + 'volume.writable': 'boolean', + 'vulnerability.category': 'keyword', + 'vulnerability.classification': 'keyword', + 'vulnerability.description': 'keyword', + 'vulnerability.enumeration': 'keyword', + 'vulnerability.id': 'keyword', + 'vulnerability.reference': 'keyword', + 'vulnerability.report_id': 'keyword', + 'vulnerability.scanner.vendor': 'keyword', + 'vulnerability.score.base': 'float', + 'vulnerability.score.environmental': 'float', + 'vulnerability.score.temporal': 'float', + 'vulnerability.score.version': 'keyword', + 'vulnerability.severity': 'keyword', +}; + +export const ECS_FIELDS: EcsFields = { + 'destination.address': 'Destination network address.', + 'destination.bytes': 'Bytes sent from the destination to the source.', + 'destination.domain': 'The domain name of the destination.', + 'destination.ip': 'IP address of the destination.', + 'destination.mac': 'MAC address of the destination.', + 'destination.packets': 'Packets sent from the destination to the source.', + 'destination.port': 'Port of the destination.', + 'destination.user.domain': 'Name of the directory the user is a member of.', + 'destination.user.email': 'User email address.', + 'destination.user.full_name': 'Users full name, if available.', + 'destination.user.group.domain': 'Name of the directory the group is a member of.', + 'destination.user.group.id': 'Unique identifier for the group on the system/platform.', + 'destination.user.group.name': 'Name of the group.', + 'destination.user.id': 'Unique identifier of the user.', + 'destination.user.name': 'Short name or login of the user.', + 'event.action': 'The action captured by the event.', + 'event.created': 'Time when the event was first read by an agent or by your pipeline.', + 'event.code': 'Identification code for this event.', + 'event.duration': 'Duration of the event in nanoseconds.', + 'event.end': + 'event.end contains the date when the event ended or when the activity was last observed.', + 'event.id': 'Unique ID to describe the event.', + 'event.severity': 'Numeric severity of the event.', + 'file.directory': 'Directory where the file is located.', + 'file.extension': 'File extension, excluding the leading dot.', + 'file.gid': 'Primary group ID (GID) of the file.', + 'file.group': 'Primary group name of the file.', + 'file.hash.md5': 'MD5 hash.', + 'file.hash.sha1': 'SHA1 hash.', + 'file.hash.sha256': 'SHA256 hash.', + 'file.inode': 'Inode representing the file in the filesystem.', + 'file.name': 'Name of the file including the extension, without the directory.', + 'file.path': 'Full path to the file, including the file name.', + 'file.size': 'File size in bytes.', + 'file.uid': 'The user ID (UID) or security identifier (SID) of the file owner.', + 'group.domain': 'Name of the directory the group is a member of.', + 'group.id': 'Unique identifier for the group on the system/platform.', + 'group.name': 'Name of the group.', + 'http.request.method': 'HTTP request method.', + 'http.response.status_code': 'HTTP response status code.', + 'http.version': 'HTTP version.', + 'network.application': 'Application level protocol name.', + 'network.bytes': 'Total bytes transferred in both directions.', + 'network.direction': 'Direction of the network traffic.', + 'network.packets': 'Total packets transferred in both directions.', + 'network.protocol': 'Application protocol name.', + 'network.transport': 'Protocol Name corresponding to the field `iana_number`.', + 'network.type': 'In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc', + 'organization.id': 'Unique identifier for the organization.', + 'organization.name': 'Organization name.', + 'process.args': 'Array of process arguments.', + 'process.args_count': 'Length of the process.args array.', + 'process.command_line': 'Full command line that started the process.', + 'process.end': 'The time the process ended.', + 'process.executable': 'Absolute path to the process executable.', + 'process.hash.md5': 'MD5 hash.', + 'process.hash.sha1': 'SHA1 hash.', + 'process.hash.sha256': 'SHA256 hash.', + 'process.name': 'Process name.', + 'process.parent.args': 'Array of process arguments.', + 'process.parent.args_count': 'Length of the process.args array.', + 'process.parent.command_line': 'Full command line that started the process.', + 'process.parent.end': 'The time the process ended.', + 'process.parent.executable': 'Absolute path to the process executable.', + 'process.parent.group.id': 'Unique identifier for the group on the system/platform.', + 'process.parent.group.name': 'Name of the group.', + 'process.parent.hash.md5': 'MD5 hash.', + 'process.parent.hash.sha1': 'SHA1 hash.', + 'process.parent.hash.sha256': 'SHA256 hash.', + 'process.parent.name': 'Process name.', + 'process.parent.pgid': 'Deprecated identifier of the group of processes the process belongs to.', + 'process.parent.pid': 'Process id.', + 'process.parent.start': 'The time the process started.', + 'process.parent.thread.id': 'Thread ID.', + 'process.parent.thread.name': 'Thread name.', + 'process.parent.user.id': 'Unique identifier of the user.', + 'process.parent.user.name': 'Short name or login of the user.', + 'process.pgid': 'Deprecated identifier of the group of processes the process belongs to.', + 'process.pid': 'Process id.', + 'process.start': 'The time the process started.', + 'process.thread.id': 'Thread ID.', + 'process.thread.name': 'Thread name.', + 'process.user.id': 'Unique identifier of the user.', + 'process.user.name': 'Short name or login of the user.', + 'rule.author': 'Rule author', + 'rule.category': 'Rule category', + 'rule.description': 'Rule description', + 'rule.id': 'Rule ID', + 'rule.license': 'Rule license', + 'rule.name': 'Rule name', + 'rule.reference': 'Rule reference URL', + 'rule.ruleset': 'Rule ruleset', + 'rule.uuid': 'Rule UUID', + 'rule.version': 'Rule version', + 'source.address': 'Source network address.', + 'source.bytes': 'Bytes sent from the source to the destination.', + 'source.domain': 'The domain name of the source.', + 'source.ip': 'IP address of the source.', + 'source.mac': 'MAC address of the source.', + 'source.packets': 'Packets sent from the source to the destination.', + 'source.port': 'Port of the source.', + 'source.user.domain': 'Name of the directory the user is a member of.', + 'source.user.email': 'User email address.', + 'source.user.full_name': 'Users full name, if available.', + 'source.user.group.domain': 'Name of the directory the group is a member of.', + 'source.user.group.id': 'Unique identifier for the group on the system/platform.', + 'source.user.group.name': 'Name of the group.', + 'source.user.id': 'Unique identifier of the user.', + 'source.user.name': 'Short name or login of the user.', + 'source.user.roles': 'Array of user roles at the time of the event.', + 'tls.server.x509.alternative_names': 'List of subject alternative names (SAN).', + 'tls.server.x509.issuer.common_name': + 'List of common name (CN) of issuing certificate authority.', + 'threat.framework': 'Threat classification framework.', + 'threat.tactic.id': 'Threat tactic id.', + 'threat.tactic.name': 'Threat tactic.', + 'threat.technique.id': 'Threat technique id.', + 'threat.technique.name': 'Threat technique name.', + 'url.domain': 'Domain of the url.', + 'url.extension': 'File extension from the request url, excluding the leading dot.', + 'url.fragment': 'Portion of the url after the `#`.', + 'url.full': 'Full unparsed URL.', + 'url.original': 'Unmodified original url as seen in the event source.', + 'url.path': 'Path of the request, such as "/search".', + 'url.port': 'Port of the request, such as 443.', + 'url.query': 'Query string of the request.', + 'url.scheme': 'Scheme of the url.', + 'user.domain': 'Name of the directory the user is a member of.', + 'user.email': 'User email address.', + 'user.full_name': 'Users full name, if available.', + 'user.group.domain': 'Name of the directory the group is a member of.', + 'user.group.id': 'Unique identifier for the group on the system/platform.', + 'user.group.name': 'Name of the group.', + 'user.id': 'Unique identifier of the user.', + 'user.name': 'Short name or login of the user.', + 'user.roles': 'Array of user roles at the time of the event.', + 'user_agent.original': 'Unparsed user_agent string.', +}; + +export const ECS_EXAMPLE_ANSWER = { + crowdstrike: { + falcon: { + metadata: { + customerIDString: null, + offset: null, + eventType: { + target: 'event.code', + confidence: 0.94, + type: 'string', + date_formats: [], + }, + eventCreationTime: { + target: 'event.created', + confidence: 0.85, + type: 'date', + date_formats: ['UNIX'], + }, + version: null, + event: { + DeviceId: null, + CustomerId: null, + Ipv: { + target: 'network.type', + confidence: 0.99, + type: 'string', + date_formats: [], + }, + CommandLine: { + target: 'process.command_line', + confidence: 0.9, + type: 'string', + date_formats: [], + }, + ConnectionDirection: { + target: 'network.direction', + confidence: 0.9, + type: 'string', + date_formats: [], + }, + EventType: { + target: 'event.action', + confidence: 0.82, + type: 'string', + date_formats: [], + }, + Flags: { Audit: null, Log: null, Monitor: null }, + HostName: { + target: 'host.name', + confidence: 0.82, + type: 'string', + date_formats: [], + }, + LocalAddress: { + target: 'source.address', + confidence: 0.83, + type: 'string', + date_formats: [], + }, + LocalPort: { + target: 'source.port', + confidence: 0.83, + type: 'number', + date_formats: [], + }, + PolicyName: null, + RemoteAddress: { + target: 'destination.address', + confidence: 0.83, + type: 'string', + date_formats: [], + }, + RemotePort: { + target: 'destination.port', + confidence: 0.83, + type: 'number', + date_formats: [], + }, + RuleAction: { + target: 'event.type', + confidence: 0.86, + type: 'string', + date_formats: [], + }, + RuleDescription: { + target: 'rule.description', + confidence: 0.99, + type: 'string', + date_formats: [], + }, + UTCTimestamp: { + target: '@timestamp', + confidence: 0.99, + type: 'string', + date_formats: ['UNIX_MS'], + }, + }, + }, + }, + }, +}; diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.test.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.test.ts new file mode 100644 index 0000000000000..9270b2453e261 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleDuplicates } from './duplicates'; +import type { EcsMappingState } from '../../types'; +import { ecsTestState } from '../../../__jest__/fixtures/ecs_mapping'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: '{ "message": "ll callback later."}', +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: EcsMappingState = ecsTestState; + +describe('Testing ecs handler', () => { + it('handleDuplicates()', async () => { + const response = await handleDuplicates(testState, mockLlm); + expect(response.currentMapping).toStrictEqual({ message: 'll callback later.' }); + expect(response.lastExecutedChain).toBe('duplicateFields'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.ts new file mode 100644 index 0000000000000..fd11a660e75ab --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/duplicates.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { EcsMappingState } from '../../types'; +import { ECS_DUPLICATES_PROMPT } from './prompts'; + +export async function handleDuplicates( + state: EcsMappingState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const ecsDuplicatesPrompt = ECS_DUPLICATES_PROMPT; + const outputParser = new JsonOutputParser(); + const ecsDuplicatesGraph = ecsDuplicatesPrompt.pipe(model).pipe(outputParser); + + const currentMapping = await ecsDuplicatesGraph.invoke({ + ecs: state.ecs, + current_mapping: JSON.stringify(state.currentMapping, null, 2), + ex_answer: state.exAnswer, + duplicate_fields: state.duplicateFields, + }); + + return { currentMapping, lastExecutedChain: 'duplicateFields' }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.test.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.test.ts new file mode 100644 index 0000000000000..0ae626924c349 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.test.ts @@ -0,0 +1,92 @@ +/* + * Copyright 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 { FakeLLM } from '@langchain/core/utils/testing'; +import { getEcsGraph } from './graph'; +import { + ecsInitialMappingMockedResponse, + ecsDuplicateMockedResponse, + ecsInvalidMappingMockedResponse, + ecsMissingKeysMockedResponse, + ecsMappingExpectedResults, +} from '../../../__jest__/fixtures/ecs_mapping'; +import { mockedRequest } from '../../../__jest__/fixtures'; +import { handleEcsMapping } from './mapping'; +import { handleDuplicates } from './duplicates'; +import { handleMissingKeys } from './missing'; +import { handleInvalidEcs } from './invalid'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: "I'll callback later.", +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +jest.mock('./mapping'); +jest.mock('./duplicates'); +jest.mock('./missing'); +jest.mock('./invalid'); + +describe('EcsGraph', () => { + describe('Compiling and Running', () => { + beforeEach(() => { + // Mocked responses for each node that requires an LLM API call/response. + const mockInvokeMapping = jest.fn().mockResolvedValue(ecsInitialMappingMockedResponse); + const mockInvokeDuplicates = jest.fn().mockResolvedValue(ecsDuplicateMockedResponse); + const mockInvokeMissingKeys = jest.fn().mockResolvedValue(ecsMissingKeysMockedResponse); + const mockInvokeInvalidEcs = jest.fn().mockResolvedValue(ecsInvalidMappingMockedResponse); + + // Returns the initial response, with one duplicate field, to trigger the next step. + (handleEcsMapping as jest.Mock).mockImplementation(async () => ({ + currentMapping: await mockInvokeMapping(), + lastExecutedChain: 'ecsMapping', + })); + // Returns the response with the duplicate field removed, but missing one to trigger the next step. + (handleDuplicates as jest.Mock).mockImplementation(async () => ({ + currentMapping: await mockInvokeDuplicates(), + lastExecutedChain: 'duplicateFields', + })); + + // Returns the response with the missing field added, but invalid ECS field to trigger the next step. + (handleMissingKeys as jest.Mock).mockImplementation(async () => ({ + currentMapping: await mockInvokeMissingKeys(), + lastExecutedChain: 'missingKeys', + })); + + // Returns the response with the invalid ECS field fixed, which finishes the chain. + (handleInvalidEcs as jest.Mock).mockImplementation(async () => ({ + currentMapping: await mockInvokeInvalidEcs(), + lastExecutedChain: 'invalidEcs', + })); + }); + it('Ensures that the graph compiles', async () => { + // When getEcsGraph runs, langgraph compiles the graph it will error if the graph has any issues. + // Common issues for example detecting a node has no next step, or there is a infinite loop between them. + try { + await getEcsGraph(mockLlm); + } catch (error) { + fail(`getEcsGraph threw an error: ${error}`); + } + }); + it('Runs the whole graph, with mocked outputs from the LLM.', async () => { + // The mocked outputs are specifically crafted to trigger ALL different conditions, allowing us to test the whole graph. + // This is why we have all the expects ensuring each function was called. + + const ecsGraph = await getEcsGraph(mockLlm); + const response = await ecsGraph.invoke(mockedRequest); + expect(response.results).toStrictEqual(ecsMappingExpectedResults); + + // Check if the functions were called + expect(handleEcsMapping).toHaveBeenCalled(); + expect(handleDuplicates).toHaveBeenCalled(); + expect(handleMissingKeys).toHaveBeenCalled(); + expect(handleInvalidEcs).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.ts new file mode 100644 index 0000000000000..8c7347a8b5058 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/graph.ts @@ -0,0 +1,174 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { StateGraphArgs } from '@langchain/langgraph'; +import { StateGraph, END, START } from '@langchain/langgraph'; +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { ECS_EXAMPLE_ANSWER, ECS_FIELDS } from './constants'; +import { modifySamples, mergeSamples } from '../../util/samples'; +import { createPipeline } from './pipeline'; +import { handleEcsMapping } from './mapping'; +import { handleDuplicates } from './duplicates'; +import { handleMissingKeys } from './missing'; +import { handleInvalidEcs } from './invalid'; +import { handleValidateMappings } from './validate'; +import type { EcsMappingState } from '../../types'; + +const graphState: StateGraphArgs['channels'] = { + ecs: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + lastExecutedChain: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + rawSamples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + samples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + formattedSamples: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + exAnswer: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + packageName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + dataStreamName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + finalized: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + currentMapping: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + currentPipeline: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + duplicateFields: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + missingKeys: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + invalidEcsFields: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + results: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + logFormat: { + value: (x: string, y?: string) => y ?? x, + default: () => 'json', + }, + ecsVersion: { + value: (x: string, y?: string) => y ?? x, + default: () => '8.11.0', + }, +}; + +function modelInput(state: EcsMappingState): Partial { + const samples = modifySamples(state); + const formattedSamples = mergeSamples(samples); + return { + exAnswer: JSON.stringify(ECS_EXAMPLE_ANSWER, null, 2), + ecs: JSON.stringify(ECS_FIELDS, null, 2), + samples, + finalized: false, + formattedSamples, + lastExecutedChain: 'modelInput', + }; +} + +function modelOutput(state: EcsMappingState): Partial { + const currentPipeline = createPipeline(state); + return { + finalized: true, + lastExecutedChain: 'modelOutput', + results: { + mapping: state.currentMapping, + pipeline: currentPipeline, + }, + }; +} + +function inputRouter(state: EcsMappingState): string { + if (Object.keys(state.currentMapping).length === 0) { + return 'ecsMapping'; + } + return 'modelOutput'; +} + +function chainRouter(state: EcsMappingState): string { + if (Object.keys(state.duplicateFields).length > 0) { + return 'duplicateFields'; + } + if (Object.keys(state.missingKeys).length > 0) { + return 'missingKeys'; + } + if (Object.keys(state.invalidEcsFields).length > 0) { + return 'invalidEcsFields'; + } + if (!state.finalized) { + return 'modelOutput'; + } + return END; +} + +export async function getEcsGraph(model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel) { + const workflow = new StateGraph({ + channels: graphState, + }) + .addNode('modelInput', modelInput) + .addNode('modelOutput', modelOutput) + .addNode('handleEcsMapping', (state: EcsMappingState) => handleEcsMapping(state, model)) + .addNode('handleValidation', handleValidateMappings) + .addNode('handleDuplicates', (state: EcsMappingState) => handleDuplicates(state, model)) + .addNode('handleMissingKeys', (state: EcsMappingState) => handleMissingKeys(state, model)) + .addNode('handleInvalidEcs', (state: EcsMappingState) => handleInvalidEcs(state, model)) + .addEdge(START, 'modelInput') + .addEdge('modelOutput', END) + .addEdge('handleEcsMapping', 'handleValidation') + .addEdge('handleDuplicates', 'handleValidation') + .addEdge('handleMissingKeys', 'handleValidation') + .addEdge('handleInvalidEcs', 'handleValidation') + .addConditionalEdges('modelInput', inputRouter, { + ecsMapping: 'handleEcsMapping', + modelOutput: 'modelOutput', + }) + .addConditionalEdges('handleValidation', chainRouter, { + duplicateFields: 'handleDuplicates', + missingKeys: 'handleMissingKeys', + invalidEcsFields: 'handleInvalidEcs', + modelOutput: 'modelOutput', + }); + + const compiledEcsGraph = workflow.compile(); + + return compiledEcsGraph; +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/constants/index.tsx b/x-pack/plugins/integration_assistant/server/graphs/ecs/index.ts similarity index 86% rename from x-pack/plugins/fleet/public/applications/fleet/sections/settings/constants/index.tsx rename to x-pack/plugins/integration_assistant/server/graphs/ecs/index.ts index 8d29433e7232b..91ea9fed3b3d3 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/constants/index.tsx +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/index.ts @@ -4,5 +4,4 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -export const FLYOUT_MAX_WIDTH = 670; +export { getEcsGraph } from './graph'; diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.test.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.test.ts new file mode 100644 index 0000000000000..ce1f76ce7a721 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleInvalidEcs } from './invalid'; +import type { EcsMappingState } from '../../types'; +import { ecsTestState } from '../../../__jest__/fixtures/ecs_mapping'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: '{ "message": "ll callback later."}', +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: EcsMappingState = ecsTestState; + +describe('Testing ecs handlers', () => { + it('handleInvalidEcs()', async () => { + const response = await handleInvalidEcs(testState, mockLlm); + expect(response.currentMapping).toStrictEqual({ message: 'll callback later.' }); + expect(response.lastExecutedChain).toBe('invalidEcs'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.ts new file mode 100644 index 0000000000000..dcbba0ebe9d13 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/invalid.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { EcsMappingState } from '../../types'; +import { ECS_INVALID_PROMPT } from './prompts'; + +export async function handleInvalidEcs( + state: EcsMappingState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const ecsInvalidEcsPrompt = ECS_INVALID_PROMPT; + const outputParser = new JsonOutputParser(); + const ecsInvalidEcsGraph = ecsInvalidEcsPrompt.pipe(model).pipe(outputParser); + + const currentMapping = await ecsInvalidEcsGraph.invoke({ + ecs: state.ecs, + current_mapping: JSON.stringify(state.currentMapping, null, 2), + ex_answer: state.exAnswer, + formatted_samples: state.formattedSamples, + invalid_ecs_fields: state.invalidEcsFields, + }); + + return { currentMapping, lastExecutedChain: 'invalidEcs' }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.test.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.test.ts new file mode 100644 index 0000000000000..dbbfc0608d010 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleEcsMapping } from './mapping'; +import type { EcsMappingState } from '../../types'; +import { ecsTestState } from '../../../__jest__/fixtures/ecs_mapping'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: '{ "message": "ll callback later."}', +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: EcsMappingState = ecsTestState; + +describe('Testing ecs handler', () => { + it('handleEcsMapping()', async () => { + const response = await handleEcsMapping(testState, mockLlm); + expect(response.currentMapping).toStrictEqual({ message: 'll callback later.' }); + expect(response.lastExecutedChain).toBe('ecsMapping'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.ts new file mode 100644 index 0000000000000..7ecb108659f45 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/mapping.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { EcsMappingState } from '../../types'; +import { ECS_MAIN_PROMPT } from './prompts'; + +export async function handleEcsMapping( + state: EcsMappingState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const ecsMainPrompt = ECS_MAIN_PROMPT; + const outputParser = new JsonOutputParser(); + const ecsMainGraph = ecsMainPrompt.pipe(model).pipe(outputParser); + + const currentMapping = await ecsMainGraph.invoke({ + ecs: state.ecs, + formatted_samples: state.formattedSamples, + package_name: state.packageName, + data_stream_name: state.dataStreamName, + ex_answer: state.exAnswer, + }); + + return { currentMapping, lastExecutedChain: 'ecsMapping' }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.test.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.test.ts new file mode 100644 index 0000000000000..b369d28b1e177 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleMissingKeys } from './missing'; +import type { EcsMappingState } from '../../types'; +import { ecsTestState } from '../../../__jest__/fixtures/ecs_mapping'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: '{ "message": "ll callback later."}', +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: EcsMappingState = ecsTestState; + +describe('Testing ecs handler', () => { + it('handleMissingKeys()', async () => { + const response = await handleMissingKeys(testState, mockLlm); + expect(response.currentMapping).toStrictEqual({ message: 'll callback later.' }); + expect(response.lastExecutedChain).toBe('missingKeys'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.ts new file mode 100644 index 0000000000000..d7f1f65b2b4ea --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/missing.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { EcsMappingState } from '../../types'; +import { ECS_MISSING_KEYS_PROMPT } from './prompts'; + +export async function handleMissingKeys( + state: EcsMappingState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const ecsMissingPrompt = ECS_MISSING_KEYS_PROMPT; + const outputParser = new JsonOutputParser(); + const ecsMissingGraph = ecsMissingPrompt.pipe(model).pipe(outputParser); + + const currentMapping = await ecsMissingGraph.invoke({ + ecs: state.ecs, + current_mapping: JSON.stringify(state.currentMapping, null, 2), + ex_answer: state.exAnswer, + formatted_samples: state.formattedSamples, + missing_keys: state?.missingKeys, + }); + + return { currentMapping, lastExecutedChain: 'missingKeys' }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/pipeline.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/pipeline.ts new file mode 100644 index 0000000000000..c4ad10f47a9f2 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/pipeline.ts @@ -0,0 +1,177 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { load } from 'js-yaml'; +import { Environment, FileSystemLoader } from 'nunjucks'; +import { join as joinPath } from 'path'; +import type { EcsMappingState } from '../../types'; +import { ECS_TYPES } from './constants'; + +interface IngestPipeline { + [key: string]: unknown; +} + +interface ECSField { + target: string; + confidence: number; + date_formats: string[]; + type: string; +} + +function generateProcessor( + currentPath: string, + ecsField: ECSField, + expectedEcsType: string, + sampleValue: unknown +): object { + if (needsTypeConversion(sampleValue, expectedEcsType)) { + return { + convert: { + field: currentPath, + target_field: ecsField.target, + type: getConvertProcessorType(expectedEcsType), + ignore_missing: true, + }, + }; + } + + if (ecsField.type === 'date') { + return { + date: { + field: currentPath, + target_field: ecsField.target, + formats: ecsField.date_formats, + if: currentPath.replace(/\./g, '?.'), + }, + }; + } + + return { + rename: { + field: currentPath, + target_field: ecsField.target, + ignore_missing: true, + }, + }; +} + +function getSampleValue(key: string, samples: Record): unknown { + const keyList = key.split('.'); + let value: any = samples; + for (const k of keyList) { + if (value === undefined || value === null) { + return null; + } + value = value[k]; + } + return value; +} + +function getEcsType(ecsField: ECSField, ecsTypes: Record): string { + const ecsTarget = ecsField.target; + return ecsTypes[ecsTarget]; +} + +function getConvertProcessorType(expectedEcsType: string): string { + if (expectedEcsType === 'long') { + return 'long'; + } + if (['scaled_float', 'float'].includes(expectedEcsType)) { + return 'float'; + } + if (expectedEcsType === 'ip') { + return 'ip'; + } + if (expectedEcsType === 'boolean') { + return 'boolean'; + } + return 'string'; +} + +function needsTypeConversion(sample: unknown, expected: string): boolean { + if (sample === null || sample === undefined) { + return false; + } + + if (expected === 'ip') { + return true; + } + + if (expected === 'boolean' && typeof sample !== 'boolean') { + return true; + } + + if (['long', 'float', 'scaled_float'].includes(expected) && typeof sample !== 'number') { + return true; + } + + if ( + ['keyword', 'wildcard', 'match_only_text', 'constant_keyword'].includes(expected) && + !(typeof sample === 'string' || Array.isArray(sample)) + ) { + return true; + } + + // If types are anything but the above, we return false. Example types: + // "nested", "flattened", "object", "geopoint", "date" + return false; +} + +function generateProcessors(ecsMapping: object, samples: object, basePath: string = ''): object[] { + const ecsTypes = ECS_TYPES; + const valueFieldKeys = new Set(['target', 'confidence', 'date_formats', 'type']); + const results: object[] = []; + + for (const [key, value] of Object.entries(ecsMapping)) { + const currentPath = basePath ? `${basePath}.${key}` : key; + + if (value !== null && typeof value === 'object' && value?.target !== null) { + const valueKeys = new Set(Object.keys(value)); + if ([...valueFieldKeys].every((k) => valueKeys.has(k))) { + const processor = generateProcessor( + currentPath, + value as ECSField, + getEcsType(value as ECSField, ecsTypes), + getSampleValue(currentPath, samples) + ); + results.push(processor); + } else { + results.push(...generateProcessors(value, samples, currentPath)); + } + } + } + return results; +} + +export function createPipeline(state: EcsMappingState): IngestPipeline { + const samples = JSON.parse(state.formattedSamples); + + const processors = generateProcessors(state.currentMapping, samples); + // Retrieve all source field names from convert processors to populate single remove processor: + const fieldsToRemove = processors + .map((p: any) => p.convert?.field) + .filter((f: unknown) => f != null); + const mappedValues = { + processors, + ecs_version: state.ecsVersion, + package_name: state.packageName, + data_stream_name: state.dataStreamName, + log_format: state.logFormat, + fields_to_remove: fieldsToRemove, + }; + const templatesPath = joinPath(__dirname, '../../templates'); + const env = new Environment(new FileSystemLoader(templatesPath), { + autoescape: false, + }); + env.addFilter('startswith', function (str, prefix) { + return str.startsWith(prefix); + }); + const template = env.getTemplate('pipeline.yml.njk'); + const renderedTemplate = template.render(mappedValues); + const ingestPipeline = load(renderedTemplate) as IngestPipeline; + return ingestPipeline; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/prompts.ts new file mode 100644 index 0000000000000..56b985d2e0b7c --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/prompts.ts @@ -0,0 +1,182 @@ +/* + * Copyright 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 { ChatPromptTemplate } from '@langchain/core/prompts'; +export const ECS_MAIN_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant in Elastic Common Schema (ECS), focusing only on helping users with translating their provided combined samples to Elastic Common Schema (ECS). + +Here is some context for you to reference for your task, read it carefully as you will get questions about it later: + + +{ecs} + + +{formatted_samples} + +`, + ], + [ + 'human', + `Looking at the combined sample from {package_name} {data_stream_name} provided above. The combined sample is a JSON object that includes all unique fields from the log samples sent by {package_name} {data_stream_name}. + +Go through each value step by step and modify it with the following process: +1. Check if the name of each key and its current value matches the description and usecase of any of the above ECS fields. +2. If one or more relevant ECS field is found, pick the one you are most confident about. +3. If no relevant ECS field is found, the value should just be replaced with "null" rather than a new object. +4. Only if a relevant ECS field is found replace the value with a new object that has the keys "target", "confidence", "date_format" and "type". +5. The object key "target" should be set to be the full path of the ECS field name you think it matches. Set the object key "type" to be either "string", "boolean", "number" or "date" depending on what was detected as the example value. +6. If the type "date" is used, then set date_format to be an array of one or more of the equivilant JAVA date formats that fits the example value. If the type is not date then date_format should be set to an empty array []. +7. For each key that you set a target ECS field, also score the confidence you have in that the target field is correct, use a float between 0.0 and 1.0 and set the value in the nested "confidence" key. +8. When you want to use an ECS field as a value for a target, but another field already has the same ECS field as its target, try to find another fitting ECS field. If none is found then the one you are least confident about should have the object replaced with null. +9. If you are not confident for a specific field, you should always set the value to null. +10. These {package_name} log samples are based on source and destination type data, prioritize these compared to other related ECS fields like host.* and observer.*. + +You ALWAYS follow these guidelines when writing your response: + +- Never use \`event.category\` or \`event.type\` as target ECS fields. +- The target key should never have a null value, if no matching target ECS field is found, the whole key value should be set to null. +- Never use the same ECS target multiple times. If no other field is found that you are confident in, it should always be null. +- All keys should be under the {package_name} {data_stream_name} parent fields, same as the original combined sample above. +- All target key values should be ECS field names only from the above ECS fields provided as context. +- All original keys from the combined sample object needs to be in your response. +- Only when a target value is set should type, date_format and confidence be filled out. If no target value then the value should simply be null. +- Do not respond with anything except the ecs maping JSON object enclosed with 3 backticks (\`), see example response below. + + +Example response format: + +A: Please find the JSON object below: +\`\`\`json +{ex_answer} +\`\`\` +"`, + ], + ['ai', 'Please find the JSON object below:'], +]); + +export const ECS_INVALID_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant in Elastic Common Schema (ECS), you help review and try to resolve incorrect field mappings. + +Here is some context for you to reference your task, read it carefully as you will get questions about it later: + + +{ecs} + + +{formatted_samples} + + +{current_mapping} + +`, + ], + [ + 'human', + `The following fields are mapped incorrectly in the current mapping, please help me resolve this: + +{invalid_ecs_fields} + +To resolve the invalid ecs fields, go through each key and value defined in the invalid fields, and modify the current mapping step by step, and ensure they follow these guidelines: + +- Update the provided current mapping object, the value should be the corresponding Elastic Common Schema field name. If no good or valid match is found the value should always be null. +- Do not respond with anything except the updated current mapping JSON object enclosed with 3 backticks (\`). See example response below. + + +Example response format: + +A: Please find the JSON object below: +\`\`\`json +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the JSON object below:'], +]); + +export const ECS_MISSING_KEYS_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant in Elastic Common Schema (ECS), you help review and try to resolve missing fields in the current mapping. + +Here is some context for you to reference for your task, read it carefully as you will get questions about it later: + + +{ecs} + + +{formatted_samples} + + +{current_mapping} + +`, + ], + [ + 'human', + `The following keys are missing from the current mapping: + +{missing_keys} + + +Help resolve the issue by adding the missing keys, look up example values from the formatted samples, and go through each missing key step by step, resolve it by following these guidelines: + +- Update the provided current mapping object with all the missing keys, the value should be the corresponding Elastic Common Schema field name. If no good match is found the value should always be null. +- Do not respond with anything except the updated current mapping JSON object enclosed with 3 backticks (\`). See example response below. + + +Example response format: + +A: Please find the JSON object below: +\`\`\`json +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the JSON object below:'], +]); + +export const ECS_DUPLICATES_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant in Elastic Common Schema (ECS), you help review and try to resolve incorrect duplicate fields in the current mapping. + +Here is some context for you to reference for your task, read it carefully as you will get questions about it later: + + +{ecs} + + +{current_mapping} + +`, + ], + [ + 'human', + `The following duplicate fields are mapped to the same ECS fields in the current mapping, please help me resolve this: + +{duplicate_fields} + + +To resolve the duplicate mappings, go through each key and value defined in the duplicate fields, and modify the current mapping step by step, and ensure they follow these guidelines: + +- Multiple keys should not have the same value (ECS field it will be mapped to). If multiple keys do have the same value then always choose the best match for the ECS field, while the other duplicates should have their value changed to null. +- Do not respond with anything except the updated current mapping JSON object enclosed with 3 backticks (\`). See example response below. + + +Example response format: + +A: Please find the JSON object below: +\`\`\`json +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the JSON object below:'], +]); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts new file mode 100644 index 0000000000000..0a01b1f59dcf3 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts @@ -0,0 +1,156 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { ECS_FULL } from '../../../common/ecs'; +import type { EcsMappingState } from '../../types'; + +const valueFieldKeys = new Set(['target', 'confidence', 'date_formats', 'type']); +type AnyObject = Record; + +function extractKeys(data: AnyObject, prefix: string = ''): Set { + const keys = new Set(); + + for (const [key, value] of Object.entries(data)) { + const fullKey = prefix ? `${prefix}.${key}` : key; + + if (Array.isArray(value)) { + // Directly add the key for arrays without iterating over elements + keys.add(fullKey); + } else if (typeof value === 'object' && value !== null) { + const valueKeys = new Set(Object.keys(value)); + + if ([...valueFieldKeys].every((k) => valueKeys.has(k))) { + keys.add(fullKey); + } else { + // Recursively extract keys if the current value is a nested object + for (const nestedKey of extractKeys(value, fullKey)) { + keys.add(nestedKey); + } + } + } else { + // Add the key if the value is not an object or is null + keys.add(fullKey); + } + } + + return keys; +} + +function findMissingFields(formattedSamples: string, ecsMapping: AnyObject): string[] { + const combinedSamples = JSON.parse(formattedSamples); + const uniqueKeysFromSamples = extractKeys(combinedSamples); + const ecsResponseKeys = extractKeys(ecsMapping); + + const missingKeys = [...uniqueKeysFromSamples].filter((key) => !ecsResponseKeys.has(key)); + return missingKeys; +} + +function processMapping(path: string[], value: any, output: Record): void { + if (typeof value === 'object' && value !== null) { + if (!Array.isArray(value)) { + // If the value is a dict with all the keys returned for each source field, this is the full path of the field. + const valueKeys = new Set(Object.keys(value)); + + if ([...valueFieldKeys].every((k) => valueKeys.has(k))) { + if (value?.target !== null) { + if (!output[value?.target]) { + output[value.target] = []; + } + output[value.target].push(path); + } + } else { + // Regular dictionary, continue traversing + for (const [k, v] of Object.entries(value)) { + processMapping([...path, k], v, output); + } + } + } else { + // If the value is an array, iterate through items and process them + for (const item of value) { + if (typeof item === 'object' && item !== null) { + processMapping(path, item, output); + } + } + } + } else if (value !== null) { + // Direct value, accumulate path + if (!output[value]) { + output[value] = []; + } + output[value].push(path); + } +} + +function getValueFromPath(obj: AnyObject, path: string[]): unknown { + return path.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : null), obj); +} + +function findDuplicateFields(samples: string[], ecsMapping: AnyObject): string[] { + const parsedSamples = samples.map((sample) => JSON.parse(sample)); + const results: string[] = []; + const output: Record = {}; + + // Get all keys for each target ECS mapping field + processMapping([], ecsMapping, output); + + // Filter out any ECS field that does not have multiple source fields mapped to it + const filteredOutput = Object.fromEntries( + Object.entries(output).filter(([_, paths]) => paths.length > 1 && _ !== null) + ); + + // For each ECS field where value is the ECS field and paths is the array of source field names + for (const [value, paths] of Object.entries(filteredOutput)) { + // For each log sample, checking if more than 1 source field exists in the same sample + for (const sample of parsedSamples) { + const foundPaths = paths.filter((path) => getValueFromPath(sample, path) !== null); + if (foundPaths.length > 1) { + const matchingFields = foundPaths.map((p) => p.join('.')); + results.push( + `One or more samples have matching fields for ECS field '${value}': ${matchingFields.join( + ', ' + )}` + ); + break; + } + } + } + + return results; +} + +// Function to find invalid ECS fields +function findInvalidEcsFields(ecsMapping: AnyObject): string[] { + const results: string[] = []; + const output: Record = {}; + const ecsDict = ECS_FULL; + + processMapping([], ecsMapping, output); + const filteredOutput = Object.fromEntries( + Object.entries(output).filter(([key, _]) => key !== null) + ); + + for (const [ecsValue, paths] of Object.entries(filteredOutput)) { + if (!Object.prototype.hasOwnProperty.call(ecsDict, ecsValue)) { + const field = paths.map((p) => p.join('.')); + results.push(`Invalid ECS field mapping identified for ${ecsValue} : ${field.join(', ')}`); + } + } + + return results; +} + +export function handleValidateMappings(state: EcsMappingState): AnyObject { + const missingKeys = findMissingFields(state?.formattedSamples, state?.currentMapping); + const duplicateFields = findDuplicateFields(state?.samples, state?.currentMapping); + const invalidEcsFields = findInvalidEcsFields(state?.currentMapping); + return { + missingKeys, + duplicateFields, + invalidEcsFields, + lastExecutedChain: 'validateMappings', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/constants.ts b/x-pack/plugins/integration_assistant/server/graphs/related/constants.ts new file mode 100644 index 0000000000000..61cc877667659 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/constants.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export const RELATED_ECS_FIELDS = { + 'related.hash': { + type: 'keyword', + description: 'All the hashes seen in the docs', + note: 'this field should contain an array of values', + }, + 'related.hosts': { + type: 'keyword', + description: 'All hostnames or other host identifiers seen in the docs', + note: 'this field should contain an array of values', + }, + 'related.ip': { + type: 'keyword', + description: 'All of the IPs seen in the docs', + note: 'this field should contain an array of values', + }, + 'related.user': { + type: 'keyword', + description: 'All the user names or other user identifiers seen in the docs', + note: 'this field should contain an array of values', + }, +}; + +export const RELATED_EXAMPLE_ANSWER = [ + { + append: { + field: 'related.ip', + value: ['{{{source.ip}}}'], + allow_duplicates: 'false', + }, + }, + { + append: { + field: 'related.user', + value: ['{{{server.user.name}}}'], + allow_duplicates: 'false', + }, + }, + { + append: { + field: 'related.hosts', + value: ['{{{client.domain}}}'], + allow_duplicates: 'false', + }, + }, + { + append: { + field: 'related.hash', + value: ['{{{file.hash.sha1}}}'], + allow_duplicates: 'false', + }, + }, +]; diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/errors.test.ts b/x-pack/plugins/integration_assistant/server/graphs/related/errors.test.ts new file mode 100644 index 0000000000000..24dc4365dcbff --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/errors.test.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleErrors } from './errors'; +import type { RelatedState } from '../../types'; +import { + relatedTestState, + relatedMockProcessors, + relatedExpectedHandlerResponse, +} from '../../../__jest__/fixtures/related'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: JSON.stringify(relatedMockProcessors, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: RelatedState = relatedTestState; + +describe('Testing related handler', () => { + it('handleErrors()', async () => { + const response = await handleErrors(testState, mockLlm); + expect(response.currentPipeline).toStrictEqual(relatedExpectedHandlerResponse.currentPipeline); + expect(response.lastExecutedChain).toBe('error'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/errors.ts b/x-pack/plugins/integration_assistant/server/graphs/related/errors.ts new file mode 100644 index 0000000000000..025422008c4dc --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/errors.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { ESProcessorItem, Pipeline } from '../../../common'; +import type { RelatedState } from '../../types'; +import { combineProcessors } from '../../util/processors'; +import { RELATED_ERROR_PROMPT } from './prompts'; + +export async function handleErrors( + state: RelatedState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const relatedErrorPrompt = RELATED_ERROR_PROMPT; + const outputParser = new JsonOutputParser(); + const relatedErrorGraph = relatedErrorPrompt.pipe(model).pipe(outputParser); + + const currentProcessors = (await relatedErrorGraph.invoke({ + current_processors: JSON.stringify(state.currentProcessors, null, 2), + ex_answer: state.exAnswer, + errors: JSON.stringify(state.errors, null, 2), + package_name: state.packageName, + data_stream_name: state.dataStreamName, + })) as ESProcessorItem[]; + + const currentPipeline = combineProcessors(state.initialPipeline as Pipeline, currentProcessors); + return { + currentPipeline, + currentProcessors, + reviewed: false, + lastExecutedChain: 'error', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/graph.test.ts b/x-pack/plugins/integration_assistant/server/graphs/related/graph.test.ts new file mode 100644 index 0000000000000..40989e9733800 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/graph.test.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IScopedClusterClient } from '@kbn/core/server'; +import { FakeLLM } from '@langchain/core/utils/testing'; +import { getRelatedGraph } from './graph'; +import { + relatedExpectedResults, + relatedErrorMockedResponse, + relatedInitialMockedResponse, + relatedReviewMockedResponse, + relatedInitialPipeline, + testPipelineError, + testPipelineValidResult, +} from '../../../__jest__/fixtures/related'; +import { mockedRequestWithPipeline } from '../../../__jest__/fixtures'; +import { handleReview } from './review'; +import { handleRelated } from './related'; +import { handleErrors } from './errors'; +import { testPipeline, combineProcessors } from '../../util'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: "I'll callback later.", +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +jest.mock('./errors'); +jest.mock('./review'); +jest.mock('./related'); + +jest.mock('../../util/pipeline', () => ({ + testPipeline: jest.fn(), +})); + +describe('runRelatedGraph', () => { + const mockClient = { + asCurrentUser: { + indices: { + getMapping: jest.fn(), + }, + }, + } as unknown as IScopedClusterClient; + beforeEach(() => { + // Mocked responses for each node that requires an LLM API call/response. + const mockInvokeRelated = jest.fn().mockResolvedValue(relatedInitialMockedResponse); + const mockInvokeError = jest.fn().mockResolvedValue(relatedErrorMockedResponse); + const mockInvokeReview = jest.fn().mockResolvedValue(relatedReviewMockedResponse); + + // After this is triggered, the mock of TestPipeline will trigger the expected error, to route to error handler + (handleRelated as jest.Mock).mockImplementation(async () => ({ + currentPipeline: relatedInitialPipeline, + currentProcessors: await mockInvokeRelated(), + reviewed: false, + finalized: false, + lastExecutedChain: 'related', + })); + // Error pipeline returns the correct response to trigger a review. + (handleErrors as jest.Mock).mockImplementation(async () => ({ + currentPipeline: relatedInitialPipeline, + currentProcessors: await mockInvokeError(), + reviewed: false, + finalized: false, + lastExecutedChain: 'error', + })); + // After the review it should route to modelOutput and finish. + (handleReview as jest.Mock).mockImplementation(async () => { + const currentProcessors = await mockInvokeReview(); + const currentPipeline = combineProcessors(relatedInitialPipeline, currentProcessors); + return { + currentProcessors, + currentPipeline, + reviewed: true, + finalized: false, + lastExecutedChain: 'review', + }; + }); + }); + + it('Ensures that the graph compiles', async () => { + try { + await getRelatedGraph(mockClient, mockLlm); + } catch (error) { + // noop + } + }); + + it('Runs the whole graph, with mocked outputs from the LLM.', async () => { + const relatedGraph = await getRelatedGraph(mockClient, mockLlm); + + (testPipeline as jest.Mock) + .mockResolvedValueOnce(testPipelineValidResult) + .mockResolvedValueOnce(testPipelineError) + .mockResolvedValueOnce(testPipelineValidResult) + .mockResolvedValueOnce(testPipelineValidResult) + .mockResolvedValueOnce(testPipelineValidResult); + + let response; + try { + response = await relatedGraph.invoke(mockedRequestWithPipeline); + } catch (e) { + // noop + } + + expect(response.results).toStrictEqual(relatedExpectedResults); + + // Check if the functions were called + expect(handleRelated).toHaveBeenCalled(); + expect(handleErrors).toHaveBeenCalled(); + expect(handleReview).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/related/graph.ts new file mode 100644 index 0000000000000..9b50c05889402 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/graph.ts @@ -0,0 +1,171 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import type { StateGraphArgs } from '@langchain/langgraph'; +import { StateGraph, END, START } from '@langchain/langgraph'; +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import type { RelatedState } from '../../types'; +import { modifySamples, formatSamples } from '../../util/samples'; +import { handleValidatePipeline } from '../../util/graph'; +import { handleRelated } from './related'; +import { handleErrors } from './errors'; +import { handleReview } from './review'; +import { RELATED_ECS_FIELDS, RELATED_EXAMPLE_ANSWER } from './constants'; + +const graphState: StateGraphArgs['channels'] = { + lastExecutedChain: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + rawSamples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + samples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + formattedSamples: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + ecs: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + exAnswer: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + packageName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + dataStreamName: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + finalized: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + reviewed: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + errors: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + pipelineResults: { + value: (x: object[], y?: object[]) => y ?? x, + default: () => [], + }, + currentPipeline: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + currentProcessors: { + value: (x: object[], y?: object[]) => y ?? x, + default: () => [], + }, + initialPipeline: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, + results: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, +}; + +function modelInput(state: RelatedState): Partial { + const samples = modifySamples(state); + const formattedSamples = formatSamples(samples); + const initialPipeline = JSON.parse(JSON.stringify(state.currentPipeline)); + return { + exAnswer: JSON.stringify(RELATED_EXAMPLE_ANSWER, null, 2), + ecs: JSON.stringify(RELATED_ECS_FIELDS, null, 2), + samples, + formattedSamples, + initialPipeline, + finalized: false, + reviewed: false, + lastExecutedChain: 'modelInput', + }; +} + +function modelOutput(state: RelatedState): Partial { + return { + finalized: true, + lastExecutedChain: 'modelOutput', + results: { + docs: state.pipelineResults, + pipeline: state.currentPipeline, + }, + }; +} + +function inputRouter(state: RelatedState): string { + if (Object.keys(state.pipelineResults).length === 0) { + return 'validatePipeline'; + } + return 'related'; +} + +function chainRouter(state: RelatedState): string { + if (Object.keys(state.currentProcessors).length === 0) { + return 'related'; + } + if (Object.keys(state.errors).length > 0) { + return 'errors'; + } + if (!state.reviewed) { + return 'review'; + } + if (!state.finalized) { + return 'modelOutput'; + } + return END; +} + +export async function getRelatedGraph( + client: IScopedClusterClient, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const workflow = new StateGraph({ channels: graphState }) + .addNode('modelInput', modelInput) + .addNode('modelOutput', modelOutput) + .addNode('handleRelated', (state: RelatedState) => handleRelated(state, model)) + .addNode('handleValidatePipeline', (state: RelatedState) => + handleValidatePipeline(state, client) + ) + .addNode('handleErrors', (state: RelatedState) => handleErrors(state, model)) + .addNode('handleReview', (state: RelatedState) => handleReview(state, model)) + .addEdge(START, 'modelInput') + .addEdge('modelOutput', END) + .addEdge('handleRelated', 'handleValidatePipeline') + .addEdge('handleErrors', 'handleValidatePipeline') + .addEdge('handleReview', 'handleValidatePipeline') + .addConditionalEdges('modelInput', inputRouter, { + related: 'handleRelated', + validatePipeline: 'handleValidatePipeline', + }) + .addConditionalEdges('handleValidatePipeline', chainRouter, { + related: 'handleRelated', + errors: 'handleErrors', + review: 'handleReview', + modelOutput: 'modelOutput', + }); + + const compiledRelatedGraph = workflow.compile(); + return compiledRelatedGraph; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/index.ts b/x-pack/plugins/integration_assistant/server/graphs/related/index.ts new file mode 100644 index 0000000000000..4294a4dd34ccd --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export { getRelatedGraph } from './graph'; diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/related/prompts.ts new file mode 100644 index 0000000000000..2a14b52907103 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/prompts.ts @@ -0,0 +1,142 @@ +/* + * Copyright 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 { ChatPromptTemplate } from '@langchain/core/prompts'; + +export const RELATED_MAIN_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant on Elasticsearch Ingest Pipelines, focusing on providing append processors that can be used to enrich samples with all relevant related.ip, related.hash, related.user and related.host fields. + Here are some context for you to reference for your task, read it carefully as you will get questions about it later: + + + {ecs} + + `, + ], + [ + 'human', + `Please help me by providing all relevant append processors for any detected related.ip, related.hash, related.user and related.host fields that would fit the below pipeline results as an array of JSON objects. + + + {pipeline_results} + + + Go through each of the pipeline results above step by step and do the following to add all relevant related.ip, related.hash, related.user and related.host fields. + 1. Try to understand what is unique about each pipeline result, and what sort of related.ip, related.hash, related.user and related.host fields that fit best, and if there is any unique values for each result. + 2. For each of related.ip, related.hash, related.user and related.host fields that you find, add a new append processor to your array of JSON objects. + 3. If only certain results are relevant to the related.ip, related.hash, related.user and related.host fields, add an if condition similar to the above example processors, that describes what value or field needs to be available for this categorization to take place. The if condition should be inside the processor object. + 4. Always check if the related.ip, related.hash, related.user and related.host fields are common in the ecs context above. + 5. The value argument for the append processor shall consist of one field. + + You ALWAYS follow these guidelines when writing your response: + + - You can add as many append processors you need to cover all the fields that you detected. + - If conditions should always use a ? character when accessing nested fields, in case the field might not always be available, see example processors above. + - When an if condition is not needed the argument should not be used for the processor object. + - Do not respond with anything except the array of processors as a valid JSON objects enclosed with 3 backticks (\`), see example response below. + + + Example response format: + + A: Please find the Related processors below: + \`\`\`json + {ex_answer} + \`\`\` + `, + ], + ['ai', 'Please find the Related processors below:'], +]); + +export const RELATED_ERROR_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant on Elasticsearch Ingest Pipelines, focusing on resolving errors and issues with append processors used for related field categorization. + Here is some context that you can reference for your task, read it carefully as you will get questions about it later: + + + {current_processors} + + + {errors} + + `, + ], + [ + 'human', + `Please go through each error above, carefully review the provided current processors, and resolve the most likely cause to the supplied error by returning an updated version of the current_processors. + + Follow these steps to help resolve the current ingest pipeline issues: + 1. Try to fix all related errors before responding. + 2. Apply all fixes to the provided array of current append processors. + 3. If you do not know how to fix an error, then continue to the next and return the complete updated array of current append processors. + + You ALWAYS follow these guidelines when writing your response: + + - When checking for the existance of multiple values in a single variable, use this format: "if": "['value1', 'value2'].contains(ctx.{package_name}?.{data_stream_name}?.field)" + - If conditions should never be in a format like "if": "true". If it exist in the current array of append processors, remove only the redundant if condition. + - If the error complains that it is a null point exception, always ensure the if conditions uses a ? when accessing nested fields. For example ctx.field1?.nestedfield1?.nestedfield2. + - Never use "split" in template values, only use the field name inside the triple brackets. If the error mentions "Improperly closed variable in query-template" then check each "value" field for any special characters and remove them. + - Do not respond with anything except the complete updated array of processors as a valid JSON object enclosed with 3 backticks (\`), see example response below. + + + Example response format: + + A: Please find the updated ECS related append processors below: + \`\`\`json + {ex_answer} + \`\`\` + `, + ], + ['ai', 'Please find the updated ECS related append processors below:'], +]); + +export const RELATED_REVIEW_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant on Elasticsearch Ingest Pipelines, focusing on adding improvements to the provided array of processors and reviewing the current results. + + Here is some context that you can reference for your task, read it carefully as you will get questions about it later: + + + {current_processors} + + `, + ], + [ + 'human', + `Testing my current pipeline returned me with the below pipeline results: + + {pipeline_results} + + + Please review the pipeline results and the array of current processors, ensuring to identify all the related.ip , related.user , related.hash and related.host fields that would match each pipeline result document. If any related.ip , related.user , related.hash or related.host fields is missing from any of the pipeline results, add them by updating the array of current processors and return the whole updated array of processors. + + For each pipeline result you review step by step, remember the below steps: + 1. Check each of the pipeline results to see if the field/value matches related.ip , related.user , related.hash or related.host. If not then try to correlate the results with the current processors and see if either a new append processor should be added to the list with a matching if condition, or if any of the if conditions should be modified as they are not matching that is in the results. + 2. If the results have related.ip , related.user , related.hash or related.host value, see if more of them could match, if so it could be added to the relevant append processor which added the initial values. + 3. Ensure that all append processors has allow_duplicates: false, as seen in the example response. + + You ALWAYS follow these guidelines when writing your response: + + - You can use as many append processors as you need to add all relevant ECS categories and types combinations. + - If conditions should always use a ? character when accessing nested fields, in case the field might not always be available, see example processors above. + - When an if condition is not needed the argument should not be used for the processor object. + - If not updates are needed you respond with the initially provided current processors. + - Each append processor needs to have the allow_duplicates: false argument, as shown in the below example response. + - Do not respond with anything except updated array of processors as a valid JSON object enclosed with 3 backticks (\`), see example response below. + + + Example response format: + + A: Please find the updated ECS related append processors below: + \`\`\` + {ex_answer} + \`\`\` + `, + ], + ['ai', 'Please find the updated ECS related append processors below:'], +]); diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/related.test.ts b/x-pack/plugins/integration_assistant/server/graphs/related/related.test.ts new file mode 100644 index 0000000000000..3a741020fb530 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/related.test.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleRelated } from './related'; +import type { RelatedState } from '../../types'; +import { + relatedTestState, + relatedMockProcessors, + relatedExpectedHandlerResponse, +} from '../../../__jest__/fixtures/related'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: JSON.stringify(relatedMockProcessors, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: RelatedState = relatedTestState; + +describe('Testing related handler', () => { + it('handleRelated()', async () => { + const response = await handleRelated(testState, mockLlm); + expect(response.currentPipeline).toStrictEqual(relatedExpectedHandlerResponse.currentPipeline); + expect(response.lastExecutedChain).toBe('related'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/related.ts b/x-pack/plugins/integration_assistant/server/graphs/related/related.ts new file mode 100644 index 0000000000000..2c98381510d9b --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/related.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { ESProcessorItem, Pipeline } from '../../../common'; +import type { RelatedState } from '../../types'; +import { combineProcessors } from '../../util/processors'; +import { RELATED_MAIN_PROMPT } from './prompts'; + +export async function handleRelated( + state: RelatedState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const relatedMainPrompt = RELATED_MAIN_PROMPT; + const outputParser = new JsonOutputParser(); + const relatedMainGraph = relatedMainPrompt.pipe(model).pipe(outputParser); + + const currentProcessors = (await relatedMainGraph.invoke({ + pipeline_results: JSON.stringify(state.pipelineResults, null, 2), + ex_answer: state.exAnswer, + ecs: state.ecs, + })) as ESProcessorItem[]; + + const currentPipeline = combineProcessors(state.initialPipeline as Pipeline, currentProcessors); + + return { + currentPipeline, + currentProcessors, + reviewed: false, + lastExecutedChain: 'related', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/review.test.ts b/x-pack/plugins/integration_assistant/server/graphs/related/review.test.ts new file mode 100644 index 0000000000000..475f0d72b988d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/review.test.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FakeLLM } from '@langchain/core/utils/testing'; +import { handleReview } from './review'; +import type { RelatedState } from '../../types'; +import { + relatedTestState, + relatedMockProcessors, + relatedExpectedHandlerResponse, +} from '../../../__jest__/fixtures/related'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLlm = new FakeLLM({ + response: JSON.stringify(relatedMockProcessors, null, 2), +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: RelatedState = relatedTestState; + +describe('Testing related handler', () => { + it('handleReview()', async () => { + const response = await handleReview(testState, mockLlm); + expect(response.currentPipeline).toStrictEqual(relatedExpectedHandlerResponse.currentPipeline); + expect(response.lastExecutedChain).toBe('review'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/related/review.ts b/x-pack/plugins/integration_assistant/server/graphs/related/review.ts new file mode 100644 index 0000000000000..6c07079e18f48 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/related/review.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { ESProcessorItem, Pipeline } from '../../../common'; +import type { RelatedState } from '../../types'; +import { combineProcessors } from '../../util/processors'; +import { RELATED_REVIEW_PROMPT } from './prompts'; + +export async function handleReview( + state: RelatedState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const relatedReviewPrompt = RELATED_REVIEW_PROMPT; + const outputParser = new JsonOutputParser(); + const relatedReviewGraph = relatedReviewPrompt.pipe(model).pipe(outputParser); + + const currentProcessors = (await relatedReviewGraph.invoke({ + current_processors: JSON.stringify(state.currentProcessors, null, 2), + ex_answer: state.exAnswer, + pipeline_results: JSON.stringify(state.pipelineResults, null, 2), + })) as ESProcessorItem[]; + + const currentPipeline = combineProcessors(state.initialPipeline as Pipeline, currentProcessors); + + return { + currentPipeline, + currentProcessors, + reviewed: true, + lastExecutedChain: 'review', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/index.ts b/x-pack/plugins/integration_assistant/server/index.ts new file mode 100644 index 0000000000000..d259ae80c53de --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PluginInitializerContext } from '@kbn/core/server'; + +export { config } from './config'; + +export async function plugin(initializerContext: PluginInitializerContext) { + const { IntegrationAssistantPlugin } = await import('./plugin'); + return new IntegrationAssistantPlugin(initializerContext); +} + +export type { IntegrationAssistantPluginSetup, IntegrationAssistantPluginStart } from './types'; diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/agent.ts b/x-pack/plugins/integration_assistant/server/integration_builder/agent.ts new file mode 100644 index 0000000000000..6d3282e00f18a --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/agent.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { join as joinPath } from 'path'; +import type { InputTypes } from '../../common'; +import { ensureDirSync, createSync, readSync } from '../util'; + +export function createAgentInput(specificDataStreamDir: string, inputTypes: InputTypes[]): void { + const agentDir = joinPath(specificDataStreamDir, 'agent', 'stream'); + const agentTemplatesDir = joinPath(__dirname, '../templates/agent'); + ensureDirSync(agentDir); + + // Load common options that exists for all .yml.hbs files, to be merged with each specific input file + const commonFilePath = joinPath(agentTemplatesDir, 'common.yml.hbs'); + const commonFile = readSync(commonFilePath); + + for (const inputType of inputTypes) { + const inputTypeFilePath = joinPath( + agentTemplatesDir, + `${inputType.replaceAll('-', '_')}.yml.hbs` + ); + const inputTypeFile = readSync(inputTypeFilePath); + + const combinedContents = `${inputTypeFile}\n${commonFile}`; + + const destinationFilePath = joinPath(agentDir, `${inputType}.yml.hbs`); + createSync(destinationFilePath, combinedContents); + } +} diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts new file mode 100644 index 0000000000000..d2e29f769dd9a --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/build_integration.ts @@ -0,0 +1,142 @@ +/* + * Copyright 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 AdmZip from 'adm-zip'; +import nunjucks from 'nunjucks'; +import { tmpdir } from 'os'; +import { join as joinPath } from 'path'; +import type { DataStream, Integration } from '../../common'; +import { copySync, createSync, ensureDirSync, generateUniqueId } from '../util'; +import { createAgentInput } from './agent'; +import { createDatastream } from './data_stream'; +import { createFieldMapping } from './fields'; +import { createPipeline } from './pipeline'; + +export async function buildPackage(integration: Integration): Promise { + const templateDir = joinPath(__dirname, '../templates'); + const agentTemplates = joinPath(templateDir, 'agent'); + const manifestTemplates = joinPath(templateDir, 'manifest'); + const systemTestTemplates = joinPath(templateDir, 'system_tests'); + nunjucks.configure([templateDir, agentTemplates, manifestTemplates, systemTestTemplates], { + autoescape: false, + }); + + const tmpDir = joinPath(tmpdir(), `integration-assistant-${generateUniqueId()}`); + const packageDir = createDirectories(tmpDir, integration); + const dataStreamsDir = joinPath(packageDir, 'data_stream'); + + for (const dataStream of integration.dataStreams) { + const dataStreamName = dataStream.name; + const specificDataStreamDir = joinPath(dataStreamsDir, dataStreamName); + + createDatastream(integration.name, specificDataStreamDir, dataStream); + createAgentInput(specificDataStreamDir, dataStream.inputTypes); + createPipeline(specificDataStreamDir, dataStream.pipeline); + createFieldMapping(integration.name, dataStreamName, specificDataStreamDir, dataStream.docs); + } + + const tmpPackageDir = joinPath(tmpDir, `${integration.name}-0.1.0`); + + const zipBuffer = await createZipArchive(tmpPackageDir); + return zipBuffer; +} + +function createDirectories(tmpDir: string, integration: Integration): string { + const packageDir = joinPath(tmpDir, `${integration.name}-0.1.0`); + ensureDirSync(tmpDir); + ensureDirSync(packageDir); + createPackage(packageDir, integration); + return packageDir; +} + +function createPackage(packageDir: string, integration: Integration): void { + createReadme(packageDir, integration); + createChangelog(packageDir); + createBuildFile(packageDir); + createPackageManifest(packageDir, integration); + // Skipping creation of system tests temporarily for custom package generation + // createPackageSystemTests(packageDir, integration); + createLogo(packageDir, integration); +} + +function createLogo(packageDir: string, integration: Integration): void { + const logoDir = joinPath(packageDir, 'img'); + ensureDirSync(logoDir); + + if (integration?.logo !== undefined) { + const buffer = Buffer.from(integration.logo, 'base64'); + createSync(joinPath(logoDir, 'logo.svg'), buffer); + } else { + const imgTemplateDir = joinPath(__dirname, '../templates/img'); + copySync(joinPath(imgTemplateDir, 'logo.svg'), joinPath(logoDir, 'logo.svg')); + } +} + +function createBuildFile(packageDir: string): void { + const buildFile = nunjucks.render('build.yml.njk', { ecs_version: '8.11.0' }); + const buildDir = joinPath(packageDir, '_dev/build'); + + ensureDirSync(buildDir); + createSync(joinPath(buildDir, 'build.yml'), buildFile); +} + +function createChangelog(packageDir: string): void { + const changelogTemplate = nunjucks.render('changelog.yml.njk', { + initial_version: '0.1.0', + }); + + createSync(joinPath(packageDir, 'changelog.yml'), changelogTemplate); +} + +function createReadme(packageDir: string, integration: Integration) { + const readmeDirPath = joinPath(packageDir, '_dev/build/docs/'); + ensureDirSync(readmeDirPath); + const readmeTemplate = nunjucks.render('readme.md.njk', { + package_name: integration.name, + data_streams: integration.dataStreams, + }); + + createSync(joinPath(readmeDirPath, 'README.md'), readmeTemplate); +} + +async function createZipArchive(tmpPackageDir: string): Promise { + const zip = new AdmZip(); + zip.addLocalFolder(tmpPackageDir); + const buffer = zip.toBuffer(); + return buffer; +} + +function createPackageManifest(packageDir: string, integration: Integration): void { + const uniqueInputs: { [key: string]: { type: string; title: string; description: string } } = {}; + + integration.dataStreams.forEach((dataStream: DataStream) => { + dataStream.inputTypes.forEach((inputType: string) => { + if (!uniqueInputs[inputType]) { + uniqueInputs[inputType] = { + type: inputType, + title: dataStream.title, + description: dataStream.description, + }; + } + }); + }); + + const uniqueInputsList = Object.values(uniqueInputs); + + const packageManifest = nunjucks.render('package_manifest.yml.njk', { + format_version: '3.1.4', + package_title: integration.title, + package_name: integration.name, + package_version: '0.1.0', + package_description: integration.description, + package_owner: '@elastic/custom-integrations', + min_version: '^8.13.0', + inputs: uniqueInputsList, + }); + + createSync(joinPath(packageDir, 'manifest.yml'), packageManifest); +} diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.ts b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.ts new file mode 100644 index 0000000000000..fa9a24475e92e --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/data_stream.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import nunjucks from 'nunjucks'; +import { join as joinPath } from 'path'; +import type { DataStream } from '../../common'; +import { copySync, createSync, ensureDirSync, listDirSync } from '../util'; + +export function createDatastream( + packageName: string, + specificDataStreamDir: string, + dataStream: DataStream +): void { + const dataStreamName = dataStream.name; + const pipelineDir = joinPath(specificDataStreamDir, 'elasticsearch', 'ingest_pipeline'); + const title = dataStream.title; + const description = dataStream.description; + + ensureDirSync(specificDataStreamDir); + createDataStreamFolders(specificDataStreamDir, pipelineDir); + createPipelineTests(specificDataStreamDir, dataStream.rawSamples, packageName, dataStreamName); + + const dataStreams: string[] = []; + for (const inputType of dataStream.inputTypes) { + const mappedValues = { + data_stream_title: title, + data_stream_description: description, + package_name: packageName, + data_stream_name: dataStreamName, + }; + const dataStreamManifest = nunjucks.render( + `${inputType.replaceAll('-', '_')}_manifest.yml.njk`, + mappedValues + ); + const commonManifest = nunjucks.render('common_manifest.yml.njk', mappedValues); + + const combinedManifest = `${dataStreamManifest}\n${commonManifest}`; + dataStreams.push(combinedManifest); + + // We comment this out for now, as its not really needed for custom integrations + /* createDataStreamSystemTests( + specificDataStreamDir, + inputType, + mappedValues, + packageName, + dataStreamName + ); + */ + } + + const finalManifest = nunjucks.render('data_stream.yml.njk', { + title, + data_streams: dataStreams, + }); + + createSync(joinPath(specificDataStreamDir, 'manifest.yml'), finalManifest); +} + +function createDataStreamFolders(specificDataStreamDir: string, pipelineDir: string): void { + const dataStreamTemplatesDir = joinPath(__dirname, '../templates/data_stream'); + const items = listDirSync(dataStreamTemplatesDir); + + for (const item of items) { + const s = joinPath(dataStreamTemplatesDir, item); + const d = joinPath(specificDataStreamDir, item); + copySync(s, d); + } + + ensureDirSync(pipelineDir); +} + +function createPipelineTests( + specificDataStreamDir: string, + rawSamples: string[], + packageName: string, + dataStreamName: string +): void { + const pipelineTestTemplatesDir = joinPath(__dirname, '../templates/pipeline_tests'); + const pipelineTestsDir = joinPath(specificDataStreamDir, '_dev/test/pipeline'); + ensureDirSync(pipelineTestsDir); + const items = listDirSync(pipelineTestTemplatesDir); + for (const item of items) { + const s = joinPath(pipelineTestTemplatesDir, item); + const d = joinPath(pipelineTestsDir, item.replaceAll('_', '-')); + copySync(s, d); + } + const formattedPackageName = packageName.replace(/_/g, '-'); + const formattedDataStreamName = dataStreamName.replace(/_/g, '-'); + const testFileName = joinPath( + pipelineTestsDir, + `test-${formattedPackageName}-${formattedDataStreamName}.log` + ); + createSync(testFileName, rawSamples.join('\n')); +} + +// We are skipping this one for now, as its not really needed for custom integrations +/* function createDataStreamSystemTests( + specificDataStreamDir: string, + inputType: string, + mappedValues: Record, + packageName: string, + dataStreamName: string +): void { + const systemTestTemplatesDir = joinPath(__dirname, '../templates/system_tests'); + nunjucks.configure({ autoescape: true }); + const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(systemTestTemplatesDir)); + mappedValues.package_name = packageName.replace(/_/g, '-'); + mappedValues.data_stream_name = dataStreamName.replace(/_/g, '-'); + const systemTestFolder = joinPath(specificDataStreamDir, '_dev/test/system'); + + fs.mkdirSync(systemTestFolder, { recursive: true }); + + const systemTestTemplate = env.getTemplate(`test_${inputType.replaceAll('-', '_')}_config.yml.njk`); + const systemTestRendered = systemTestTemplate.render(mappedValues); + + const systemTestFileName = joinPath(systemTestFolder, `test-${inputType}-config.yml`); + fs.writeFileSync(systemTestFileName, systemTestRendered, 'utf-8'); +}*/ diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/dev_folders.ts b/x-pack/plugins/integration_assistant/server/integration_builder/dev_folders.ts new file mode 100644 index 0000000000000..bac22efe2d3b3 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/dev_folders.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { join as joinPath } from 'path'; +import nunjucks from 'nunjucks'; +import type { Integration } from '../../common'; +import { ensureDirSync, createSync } from '../util'; + +export function createPackageSystemTests(integrationDir: string, integration: Integration) { + const systemTestsDockerDir = joinPath(integrationDir, '_dev/deploy/docker/'); + const systemTestsSamplesDir = joinPath(systemTestsDockerDir, 'sample_logs'); + ensureDirSync(systemTestsSamplesDir); + + const streamVersion = '0.13.0'; + const dockerComposeVersion = '2.3'; + const dockerServices: string[] = []; + for (const stream of integration.dataStreams) { + const packageName = integration.name.replace(/_/g, '-'); + const dataStreamName = stream.name.replace(/_/g, '-'); + + const systemTestFileName = joinPath( + systemTestsSamplesDir, + `test-${packageName}-${dataStreamName}.log` + ); + const rawSamplesContent = stream.rawSamples.join('\n'); + createSync(systemTestFileName, rawSamplesContent); + + for (const inputType of stream.inputTypes) { + const mappedValues = { + package_name: packageName, + data_stream_name: dataStreamName, + stream_version: streamVersion, + }; + const renderedService = nunjucks.render( + `service_${inputType.replaceAll('_', '-')}.njk`, + mappedValues + ); + dockerServices.push(renderedService); + } + } + + const renderedDockerCompose = nunjucks.render('docker_compose.yml.njk', { + services: dockerServices.join('\n'), + docker_compose_version: dockerComposeVersion, + }); + + const dockerComposeFileName = joinPath(systemTestsDockerDir, 'docker-compose.yml'); + createSync(dockerComposeFileName, renderedDockerCompose); +} diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts b/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts new file mode 100644 index 0000000000000..c95a15cbe871d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/fields.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import nunjucks from 'nunjucks'; + +import { createSync, generateFields, mergeSamples } from '../util'; + +export function createFieldMapping( + packageName: string, + dataStreamName: string, + specificDataStreamDir: string, + docs: object[] +): void { + createBaseFields(specificDataStreamDir, packageName, dataStreamName); + createCustomFields(specificDataStreamDir, docs); +} + +function createBaseFields( + specificDataStreamDir: string, + packageName: string, + dataStreamName: string +): void { + const datasetName = `${packageName}.${dataStreamName}`; + const baseFields = nunjucks.render('base_fields.yml.njk', { + module: packageName, + dataset: datasetName, + }); + + createSync(`${specificDataStreamDir}/base-fields.yml`, baseFields); +} + +function createCustomFields(specificDataStreamDir: string, pipelineResults: object[]): void { + const mergedResults = mergeSamples(pipelineResults); + const fieldKeys = generateFields(mergedResults); + createSync(`${specificDataStreamDir}/fields/fields.yml`, fieldKeys); +} diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/index.ts b/x-pack/plugins/integration_assistant/server/integration_builder/index.ts new file mode 100644 index 0000000000000..8de03051d75c5 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { buildPackage } from './build_integration'; diff --git a/x-pack/plugins/integration_assistant/server/integration_builder/pipeline.ts b/x-pack/plugins/integration_assistant/server/integration_builder/pipeline.ts new file mode 100644 index 0000000000000..805535322b8e7 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/integration_builder/pipeline.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { join as joinPath } from 'path'; +import yaml from 'js-yaml'; +import { createSync } from '../util'; + +export function createPipeline(specificDataStreamDir: string, pipeline: object): void { + const filePath = joinPath(specificDataStreamDir, 'elasticsearch/ingest_pipeline/default.yml'); + const yamlContent = `---\n${yaml.dump(pipeline, { sortKeys: false })}`; + createSync(filePath, yamlContent); +} diff --git a/x-pack/plugins/integration_assistant/server/plugin.ts b/x-pack/plugins/integration_assistant/server/plugin.ts new file mode 100644 index 0000000000000..4f7dfa87291cc --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/plugin.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + Plugin, + PluginInitializerContext, + CoreSetup, + CoreStart, + Logger, + CustomRequestHandlerContext, +} from '@kbn/core/server'; +import type { PluginStartContract as ActionsPluginsStart } from '@kbn/actions-plugin/server/plugin'; +import { registerRoutes } from './routes'; +import type { IntegrationAssistantPluginSetup, IntegrationAssistantPluginStart } from './types'; + +export type IntegrationAssistantRouteHandlerContext = CustomRequestHandlerContext<{ + integrationAssistant: { + getStartServices: CoreSetup<{ + actions: ActionsPluginsStart; + }>['getStartServices']; + logger: Logger; + }; +}>; + +export class IntegrationAssistantPlugin + implements Plugin +{ + private readonly logger: Logger; + + constructor(initializerContext: PluginInitializerContext) { + this.logger = initializerContext.logger.get(); + } + public setup( + core: CoreSetup<{ + actions: ActionsPluginsStart; + }> + ) { + core.http.registerRouteHandlerContext< + IntegrationAssistantRouteHandlerContext, + 'integrationAssistant' + >('integrationAssistant', () => ({ + getStartServices: core.getStartServices, + logger: this.logger, + })); + const router = core.http.createRouter(); + this.logger.debug('integrationAssistant api: Setup'); + + registerRoutes(router); + + return {}; + } + + public start(core: CoreStart) { + this.logger.debug('integrationAssistant api: Started'); + return {}; + } + + public stop() {} +} diff --git a/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts new file mode 100644 index 0000000000000..191f189bacf8d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/build_integration_routes.ts @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import type { IRouter } from '@kbn/core/server'; +import type { BuildIntegrationApiRequest } from '../../common'; +import { INTEGRATION_BUILDER_PATH } from '../../common'; +import { buildPackage } from '../integration_builder'; +import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; + +export function registerIntegrationBuilderRoutes( + router: IRouter +) { + router.versioned + .post({ + path: INTEGRATION_BUILDER_PATH, + access: 'internal', + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + integration: schema.object({ + name: schema.string(), + title: schema.string(), + description: schema.string(), + logo: schema.maybe(schema.string()), + dataStreams: schema.arrayOf( + schema.object({ + name: schema.string(), + title: schema.string(), + description: schema.string(), + inputTypes: schema.arrayOf(schema.string()), + rawSamples: schema.arrayOf(schema.string()), + pipeline: schema.object({ + name: schema.maybe(schema.string()), + description: schema.maybe(schema.string()), + version: schema.maybe(schema.number()), + processors: schema.arrayOf( + schema.recordOf(schema.string(), schema.object({}, { unknowns: 'allow' })) + ), + on_failure: schema.maybe( + schema.arrayOf( + schema.recordOf(schema.string(), schema.object({}, { unknowns: 'allow' })) + ) + ), + }), + docs: schema.arrayOf(schema.object({}, { unknowns: 'allow' })), + }) + ), + }), + }), + }, + }, + }, + async (_, request, response) => { + const { integration } = request.body as BuildIntegrationApiRequest; + try { + const zippedIntegration = await buildPackage(integration); + return response.custom({ statusCode: 200, body: zippedIntegration }); + } catch (e) { + return response.customError({ statusCode: 500, body: e }); + } + } + ); +} diff --git a/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts new file mode 100644 index 0000000000000..4feb1c8b3bd8f --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/categorization_routes.ts @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import type { IRouter } from '@kbn/core/server'; +import { getRequestAbortedSignal } from '@kbn/data-plugin/server'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import type { CategorizationApiRequest, CategorizationApiResponse } from '../../common'; +import { CATEGORIZATION_GRAPH_PATH } from '../../common'; +import { ROUTE_HANDLER_TIMEOUT } from '../constants'; +import { getCategorizationGraph } from '../graphs/categorization'; +import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; + +export function registerCategorizationRoutes( + router: IRouter +) { + router.versioned + .post({ + path: CATEGORIZATION_GRAPH_PATH, + access: 'internal', + options: { + timeout: { + idleSocket: ROUTE_HANDLER_TIMEOUT, + }, + }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + packageName: schema.string(), + dataStreamName: schema.string(), + rawSamples: schema.arrayOf(schema.string()), + currentPipeline: schema.any(), + connectorId: schema.maybe(schema.string()), + model: schema.maybe(schema.string()), + region: schema.maybe(schema.string()), + }), + }, + }, + }, + async (context, req, res) => { + const { packageName, dataStreamName, rawSamples, currentPipeline } = + req.body as CategorizationApiRequest; + + const services = await context.resolve(['core']); + const { client } = services.core.elasticsearch; + const { getStartServices, logger } = await context.integrationAssistant; + const [, { actions: actionsPlugin }] = await getStartServices(); + const actionsClient = await actionsPlugin.getActionsClientWithRequest(req); + const connector = req.body.connectorId + ? await actionsClient.get({ id: req.body.connectorId }) + : (await actionsClient.getAll()).filter( + (connectorItem) => connectorItem.actionTypeId === '.bedrock' + )[0]; + + const abortSignal = getRequestAbortedSignal(req.events.aborted$); + const isOpenAI = connector.actionTypeId === '.gen-ai'; + const llmClass = isOpenAI ? ActionsClientChatOpenAI : ActionsClientSimpleChatModel; + + const model = new llmClass({ + actions: actionsPlugin, + connectorId: connector.id, + request: req, + logger, + llmType: isOpenAI ? 'openai' : 'bedrock', + model: req.body.model || connector.config?.defaultModel, + temperature: 0.05, + maxTokens: 4096, + signal: abortSignal, + streaming: false, + }); + + const graph = await getCategorizationGraph(client, model); + let results = { results: { docs: {}, pipeline: {} } }; + try { + results = (await graph.invoke({ + packageName, + dataStreamName, + rawSamples, + currentPipeline, + })) as CategorizationApiResponse; + } catch (e) { + return res.badRequest({ body: e }); + } + + return res.ok({ body: results }); + } + ); +} diff --git a/x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts b/x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts new file mode 100644 index 0000000000000..d62e31389af46 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/ecs_routes.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import type { IRouter } from '@kbn/core/server'; +import { getRequestAbortedSignal } from '@kbn/data-plugin/server'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { ECS_GRAPH_PATH } from '../../common'; +import type { EcsMappingApiRequest, EcsMappingApiResponse } from '../../common/types'; +import { ROUTE_HANDLER_TIMEOUT } from '../constants'; +import { getEcsGraph } from '../graphs/ecs'; +import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; + +export function registerEcsRoutes(router: IRouter) { + router.versioned + .post({ + path: ECS_GRAPH_PATH, + access: 'internal', + options: { + timeout: { + idleSocket: ROUTE_HANDLER_TIMEOUT, + }, + }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + packageName: schema.string(), + dataStreamName: schema.string(), + rawSamples: schema.arrayOf(schema.string()), + // TODO: This is a single nested object of any key or shape, any better schema? + mapping: schema.maybe(schema.any()), + connectorId: schema.maybe(schema.string()), + region: schema.maybe(schema.string()), + model: schema.maybe(schema.string()), + }), + }, + }, + }, + async (context, req, res) => { + const { packageName, dataStreamName, rawSamples, mapping } = + req.body as EcsMappingApiRequest; + + const { getStartServices, logger } = await context.integrationAssistant; + const [, { actions: actionsPlugin }] = await getStartServices(); + const actionsClient = await actionsPlugin.getActionsClientWithRequest(req); + const connector = req.body.connectorId + ? await actionsClient.get({ id: req.body.connectorId }) + : (await actionsClient.getAll()).filter( + (connectorItem) => connectorItem.actionTypeId === '.bedrock' + )[0]; + + const abortSignal = getRequestAbortedSignal(req.events.aborted$); + const isOpenAI = connector.actionTypeId === '.gen-ai'; + const llmClass = isOpenAI ? ActionsClientChatOpenAI : ActionsClientSimpleChatModel; + + const model = new llmClass({ + actions: actionsPlugin, + connectorId: connector.id, + request: req, + logger, + llmType: isOpenAI ? 'openai' : 'bedrock', + model: req.body.model || connector.config?.defaultModel, + temperature: 0.05, + maxTokens: 4096, + signal: abortSignal, + streaming: false, + }); + + const graph = await getEcsGraph(model); + let results = { results: { mapping: {}, pipeline: {} } }; + try { + if (req.body?.mapping) { + results = (await graph.invoke({ + packageName, + dataStreamName, + rawSamples, + mapping, + })) as EcsMappingApiResponse; + } else + results = (await graph.invoke({ + packageName, + dataStreamName, + rawSamples, + })) as EcsMappingApiResponse; + } catch (e) { + return res.badRequest({ body: e }); + } + + return res.ok({ body: results }); + } + ); +} diff --git a/x-pack/plugins/integration_assistant/server/routes/index.ts b/x-pack/plugins/integration_assistant/server/routes/index.ts new file mode 100644 index 0000000000000..ebc597350969e --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { registerRoutes } from './register_routes'; diff --git a/x-pack/plugins/integration_assistant/server/routes/pipeline_routes.ts b/x-pack/plugins/integration_assistant/server/routes/pipeline_routes.ts new file mode 100644 index 0000000000000..17e4f667a6df5 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/pipeline_routes.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import type { IRouter } from '@kbn/core/server'; +import { TEST_PIPELINE_PATH } from '../../common'; +import type { TestPipelineApiRequest, TestPipelineApiResponse } from '../../common/types'; +import { ROUTE_HANDLER_TIMEOUT } from '../constants'; +import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; +import { testPipeline } from '../util/pipeline'; + +export function registerPipelineRoutes(router: IRouter) { + router.versioned + .post({ + path: TEST_PIPELINE_PATH, + access: 'internal', + options: { + timeout: { + idleSocket: ROUTE_HANDLER_TIMEOUT, + }, + }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + pipeline: schema.any(), + rawSamples: schema.arrayOf(schema.string()), + }), + }, + }, + }, + async (context, req, res) => { + const { rawSamples, currentPipeline } = req.body as TestPipelineApiRequest; + const services = await context.resolve(['core']); + const { client } = services.core.elasticsearch; + let results: TestPipelineApiResponse = { pipelineResults: [], errors: [] }; + try { + results = (await testPipeline( + rawSamples, + currentPipeline, + client + )) as TestPipelineApiResponse; + if (results?.errors && results.errors.length > 0) { + return res.badRequest({ body: JSON.stringify(results.errors) }); + } + } catch (e) { + return res.badRequest({ body: e }); + } + + return res.ok({ body: results }); + } + ); +} diff --git a/x-pack/plugins/integration_assistant/server/routes/register_routes.ts b/x-pack/plugins/integration_assistant/server/routes/register_routes.ts new file mode 100644 index 0000000000000..a8ccc39ff2a0f --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/register_routes.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IRouter } from '@kbn/core/server'; +import { registerEcsRoutes } from './ecs_routes'; +import { registerIntegrationBuilderRoutes } from './build_integration_routes'; +import { registerCategorizationRoutes } from './categorization_routes'; +import { registerRelatedRoutes } from './related_routes'; +import { registerPipelineRoutes } from './pipeline_routes'; +import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; + +export function registerRoutes(router: IRouter) { + registerEcsRoutes(router); + registerIntegrationBuilderRoutes(router); + registerCategorizationRoutes(router); + registerRelatedRoutes(router); + registerPipelineRoutes(router); +} diff --git a/x-pack/plugins/integration_assistant/server/routes/related_routes.ts b/x-pack/plugins/integration_assistant/server/routes/related_routes.ts new file mode 100644 index 0000000000000..934b9711027ee --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/related_routes.ts @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; +import type { IRouter } from '@kbn/core/server'; +import { getRequestAbortedSignal } from '@kbn/data-plugin/server'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { RELATED_GRAPH_PATH } from '../../common'; +import type { RelatedApiRequest, RelatedApiResponse } from '../../common/types'; +import { ROUTE_HANDLER_TIMEOUT } from '../constants'; +import { getRelatedGraph } from '../graphs/related'; +import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; + +export function registerRelatedRoutes(router: IRouter) { + router.versioned + .post({ + path: RELATED_GRAPH_PATH, + access: 'internal', + options: { + timeout: { + idleSocket: ROUTE_HANDLER_TIMEOUT, + }, + }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + packageName: schema.string(), + dataStreamName: schema.string(), + rawSamples: schema.arrayOf(schema.string()), + // TODO: This is a single nested object of any key or shape, any better schema? + currentPipeline: schema.maybe(schema.any()), + connectorId: schema.maybe(schema.string()), + region: schema.maybe(schema.string()), + model: schema.maybe(schema.string()), + }), + }, + }, + }, + async (context, req, res) => { + const { packageName, dataStreamName, rawSamples, currentPipeline } = + req.body as RelatedApiRequest; + + const services = await context.resolve(['core']); + const { client } = services.core.elasticsearch; + const { getStartServices, logger } = await context.integrationAssistant; + const [, { actions: actionsPlugin }] = await getStartServices(); + const actionsClient = await actionsPlugin.getActionsClientWithRequest(req); + const connector = req.body.connectorId + ? await actionsClient.get({ id: req.body.connectorId }) + : (await actionsClient.getAll()).filter( + (connectorItem) => connectorItem.actionTypeId === '.bedrock' + )[0]; + + const isOpenAI = connector.actionTypeId === '.gen-ai'; + const llmClass = isOpenAI ? ActionsClientChatOpenAI : ActionsClientSimpleChatModel; + const abortSignal = getRequestAbortedSignal(req.events.aborted$); + + const model = new llmClass({ + actions: actionsPlugin, + connectorId: connector.id, + request: req, + logger, + llmType: isOpenAI ? 'openai' : 'bedrock', + model: req.body.model || connector.config?.defaultModel, + temperature: 0.05, + maxTokens: 4096, + signal: abortSignal, + streaming: false, + }); + + const graph = await getRelatedGraph(client, model); + let results = { results: { docs: {}, pipeline: {} } }; + try { + results = (await graph.invoke({ + packageName, + dataStreamName, + rawSamples, + currentPipeline, + })) as RelatedApiResponse; + } catch (e) { + return res.badRequest({ body: e }); + } + + return res.ok({ body: results }); + } + ); +} diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/aws_cloudwatch.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/aws_cloudwatch.yml.hbs new file mode 100644 index 0000000000000..c90e8a267890c --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/aws_cloudwatch.yml.hbs @@ -0,0 +1,76 @@ +{{#unless log_group_name}} +{{#unless log_group_name_prefix}} +{{#if log_group_arn }} +log_group_arn: {{ log_group_arn }} +{{/if}} +{{/unless}} +{{/unless}} +{{#unless log_group_arn}} +{{#unless log_group_name}} +{{#if log_group_name_prefix }} +log_group_name_prefix: {{ log_group_name_prefix }} +{{/if}} +{{/unless}} +{{/unless}} +{{#unless log_group_arn}} +{{#unless log_group_name_prefix}} +{{#if log_group_name }} +log_group_name: {{ log_group_name }} +{{/if}} +{{/unless}} +{{/unless}} +{{#unless log_group_arn}} +region_name: {{ region_name }} +{{/unless}} +{{#unless log_stream_prefix}} +{{#if log_streams }} +log_streams: {{ log_streams }} +{{/if}} +{{/unless}} +{{#unless log_streams}} +{{#if log_stream_prefix }} +log_stream_prefix: {{ log_stream_prefix }} +{{/if}} +{{/unless}} +{{#if start_position }} +start_position: {{ start_position }} +{{/if}} +{{#if scan_frequency }} +scan_frequency: {{ scan_frequency }} +{{/if}} +{{#if api_sleep }} +api_sleep: {{ api_sleep }} +{{/if}} +{{#if api_timeout}} +api_timeout: {{api_timeout}} +{{/if}} +{{#if latency }} +latency: {{ latency }} +{{/if}} +{{#if number_of_workers }} +number_of_workers: {{ number_of_workers }} +{{/if}} +{{#if credential_profile_name}} +credential_profile_name: {{credential_profile_name}} +{{/if}} +{{#if shared_credential_file}} +shared_credential_file: {{shared_credential_file}} +{{/if}} +{{#if default_region}} +default_region: {{default_region}} +{{/if}} +{{#if access_key_id}} +access_key_id: {{access_key_id}} +{{/if}} +{{#if secret_access_key}} +secret_access_key: {{secret_access_key}} +{{/if}} +{{#if session_token}} +session_token: {{session_token}} +{{/if}} +{{#if role_arn}} +role_arn: {{role_arn}} +{{/if}} +{{#if proxy_url }} +proxy_url: {{proxy_url}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/aws_s3.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/aws_s3.yml.hbs new file mode 100644 index 0000000000000..5951396423391 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/aws_s3.yml.hbs @@ -0,0 +1,130 @@ +{{! start SQS queue }} +{{#unless bucket_arn}} +{{#unless non_aws_bucket_name}} +{{#if queue_url }} +queue_url: {{ queue_url }} +{{/if}} +{{/unless}} +{{/unless}} +{{! end SQS queue }} + +{{#unless queue_url}}{{! start S3 bucket polling }} + +{{! +When using an S3 bucket, you can specify only one of the following options: +- An AWS bucket ARN +- A non-AWS bucket name +}} + +{{! shared S3 bucket polling options }} +{{#if number_of_workers }} +number_of_workers: {{ number_of_workers }} +{{/if}} +{{#if bucket_list_prefix }} +bucket_list_prefix: {{ bucket_list_prefix }} +{{/if}} +{{#if bucket_list_interval }} +bucket_list_interval: {{ bucket_list_interval }} +{{/if}} + +{{! AWS S3 bucket ARN options }} +{{#unless non_aws_bucket_name}} +{{#if bucket_arn }} +bucket_arn: {{ bucket_arn }} +{{/if}} +{{/unless}}{{! end AWS S3 bucket ARN options }} + +{{! non-AWS S3 bucket ARN options }} +{{#unless bucket_arn}} +{{#if non_aws_bucket_name }} +non_aws_bucket_name: {{ non_aws_bucket_name }} +{{/if}} +{{/unless}}{{! end non-AWS S3 bucket ARN options }} + +{{/unless}}{{! end S3 bucket polling }} + +{{#if buffer_size }} +buffer_size: {{ buffer_size }} +{{/if}} +{{#if content_type }} +content_type: {{ content_type }} +{{/if}} +{{#if encoding }} +encoding: {{ encoding }} +{{/if}} +{{#if expand_event_list_from_field }} +expand_event_list_from_field: {{ expand_event_list_from_field }} +{{/if}} +{{#if buffer_size }} +buffer_size: {{ buffer_size }} +{{/if}} +{{#if fips_enabled }} +fips_enabled: {{ fips_enabled }} +{{/if}} +{{#if include_s3_metadata }} +include_s3_metadata: {{ include_s3_metadata }} +{{/if}} +{{#if max_bytes }} +max_bytes: {{ max_bytes }} +{{/if}} +{{#if max_number_of_messages }} +max_number_of_messages: {{ max_number_of_messages }} +{{/if}} +{{#if path_style }} +path_style: {{ path_style }} +{{/if}} +{{#if provider }} +provider: {{ provider }} +{{/if}} +{{#if sqs.max_receive_count }} +sqs.max_receive_count: {{ sqs.max_receive_count }} +{{/if}} +{{#if sqs.wait_time }} +sqs.wait_time: {{ sqs.wait_time }} +{{/if}} + +{{#if file_selectors}} +file_selectors: +{{file_selectors}} +{{/if}} + +{{#if credential_profile_name}} +credential_profile_name: {{credential_profile_name}} +{{/if}} +{{#if shared_credential_file}} +shared_credential_file: {{shared_credential_file}} +{{/if}} +{{#if visibility_timeout}} +visibility_timeout: {{visibility_timeout}} +{{/if}} +{{#if api_timeout}} +api_timeout: {{api_timeout}} +{{/if}} +{{#if endpoint}} +endpoint: {{endpoint}} +{{/if}} +{{#if default_region}} +default_region: {{default_region}} +{{/if}} +{{#if access_key_id}} +access_key_id: {{access_key_id}} +{{/if}} +{{#if secret_access_key}} +secret_access_key: {{secret_access_key}} +{{/if}} +{{#if session_token}} +session_token: {{session_token}} +{{/if}} +{{#if role_arn}} +role_arn: {{role_arn}} +{{/if}} +{{#if fips_enabled}} +fips_enabled: {{fips_enabled}} +{{/if}} +{{#if proxy_url }} +proxy_url: {{proxy_url}} +{{/if}} +{{#if parsers}} +parsers: +{{parsers}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/azure_blob_storage.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/azure_blob_storage.yml.hbs new file mode 100644 index 0000000000000..6e319399e7b3d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/azure_blob_storage.yml.hbs @@ -0,0 +1,35 @@ +{{#if account_name}} +account_name: {{account_name}} +{{/if}} +{{#if service_account_key}} +auth.shared_credentials.account_key: {{service_account_key}} +{{/if}} +{{#if service_account_uri}} +auth.connection_string.uri: {{service_account_uri}} +{{/if}} +{{#if storage_url}} +storage_url: {{storage_url}} +{{/if}} +{{#if number_of_workers}} +max_workers: {{number_of_workers}} +{{/if}} +{{#if poll}} +poll: {{poll}} +{{/if}} +{{#if poll_interval}} +poll_interval: {{poll_interval}} +{{/if}} +{{#if containers}} +containers: +{{containers}} +{{/if}} +{{#if file_selectors}} +file_selectors: +{{file_selectors}} +{{/if}} +{{#if timestamp_epoch}} +timestamp_epoch: {{timestamp_epoch}} +{{/if}} +{{#if expand_event_list_from_field}} +expand_event_list_from_field: {{expand_event_list_from_field}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/azure_eventhub.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/azure_eventhub.yml.hbs new file mode 100644 index 0000000000000..ed13f215ac169 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/azure_eventhub.yml.hbs @@ -0,0 +1,28 @@ +{{#if eventhub}} +eventhub: {{eventhub}} +{{/if}} +{{#if consumer_group}} +consumer_group: {{consumer_group}} +{{/if}} +{{#if connection_string}} +connection_string: {{connection_string}} +{{/if}} +{{#if storage_account}} +storage_account: {{storage_account}} +{{/if}} +{{#if storage_account_key}} +storage_account_key: {{storage_account_key}} +{{/if}} +{{#if storage_account_container}} +storage_account_container: {{storage_account_container}} +{{/if}} +{{#if resource_manager_endpoint}} +resource_manager_endpoint: {{resource_manager_endpoint}} +{{/if}} +sanitize_options: +{{#if sanitize_newlines}} + - NEW_LINES +{{/if}} +{{#if sanitize_singlequotes}} + - SINGLE_QUOTES +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/cloudfoundry.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/cloudfoundry.yml.hbs new file mode 100644 index 0000000000000..38e88ea691699 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/cloudfoundry.yml.hbs @@ -0,0 +1,24 @@ +{{#if api_address}} +api_address: {{api_address}} +{{/if}} +{{#if doppler_address}} +doppler_address: {{doppler_address}} +{{/if}} +{{#if uaa_address}} +uaa_address: {{uaa_address}} +{{/if}} +{{#if rlp_address}} +rlp_address: {{rlp_address}} +{{/if}} +{{#if client_id}} +client_id: {{client_id}} +{{/if}} +{{#if client_secret}} +client_secret: {{client_secret}} +{{/if}} +{{#if version}} +version: {{version}} +{{/if}} +{{#if shard_id}} +shard_id: {{shard_id}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/common.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/common.yml.hbs new file mode 100644 index 0000000000000..a11c556b5099b --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/common.yml.hbs @@ -0,0 +1,14 @@ +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/filestream.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/filestream.yml.hbs new file mode 100644 index 0000000000000..437accfc32650 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/filestream.yml.hbs @@ -0,0 +1,13 @@ +paths: +{{#each paths as |path|}} + - {{path}} +{{/each}} +{{#if exclude_files}} +prospector.scanner.exclude_files: +{{#each exclude_files as |pattern f|}} + - {{pattern}} +{{/each}} +{{/if}} +{{#if custom}} +{{custom}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/gcp_pubsub.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/gcp_pubsub.yml.hbs new file mode 100644 index 0000000000000..6cee3bb8e1ae4 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/gcp_pubsub.yml.hbs @@ -0,0 +1,27 @@ +{{#if project_id}} +project_id: {{project_id}} +{{/if}} +{{#if topic}} +topic: {{topic}} +{{/if}} +{{#if subscription_name}} +subscription.name: {{subscription_name}} +{{/if}} +{{#if subscription_create}} +subscription.create: {{subscription_create}} +{{/if}} +{{#if subscription_num_goroutines}} +subscription.num_goroutines: {{subscription_num_goroutines}} +{{/if}} +{{#if subscription_max_outstanding_messages}} +subscription.max_outstanding_messages: {{subscription_max_outstanding_messages}} +{{/if}} +{{#if credentials_file}} +credentials_file: {{credentials_file}} +{{/if}} +{{#if credentials_json}} +credentials_json: '{{credentials_json}}' +{{/if}} +{{#if alternative_host}} +alternative_host: {{alternative_host}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/gcs.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/gcs.yml.hbs new file mode 100644 index 0000000000000..37ee85e48db93 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/gcs.yml.hbs @@ -0,0 +1,35 @@ +{{#if project_id}} +project_id: {{project_id}} +{{/if}} +{{#if alternative_host}} +alternative_host: {{alternative_host}} +{{/if}} +{{#if service_account_key}} +auth.credentials_json.account_key: {{service_account_key}} +{{/if}} +{{#if service_account_file}} +auth.credentials_file.path: {{service_account_file}} +{{/if}} +{{#if number_of_workers}} +max_workers: {{number_of_workers}} +{{/if}} +{{#if poll}} +poll: {{poll}} +{{/if}} +{{#if poll_interval}} +poll_interval: {{poll_interval}} +{{/if}} +{{#if bucket_timeout}} +bucket_timeout: {{bucket_timeout}} +{{/if}} +{{#if buckets}} +buckets: +{{buckets}} +{{/if}} +{{#if file_selectors}} +file_selectors: +{{file_selectors}} +{{/if}} +{{#if timestamp_epoch}} +timestamp_epoch: {{timestamp_epoch}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/http_endpoint.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/http_endpoint.yml.hbs new file mode 100644 index 0000000000000..1accdcbaa22e6 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/http_endpoint.yml.hbs @@ -0,0 +1,57 @@ +{{#if listen_address}} +listen_address: {{listen_address}} +{{/if}} +{{#if listen_port}} +listen_port: {{listen_port}} +{{/if}} +{{#if prefix}} +prefix: {{prefix}} +{{/if}} +{{#if preserve_original_event}} +preserve_original_event: {{preserve_original_event}} +{{/if}} +{{#if basic_auth}} +basic_auth: {{basic_auth}} +{{/if}} +{{#if username}} +username: {{username}} +{{/if}} +{{#if password}} +password: {{password}} +{{/if}} +{{#if secret_header}} +secret.header: {{secret_header}} +{{/if}} +{{#if secret_value}} +secret.value: {{secret_value}} +{{/if}} +{{#if hmac_header}} +hmac.header: {{hmac_header}} +{{/if}} +{{#if hmac_key}} +hmac.key: {{hmac_key}} +{{/if}} +{{#if hmac_type}} +hmac.type: {{hmac_type}} +{{/if}} +{{#if hmac_prefix}} +hmac.prefix: {{hmac_prefix}} +{{/if}} +{{#if content_type}} +content_type: {{content_type}} +{{/if}} +{{#if response_code}} +response_code: {{response_code}} +{{/if}} +{{#if response_body}} +response_body: '{{response_body}}' +{{/if}} +{{#if url}} +url: {{url}} +{{/if}} +{{#if include_headers}} +include_headers: +{{#each include_headers as |header|}} + - {{header}} +{{/each}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/journald.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/journald.yml.hbs new file mode 100644 index 0000000000000..4bcad79a53ddc --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/journald.yml.hbs @@ -0,0 +1,44 @@ +condition: ${host.platform} == 'linux' + +{{#if paths}} +paths: +{{#each paths as |path i|}} + - {{path}} +{{/each}} +{{/if}} +{{#if backoff}} +backoff: {{backoff}} +{{/if}} +{{#if max_backoff}} +max_backoff: {{max_backoff}} +{{/if}} +{{#if seek}} +seek: {{seek}} +{{/if}} +{{#if cursor_seek_fallback}} +cursor_seek_fallback: {{cursor_seek_fallback}} +{{/if}} +{{#if since}} +since: {{since}} +{{/if}} +{{#if units}} +units: {{units}} +{{/if}} +{{#if syslog_identifiers}} +syslog_identifiers: +{{#each syslog_identifiers as |identifier i|}} + - {{identifier}} +{{/each}} +{{/if}} +{{#if transports}} +transports: +{{#each transports as |transport i|}} + - {{transport}} +{{/each}} +{{/if}} +{{#if include_matches}} +include_matches: +{{#each include_matches as |match i|}} + - {{match}} +{{/each}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/kafka.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/kafka.yml.hbs new file mode 100644 index 0000000000000..79b74ed4cdcb8 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/kafka.yml.hbs @@ -0,0 +1,100 @@ +{{#if hosts}} +hosts: +{{#each hosts as |host i|}} + - {{host}} +{{/each}} +{{/if}} +{{#if topics}} +topics: +{{#each topics as |topic i|}} + - {{topic}} +{{/each}} +{{/if}} +{{#if group_id}} +group_id: {{group_id}} +{{/if}} +{{#if client_id}} +client_id: {{client_id}} +{{/if}} +{{#if username}} +username: {{username}} +{{/if}} +{{#if password}} +password: {{password}} +{{/if}} +{{#if version}} +version: {{version}} +{{/if}} +{{#if initial_offset}} +initial_offset: {{initial_offset}} +{{/if}} +{{#if connect_backoff}} +connect_backoff: {{connect_backoff}} +{{/if}} +{{#if consume_backoff}} +consume_backoff: {{consume_backoff}} +{{/if}} +{{#if max_wait_time}} +max_wait_time: {{max_wait_time}} +{{/if}} +{{#if wait_close}} +wait_close: {{wait_close}} +{{/if}} +{{#if isolation_level}} +isolation_level: {{isolation_level}} +{{/if}} +{{#if expand_event_list_from_field}} +expand_event_list_from_field: {{expand_event_list_from_field}} +{{/if}} +{{#if fetch_min}} +fetch.min: {{fetch_min}} +{{/if}} +{{#if fetch_default}} +fetch.default: {{fetch_default}} +{{/if}} +{{#if fetch_max}} +fetch.max: {{fetch_max}} +{{/if}} +{{#if rebalance_strategy}} +rebalance.strategy: {{rebalance_strategy}} +{{/if}} +{{#if rebalance_timeout}} +rebalance.timeout: {{rebalance_timeout}} +{{/if}} +{{#if rebalance_max_retries}} +rebalance.max_retries: {{rebalance_max_retries}} +{{/if}} +{{#if rebalance_retry_backoff}} +rebalance.retry_backoff: {{rebalance_retry_backoff}} +{{/if}} +{{#if parsers}} +parsers: +{{parsers}} +{{/if}} +{{#if kerberos_enabled}} +kerberos.enabled: {{kerberos_enabled}} +{{/if}} +{{#if kerberos_auth_type}} +kerberos.auth_type: {{kerberos_auth_type}} +{{/if}} +{{#if kerberos_config_path}} +kerberos.config_path: {{kerberos_config_path}} +{{/if}} +{{#if kerberos_username}} +kerberos.username: {{kerberos_username}} +{{/if}} +{{#if kerberos_password}} +kerberos.password: {{kerberos_password}} +{{/if}} +{{#if kerberos_keytab}} +kerberos.keytab: {{kerberos_keytab}} +{{/if}} +{{#if kerberos_service_name}} +kerberos.service_name: {{kerberos_service_name}} +{{/if}} +{{#if kerberos_realm}} +kerberos.realm: {{kerberos_realm}} +{{/if}} +{{#if kerberos_enable_krb5_fast}} +kerberos.enable_krb5_fast: {{kerberos_enable_krb5_fast}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/logfile.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/logfile.yml.hbs new file mode 100644 index 0000000000000..181b2466dff7f --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/logfile.yml.hbs @@ -0,0 +1,13 @@ +paths: +{{#each paths as |path i|}} + - {{path}} +{{/each}} +{{#if exclude_files}} +exclude_files: +{{#each exclude_files as |file f|}} + - {{file}} +{{/each}} +{{/if}} +{{#if custom}} +{{custom}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/tcp.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/tcp.yml.hbs new file mode 100644 index 0000000000000..037d4fc8a4590 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/tcp.yml.hbs @@ -0,0 +1,19 @@ +host: {{listen_address}}:{{listen_port}} +{{#if max_message_size}} +max_message_size: {{max_message_size}} +{{/if}} +{{#if framing}} +framing: {{framing}} +{{/if}} +{{#if line_delimiter}} +line_delimiter: {{line_delimiter}} +{{/if}} +{{#if max_connections}} +max_connections: {{max_connections}} +{{/if}} +{{#if timeout}} +timeout: {{timeout}} +{{/if}} +{{#if keep_null}} +keep_null: {{keep_null}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/agent/udp.yml.hbs b/x-pack/plugins/integration_assistant/server/templates/agent/udp.yml.hbs new file mode 100644 index 0000000000000..22f842ae31af6 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/agent/udp.yml.hbs @@ -0,0 +1,10 @@ +host: {{listen_address}}:{{listen_port}} +{{#if max_message_size}} +max_message_size: {{max_message_size}} +{{/if}} +{{#if timeout}} +timeout: {{timeout}} +{{/if}} +{{#if keep_null}} +keep_null: {{keep_null}} +{{/if}} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/base_fields.yml.njk b/x-pack/plugins/integration_assistant/server/templates/base_fields.yml.njk new file mode 100644 index 0000000000000..336d4c30e0dd5 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/base_fields.yml.njk @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset name. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module + value: {{ module }} +- name: event.dataset + type: constant_keyword + description: Event dataset + value: {{ dataset }} +- name: "@timestamp" + type: date + description: Event timestamp. diff --git a/x-pack/plugins/integration_assistant/server/templates/build.yml.njk b/x-pack/plugins/integration_assistant/server/templates/build.yml.njk new file mode 100644 index 0000000000000..8eb17a43a735e --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/build.yml.njk @@ -0,0 +1,3 @@ +dependencies: + ecs: + reference: "git@{{ ecs_version }}" \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/changelog.yml.njk b/x-pack/plugins/integration_assistant/server/templates/changelog.yml.njk new file mode 100644 index 0000000000000..eaf3d00631fa9 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/changelog.yml.njk @@ -0,0 +1,6 @@ +# newer versions go on top +- version: {{ initial_version }} + changes: + - description: Initial Version + type: enhancement + link: https://github.com/elastic/integrations/pull/xxxx diff --git a/x-pack/plugins/integration_assistant/server/templates/data_stream/fields/agent.yml b/x-pack/plugins/integration_assistant/server/templates/data_stream/fields/agent.yml new file mode 100644 index 0000000000000..d815b78d95fcf --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/data_stream/fields/agent.yml @@ -0,0 +1,44 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. + These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. + ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: containerized + type: boolean + description: > + If the host is a container. + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + diff --git a/x-pack/plugins/integration_assistant/server/templates/data_stream/fields/beats.yml b/x-pack/plugins/integration_assistant/server/templates/data_stream/fields/beats.yml new file mode 100644 index 0000000000000..9bcba659d84c0 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/data_stream/fields/beats.yml @@ -0,0 +1,30 @@ +- name: input.type + type: keyword + description: Type of Filebeat input. +- name: log.flags + type: keyword + description: Flags for the log file. +- name: log.offset + type: long + description: Offset of the entry in the log file. +- name: log.file + type: group + fields: + - name: device_id + type: keyword + description: ID of the device containing the filesystem where the file resides. + - name: fingerprint + type: keyword + description: The sha256 fingerprint identity of the file when fingerprinting is enabled. + - name: inode + type: keyword + description: Inode number of the log file. + - name: idxhi + type: keyword + description: The high-order part of a unique identifier that is associated with a file. (Windows-only) + - name: idxlo + type: keyword + description: The low-order part of a unique identifier that is associated with a file. (Windows-only) + - name: vol + type: keyword + description: The serial number of the volume that contains a file. (Windows-only) \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/img/logo.svg b/x-pack/plugins/integration_assistant/server/templates/img/logo.svg new file mode 100644 index 0000000000000..173fdec5072e9 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/img/logo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/aws_cloudwatch_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/aws_cloudwatch_manifest.yml.njk new file mode 100644 index 0000000000000..c2334c76052a0 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/aws_cloudwatch_manifest.yml.njk @@ -0,0 +1,92 @@ +- input: aws-cloudwatch + template_path: aws-cloudwatch.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: log_group_arn + type: text + title: Log Group ARN + multi: false + required: false + show_user: true + description: ARN of the log group to collect logs from. + - name: start_position + type: text + title: Start Position + multi: false + required: false + default: beginning + show_user: true + description: Allows user to specify if this input should read log files from the beginning or from the end. + - name: log_group_name + type: text + title: Log Group Name + multi: false + required: false + show_user: false + description: Name of the log group to collect logs from. `region_name` is required when `log_group_name` is given. + - name: log_group_name_prefix + type: text + title: Log Group Name Prefix + multi: false + required: false + show_user: false + description: The prefix for a group of log group names. `region_name` is required when `log_group_name_prefix` is given. `log_group_name` and `log_group_name_prefix` cannot be given at the same time. + - name: region_name + type: text + title: Region Name + multi: false + required: false + show_user: false + description: Region that the specified log group or log group prefix belongs to. + - name: log_streams + type: text + title: Log Streams + multi: true + required: false + show_user: false + description: A list of strings of log streams names that Filebeat collect log events from. + - name: log_stream_prefix + type: text + title: Log Stream Prefix + multi: false + required: false + show_user: false + description: A string to filter the results to include only log events from log streams that have names starting with this prefix. + - name: scan_frequency + type: text + title: Scan Frequency + multi: false + required: false + show_user: false + default: 1m + description: This config parameter sets how often Filebeat checks for new log events from the specified log group. + - name: api_timeput + type: text + title: API Timeout + multi: false + required: false + show_user: false + default: 120s + description: The maximum duration of AWS API can take. If it exceeds the timeout, AWS API will be interrupted. + - name: api_sleep + type: text + title: API Sleep + multi: false + required: false + show_user: false + default: 200ms + description: This is used to sleep between AWS FilterLogEvents API calls inside the same collection period. `FilterLogEvents` API has a quota of 5 transactions per second (TPS)/account/Region. This value should only be adjusted when there are multiple Filebeats or multiple Filebeat inputs collecting logs from the same region and AWS account. + - name: latency + type: text + title: Latency + multi: false + required: false + show_user: false + description: "The amount of time required for the logs to be available to CloudWatch Logs. Sample values, `1m` or `5m` — see Golang [time.ParseDuration](https://pkg.go.dev/time#ParseDuration) for more details. Latency translates the query's time range to consider the CloudWatch Logs latency. Example: `5m` means that the integration will query CloudWatch to search for logs available 5 minutes ago." + - name: number_of_workers + type: integer + title: Number of workers + required: false + show_user: false + description: The number of workers assigned to reading from log groups. Each worker will read log events from one of the log groups matching `log_group_name_prefix`. For example, if `log_group_name_prefix` matches five log groups, then `number_of_workers` should be set to `5`. The default value is `1`. \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/aws_s3.yml_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/aws_s3.yml_manifest.yml.njk new file mode 100644 index 0000000000000..6265b57e6ed35 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/aws_s3.yml_manifest.yml.njk @@ -0,0 +1,177 @@ +- input: aws-s3 + template_path: aws-s3.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: bucket_arn + type: text + title: Bucket ARN + multi: false + required: false + show_user: true + description: ARN of the AWS S3 bucket that will be polled for list operation. (Required when `queue_url` and `non_aws_bucket_name` are not set). + - name: queue_url + type: text + title: Queue URL + multi: false + required: false + show_user: true + description: URL of the AWS SQS queue that messages will be received from. + - name: number_of_workers + type: integer + title: Number of Workers + multi: false + required: false + default: 1 + show_user: true + description: Number of workers that will process the S3 objects listed. (Required when `bucket_arn` is set). + - name: parsers + type: yaml + title: Parsers + description: >- + This option expects a list of parsers that the payload has to go through. For more information see [Parsers](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-aws-s3.html#input-aws-s3-parsers) + required: false + show_user: true + multi: false + default: | + #- multiline: + # pattern: "^- + A standard MIME type describing the format of the object data. This can be set to override the MIME type that was given to the object when it was uploaded. For example application/json. + - name: encoding + type: text + title: Encoding + multi: false + required: false + show_user: false + description: The file encoding to use for reading data that contains international characters. This only applies to non-JSON logs. + - name: expand_event_list_from_field + type: text + title: Expand Event List from Field + multi: false + required: false + show_user: false + description: >- + If the fileset using this input expects to receive multiple messages bundled under a specific field then the config option expand_event_list_from_field value can be assigned the name of the field. This setting will be able to split the messages under the group value into separate events. For example, CloudTrail logs are in JSON format and events are found under the JSON object "Records". + - name: file_selectors + type: yaml + title: File Selectors + multi: true + required: false + show_user: false + description: >- + If the SQS queue will have events that correspond to files that this integration shouldn’t process file_selectors can be used to limit the files that are downloaded. This is a list of selectors which are made up of regex and expand_event_list_from_field options. The regex should match the S3 object key in the SQS message, and the optional expand_event_list_from_field is the same as the global setting. If file_selectors is given, then any global expand_event_list_from_field value is ignored in favor of the ones specified in the file_selectors. Regex syntax is the same as the Go language. Files that don’t match one of the regexes won’t be processed. content_type, parsers, include_s3_metadata,max_bytes, buffer_size, and encoding may also be set for each file selector. + - name: fips_enabled + type: bool + title: Enable S3 FIPS + default: false + multi: false + required: false + show_user: false + description: Enabling this option changes the service name from `s3` to `s3-fips` for connecting to the correct service endpoint. + - name: include_s3_metadata + type: text + title: Include S3 Metadata + multi: true + required: false + show_user: false + description: >- + This input can include S3 object metadata in the generated events for use in follow-on processing. You must specify the list of keys to include. By default none are included. If the key exists in the S3 response then it will be included in the event as aws.s3.metadata. where the key name as been normalized to all lowercase. + - name: max_bytes + type: text + title: Max Bytes + default: 10MiB + multi: false + required: false + show_user: false + description: The maximum number of bytes that a single log message can have. All bytes after max_bytes are discarded and not sent. This setting is especially useful for multiline log messages, which can get large. This only applies to non-JSON logs. + - name: max_number_of_messages + type: integer + title: Maximum Concurrent SQS Messages + description: The maximum number of SQS messages that can be inflight at any time. + default: 5 + required: false + show_user: false + - name: non_aws_bucket_name + type: text + title: Non AWS Bucket Name + multi: false + required: false + show_user: false + description: Name of the S3 bucket that will be polled for list operation. Required for 3rd party S3 compatible services. (Required when queue_url and bucket_arn are not set). + - name: path_style + type: text + title: Path Style + multi: false + required: false + show_user: false + description: >- + Enabling this option sets the bucket name as a path in the API call instead of a subdomain. When enabled https://.s3...com becomes https://s3...com/. This is only supported with 3rd party S3 providers. AWS does not support path style. + - name: provider + type: text + title: Provider Name + multi: false + required: false + show_user: false + description: Name of the 3rd party S3 bucket provider like backblaze or GCP. + - name: sqs.max_receive_count + type: integer + title: SQS Message Maximum Receive Count + multi: false + required: false + show_user: false + default: 5 + description: The maximum number of times a SQS message should be received (retried) before deleting it. This feature prevents poison-pill messages (messages that can be received but can’t be processed) from consuming resources. + - name: sqs.wait_time + type: text + title: SQS Maximum Wait Time + multi: false + required: false + show_user: false + default: 20s + description: >- + The maximum duration that an SQS `ReceiveMessage` call should wait for a message to arrive in the queue before returning. The maximum value is `20s`. + - name: visibility_timeout + type: text + title: Visibility Timeout + multi: false + required: false + show_user: false + description: The duration that the received messages are hidden from subsequent retrieve requests after being retrieved by a ReceiveMessage request. The maximum is 12 hours. \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/azure_blob_storage_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/azure_blob_storage_manifest.yml.njk new file mode 100644 index 0000000000000..897a6a043f86f --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/azure_blob_storage_manifest.yml.njk @@ -0,0 +1,74 @@ +- input: azure-blob-storage + template_path: azure-blob-storage.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: storage_url + type: text + title: Storage URL + description: >- + Use this attribute to specify a custom storage URL if required. By default it points to azure cloud storage. Only use this if there is a specific need to connect to a different environment where blob storage is available. + URL format : {{protocol}}://{{account_name}}.{{storage_uri}}. + required: false + show_user: false + - name: number_of_workers + type: integer + title: Maximum number of workers + multi: false + required: false + show_user: true + default: 3 + description: Determines how many workers are spawned per container. + - name: poll + type: bool + title: Polling + multi: false + required: false + show_user: true + default: true + description: Determines if the container will be continuously polled for new documents. + - name: poll_interval + type: text + title: Polling interval + multi: false + required: false + show_user: true + default: 15s + description: Determines the time interval between polling operations. + - name: containers + type: yaml + title: Containers + description: "This attribute contains the details about a specific container like, name, number_of_workers, poll, poll_interval etc. \nThe attribute 'name' is specific to a container as it describes the container name, while the fields number_of_workers, poll, poll_interval can exist both at the container level and at the global level. \nIf you have already defined the attributes globally, then you can only specify the container name in this yaml config. \nIf you want to override any specific attribute for a container, then, you can define it here. \nAny attribute defined in the yaml will override the global definitions. Please see the relevant [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-azure-blob-storage.html#attrib-containers) for further information.\n" + required: true + show_user: true + default: | + - name: azure-container1 + max_workers: 3 + poll: true + poll_interval: 15s + #- name: azure-container2 + # max_workers: 3 + # poll: true + # poll_interval: 10s + - name: file_selectors + type: yaml + title: File Selectors + multi: false + required: false + show_user: false + default: | + # - regex: "event/" + description: "If the container will have events that correspond to files that this integration shouldn’t process, file_selectors can be used to limit the files that are downloaded. This is a list of selectors which is made up of regex patters. \nThe regex should match the container filepath. Regexes use [RE2 syntax](https://pkg.go.dev/regexp/syntax). Files that don’t match one of the regexes will not be processed.\n" + - name: timestamp_epoch + type: integer + title: Timestamp Epoch + multi: false + required: false + show_user: false + - name: expand_event_list_from_field + type: text + title: Expand Event List From Field + multi: false + required: false + show_user: false + description: "If the file-set using this input expects to receive multiple messages bundled under a specific field or an array of objects then the config option for 'expand_event_list_from_field' can be specified. \nThis setting will be able to split the messages under the group value into separate events. This can be specified at the global level or at the container level.\nFor more info please refer to the [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-azure-blob-storage.html#attrib-expand_event_list_from_field).\n" \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/azure_eventhub_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/azure_eventhub_manifest.yml.njk new file mode 100644 index 0000000000000..feac0ec87759f --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/azure_eventhub_manifest.yml.njk @@ -0,0 +1,74 @@ +- input: azure-eventhub + template_path: azure-eventhub.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: eventhub + type: text + title: Event Hub + multi: false + required: true + show_user: true + description: >- + Elastic recommends using one event hub for each integration. Visit [Create an event hub](https://docs.elastic.co/integrations/azure#create-an-event-hub) to learn more. Use event hub names up to 30 characters long to avoid compatibility issues. + - name: connection_string + type: text + title: Connection String + multi: false + required: true + show_user: true + description: >- + The connection string required to communicate with Event Hubs. See [Get an Event Hubs connection string](https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-get-connection-string) to learn more. + - name: storage_account + type: text + title: Storage Account + multi: false + required: true + show_user: true + description: >- + The name of the storage account where the consumer group's state/offsets will be stored and updated. + - name: storage_account_key + type: text + title: Storage Account Key + multi: false + required: true + show_user: true + description: >- + The storage account key, this key will be used to authorize access to data in your storage account. + - name: consumer_group + type: text + title: Consumer Group + multi: false + required: true + show_user: true + default: $Default + - name: resource_manager_endpoint + type: text + title: Resource Manager Endpoint + multi: false + required: false + show_user: false + - name: storage_account_container + type: text + title: Storage Account Container + multi: false + required: false + show_user: false + description: >- + The storage account container where the integration stores the checkpoint data for the consumer group. It is an advanced option to use with extreme care. You MUST use a dedicated storage account container for each Azure log type (activity, sign-in, audit logs, and others). DO NOT REUSE the same container name for more than one Azure log type. See [Container Names](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names) for details on naming rules from Microsoft. The integration generates a default container name if not specified. + - name: sanitize_newlines + type: bool + title: Sanitizes New Lines + description: Removes new lines in logs to ensure proper formatting of JSON data and avoid parsing issues during processing. + multi: false + required: false + show_user: false + default: false + - name: sanitize_singlequotes + required: true + show_user: false + title: Sanitizes Single Quotes + description: Replaces single quotes with double quotes (single quotes inside double quotes are omitted) in logs to ensure proper formatting of JSON data and avoid parsing issues during processing. + type: bool + multi: false + default: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/cloudfoundry_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/cloudfoundry_manifest.yml.njk new file mode 100644 index 0000000000000..b8e85c57c52d1 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/cloudfoundry_manifest.yml.njk @@ -0,0 +1,101 @@ +- input: cloudfoundry + template_path: cloudfoundry.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: api_address + type: text + title: API Address + multi: false + required: true + show_user: true + default: "http://api.bosh-lite.com" + description: The URL of the Cloud Foundry API. + - name: client_id + type: text + title: Client ID + multi: false + required: true + show_user: true + description: Client ID to authenticate with Cloud Foundry. + - name: client_secret + type: text + title: Client Secret + multi: false + required: true + show_user: true + description: Client Secret to authenticate with Cloud Foundry. + - name: shard_id + type: text + title: Shard ID + required: false + show_user: false + description: Shard ID for the connection with Cloud Foundry. Use the same ID across multiple filebeat to shard the load of events. Default: "(generated UUID)". + - name: version + type: text + title: Cloud Foundry API Version + required: false + show_user: false + description: Consumer API version to connect with Cloud Foundry to collect events. Use v1 to collect events using Doppler/Traffic Control. Use v2 to collect events from the RLP Gateway. Default: "v1". + - name: doppler_address + type: text + title: Doppler Address + required: false + show_user: false + description: The URL of the Cloud Foundry Doppler Websocket. Optional. Default: "(value from ${api_address}/v2/info)". + - name: uaa_address + type: text + title: UAA Address + required: false + show_user: false + description: The URL of the Cloud Foundry UAA API. Optional. Default: "(value from ${api_address}/v2/info)". + - name: rlp_address + type: text + title: RLP Address + required: false + show_user: false + description: The URL of the Cloud Foundry RLP Gateway. Optional. Default: "(log-stream subdomain under the same domain as api_server)". + - name: custom + type: yaml + title: Additional Log Configuration Options + description: > + Configuration options that can be used to further change input configuration. Check the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html) for more information. + required: false + show_user: false + default: | + #recursive_glob.enabled: true + #encoding: plain + harvester_buffer_size: 16384 + max_bytes: 10485760 + # json.keys_under_root: false + # json.add_error_key: false + # json.message_key: message + # json.overwrite_keys: false + # json.expand_keys: false + # json.document_id: "" + # json.ignore_decoding_error: false + # multiline.type: pattern + # multiline.pattern: "^{" + # multiline.negate: true + # multiline.match: after + # multiline.max_lines: 500 + # multiline.timeout: 5s + # multiline.flush_pattern: "" + # exclude_lines: ['^DBG'] + # include_lines: ['^ERR', '^WARN'] + # scan_frequency: 10s + # harvester_limit: 0 + # tail_files: false + # backoff: 1s + # max_backoff: 10s + # backoff_factor: 2 + # close_inactive: 5m + # close_renamed: false + # close_removed: true + # close_eof: false + # close_timeout: 0 + # clean_removed: true + # clean_inactive: 0 + # ignore_older: 0 + # max_bytes: 10485760 + # symlinks: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/common_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/common_manifest.yml.njk new file mode 100644 index 0000000000000..95b0dbc37b3cf --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/common_manifest.yml.njk @@ -0,0 +1,25 @@ + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - {{ package_name }}-{{ data_stream_name }} + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/data_stream.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/data_stream.yml.njk new file mode 100644 index 0000000000000..e90bdd91f69e4 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/data_stream.yml.njk @@ -0,0 +1,4 @@ +title: {{ title }} +type: logs +streams:{% for data_stream in data_streams %} +{{ data_stream | indent(2, true) }}{% endfor %} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/filestream_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/filestream_manifest.yml.njk new file mode 100644 index 0000000000000..0884b55123850 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/filestream_manifest.yml.njk @@ -0,0 +1,60 @@ +- input: filestream + template_path: filestream.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + default: + - '/test/path' + description: The full path to the related log file. + - name: exclude_files + type: text + title: Exclude Files + description: A list of regular expressions to match the files that you want Filebeat to ignore. + required: false + show_user: true + default: + - '\.gz$' + - name: custom + type: yaml + title: Additional Filestream Configuration Options + required: false + show_user: false + description: >- + Configuration options that can be used to further change input configuration. Check the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-filestream.html) for more information. + default: |- + #encoding: plain + prospector.scanner.recursive_glob: true + #prospector.scanner.symlinks: true + #prospector.scanner.include_files: [''] + #prospector.scanner.resend_on_touch: false + #prospector.scanner.check_interval: 10s + #prospector.scanner.fingerprint.enabled: false + #prospector.scanner.fingerprint.offset: 0 + #prospector.scanner.fingerprint.length: 1024 + #ignore_older: 0 + #ignore_inactive: '' + #close.on_state_change.inactive: 5m + #close.on_state_change.renamed: false + #close.on_state_change.removed: false + #close.reader.on_eof: false + #close.reader.after_interval: 0 + #clean_inactive: 0 + #clean_removed: true + #backoff.init: 2s + #backoff.max: 10s + #file_identity.native: ~ + #file_identity.path: '' + #file_identity.inode_marker.path: '' + #file_identity.fingerprint: ~ + #rotation.external.strategy.copytruncate.suffix_regex: '\.\d$' + #rotation.external.strategy.copytruncate.dateformat: '-20060102' + #include_lines: ['sometext'] + #exclude_lines: ['^DBG'] + #buffer_size: 16384 + #message_max_bytes: 1048576 \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/gcp_pubsub_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/gcp_pubsub_manifest.yml.njk new file mode 100644 index 0000000000000..920450fd7b911 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/gcp_pubsub_manifest.yml.njk @@ -0,0 +1,64 @@ +- input: gcp-pubsub + template_path: gcp-pubsub.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: project_id + type: text + title: Project ID + multi: false + required: true + show_user: true + - name: topic + type: text + title: Topic + multi: false + required: true + show_user: true + - name: subscription_name + type: text + title: Subscription Name + multi: false + required: true + show_user: true + - name: credentials_file + type: text + title: Credentials File + multi: false + required: false + show_user: true + description: Path to a JSON file containing the credentials and key used to subscribe. + - name: credentials_json + type: text + title: Credentials JSON + multi: false + required: false + show_user: true + description: JSON blob containing the credentials and key used to subscribe. + - name: subscription_create + type: bool + title: Subscription Create + description: If true, the integration will create the subscription on start. + multi: false + required: false + show_user: true + - name: subscription_num_goroutines + type: text + title: Subscription Num Goroutines + description: Number of goroutines created to read from the subscription. This does not limit the number of messages that can be processed concurrently or the maximum number of goroutines the input will create. + multi: false + required: false + show_user: false + - name: subscription_max_outstanding_messages + type: text + title: Subscription Max Outstanding Messages + description: The maximum number of unprocessed messages (unacknowledged but not yet expired). If the value is negative, then there will be no limit on the number of unprocessed messages. Default is 1000. + multi: false + required: false + show_user: false + - name: alternative_host + type: text + title: Alternative host + multi: false + required: false + show_user: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/gcs_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/gcs_manifest.yml.njk new file mode 100644 index 0000000000000..4beef9fc5f439 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/gcs_manifest.yml.njk @@ -0,0 +1,106 @@ +- input: gcs + template_path: gcs.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: project_id + type: text + title: Project ID + description: >- + This attribute is required for various internal operations with respect to authentication, creating storage clients and logging which are used internally for various processing purposes. + multi: false + required: true + show_user: true + default: my-project-id + - name: service_account_key + type: password + title: Service Account Key + description: >- + This attribute contains the json service account credentials string, which can be generated from the google cloud console, ref[Service Account Keys](https://cloud.google.com/iam/docs/creating-managing-service-account-keys). + Required if a Service Account File is not provided. + multi: false + required: false + show_user: true + - name: service_account_file + type: text + title: Service Account File + description: >- + This attribute contains the service account credentials file, which can be generated from the google cloud console, ref [Service Account Keys](https://cloud.google.com/iam/docs/creating-managing-service-account-keys). + Required if a Service Account Key is not provided. + multi: false + required: false + show_user: true + - name: number_of_workers + type: integer + title: Maximum number of workers + multi: false + required: false + show_user: true + default: 3 + description: Determines how many workers are spawned per bucket. + - name: poll + type: bool + title: Polling + multi: false + required: false + show_user: true + default: true + description: Determines if the bucket will be continuously polled for new documents. + - name: poll_interval + type: text + title: Polling interval + multi: false + required: false + show_user: true + default: 15s + description: Determines the time interval between polling operations. + - name: bucket_timeout + type: text + title: Bucket Timeout + multi: false + required: false + show_user: true + default: 120s + description: Defines the maximum time that the sdk will wait for a bucket api response before timing out. Valid time units are ns, us, ms, s, m, h. + - name: buckets + type: yaml + title: Buckets + description: "This attribute contains the details about a specific bucket like, name, number_of_workers, poll, poll_interval and bucket_timeout. The attribute 'name' is specific to a bucket as it describes the bucket name, while the fields number_of_workers, poll, poll_interval and bucket_timeout can exist both at the bucket level and at the global level. If you have already defined the attributes globally, then you can only specify the name in this yaml config. If you want to override any specific attribute for a specific bucket, then, you can define it here. Any attribute defined in the yaml will override the global definitions. Please see the relevant [Documentation](https://www.elastic.co/guide/en/beats/filebeat/8.5/filebeat-input-gcs.html#attrib-buckets) for further information.\n" + required: true + show_user: true + default: >- + # You can define as many buckets as you want here. + + - name: logs + - name: logs_2 + + # The config below is an example of how to override the global config. + + #- name: event_logs_3 + # number_of_workers: 3 + # poll: true + # poll_interval: 10s + # bucket_timeout: 30s + - name: file_selectors + type: yaml + title: File Selectors + multi: false + required: false + show_user: false + default: >- + # - regex: "event/" + description: "If the GCS bucket will have events that correspond to files that this integration shouldn’t process, file_selectors can be used to limit the files that are downloaded. This is a list of selectors which is made up of regex patters. \nThe regex should match the GCS bucket filepath. Regexes use [RE2 syntax](https://pkg.go.dev/regexp/syntax). Files that don’t match one of the regexes will not be processed.\n" + - name: timestamp_epoch + type: integer + title: Timestamp Epoch + multi: false + required: false + show_user: false + description: Defines the epoch time in seconds, which is used to filter out objects/files that are older than the specified timestamp. + - name: alternative_host + type: text + title: Alternative Host + description: Used to override the default host for the storage client (default is storage.googleapis.com) + required: false + multi: false + show_user: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/http_endpoint_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/http_endpoint_manifest.yml.njk new file mode 100644 index 0000000000000..1c75f6f337806 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/http_endpoint_manifest.yml.njk @@ -0,0 +1,133 @@ +- input: http_endpoint + template_path: http_endpoint.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: listen_address + type: text + title: Listen Address + description: | + Bind address for the HTTP listener. Use 0.0.0.0 to listen on all interfaces. + required: true + show_user: true + default: localhost + - name: listen_port + type: text + title: Listen port + description: | + Bind port for the listener. + required: true + show_user: true + default: 8080 + - name: url + type: text + title: URL + description: This options specific which URL path to accept requests on. Defaults to /. + required: false + show_user: true + - name: data_stream.dataset + type: text + title: Dataset name + description: | + Dataset to write data to. Changing the dataset will send the data to a different index. You can't use `-` in the name of a dataset and only valid characters for [Elasticsearch index names](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html). + default: http_endpoint.generic + required: true + show_user: true + - name: pipeline + type: text + title: Ingest Pipeline + description: | + The Ingest Node pipeline ID to be used by the integration. + required: false + show_user: true + - name: preserve_original_event + type: bool + title: Preserve Original Event + description: This option copies the raw unmodified body of the incoming request to the event.original field as a string before sending the event to Elasticsearch. + required: false + show_user: true + - name: prefix + type: text + title: Prefix + description: This option specifies which prefix field the incoming request will be mapped to. + required: false + show_user: false + - name: basic_auth + type: bool + title: Basic Auth + description: Enables or disables HTTP basic auth for each incoming request. If enabled then username and password will also need to be configured. + required: false + show_user: false + - name: username + type: text + title: Username + description: If basic_auth is enabled, this is the username used for authentication against the HTTP listener. Requires password to also be set. + required: false + show_user: false + - name: password + type: password + title: Password + description: If basic_auth is enabled, this is the password used for authentication against the HTTP listener. Requires username to also be set. + required: false + show_user: false + - name: secret_header + type: text + title: Secret Header + description: The header to check for a specific value specified by secret.value. Certain webhooks provide the possibility to include a special header and secret to identify the source. + required: false + show_user: false + - name: secret_value + type: password + title: Secret Value + description: The secret stored in the header name specified by secret.header. Certain webhooks provide the possibility to include a special header and secret to identify the source. + required: false + show_user: false + - name: hmac_header + type: text + title: HMAC Header + description: The name of the header that contains the HMAC signature, for example X-Dropbox-Signature, X-Hub-Signature-256, etc. + required: false + show_user: false + - name: hmac_key + type: password + title: HMAC Key + description: The secret key used to calculate the HMAC signature. Typically, the webhook sender provides this value. + required: false + show_user: false + - name: hmac_type + type: text + title: HMAC Type + description: The hash algorithm to use for the HMAC comparison. At this time the only valid values are sha256 or sha1. + required: false + show_user: false + - name: hmac_prefix + type: text + title: HMAC Prefix + description: The prefix for the signature. Certain webhooks prefix the HMAC signature with a value, for example sha256=. + required: false + show_user: false + - name: content_type + type: text + title: Content Type + description: By default the input expects the incoming POST to include a Content-Type of application/json to try to enforce the incoming data to be valid JSON. In certain scenarios when the source of the request is not able to do that, it can be overwritten with another value or set to null. + required: false + show_user: false + - name: response_code + type: text + title: Response Code + description: The HTTP response code returned upon success. Should be in the 2XX range. + required: false + show_user: false + - name: response_body + type: text + title: Response Body + description: The response body returned upon success. Should be a single line JSON string. + required: false + show_user: false + - name: include_headers + type: text + title: Include Headers + description: This options specifies a list of HTTP headers that should be copied from the incoming request and included in the document. All configured headers will always be canonicalized to match the headers of the incoming request. For example, ["content-type"] will become ["Content-Type"] when the filebeat is running. + multi: true + required: false + show_user: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/journald_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/journald_manifest.yml.njk new file mode 100644 index 0000000000000..eef7588f18def --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/journald_manifest.yml.njk @@ -0,0 +1,77 @@ +- input: journald + template_path: journald.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: include_matches + type: text + title: Include Matches + multi: true + show_user: true + description: >- + A list of filter expressions used to select the logs to read (e.g. `_SYSTEMD_UNIT=vault.service`). Defaults to all logs. See [include_matches](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-journald.html#filebeat-input-journald-include-matches) for details. + - name: backoff + type: text + title: Backoff Duration + multi: false + show_user: false + default: "1s" + description: >- + The number of seconds to wait before trying to read again from journals. + - name: max_backoff + type: text + title: Max Backoff Duration + multi: false + show_user: false + default: "60s" + description: >- + The maximum number of seconds to wait before attempting to read again from journals. + - name: seek + type: text + title: Start Position + multi: false + show_user: false + description: >- + The position to start reading the journal from. See [seek](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-journald.html#filebeat-input-journald-seek) for details. + - name: cursor_seek_fallback + type: text + title: Start Position Fallback + multi: false + show_user: false + description: >- + The position to start reading the journal from if no cursor information is available. See [cursor_seek_fallback](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-journald.html#filebeat-input-journald-cursor_seek_fallback) for details. + - name: since + type: text + title: Start Since + multi: false + show_user: false + description: >- + A time offset from the current time to start reading from. Example: "-24h" + - name: units + type: text + title: Units + multi: true + show_user: false + description: >- + Iterate only the entries of the units specified in this option. The iterated entries include messages from the units, messages about the units by authorized daemons and coredumps. However, it does not match systemd user units. + - name: syslog_identifiers + type: text + title: Syslog Identifiers + multi: true + show_user: false + description: >- + Read only the entries with the selected syslog identifiers. + - name: transports + type: text + title: Included Transport Types + multi: true + show_user: false + description: >- + Collect the messages using the specified transports. See [transports](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-journald.html#filebeat-input-journald-transports) for more details. + - name: paths + type: text + title: Journal paths + multi: true + show_user: false + description: >- + List of journals to read from. Defaults to the system journal. diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/kafka_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/kafka_manifest.yml.njk new file mode 100644 index 0000000000000..7374b34906c0c --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/kafka_manifest.yml.njk @@ -0,0 +1,221 @@ +- input: kafka + template_path: kafka.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: hosts + type: text + title: Hosts + description: | + A list of Kafka bootstrapping hosts (brokers) for this cluster. + required: true + show_user: true + multi: true + - name: topics + type: text + title: Topics + description: | + A list of topics to read from. + required: true + show_user: true + multi: true + - name: data_stream.dataset + type: text + title: Dataset name + description: | + Dataset to write data to. Changing the dataset will send the data to a different index. You can't use `-` in the name of a dataset and only valid characters for [Elasticsearch index names](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html). + default: kafka_log.generic + required: true + show_user: true + - name: pipeline + type: text + title: Ingest Pipeline + description: | + The Ingest Node pipeline ID to be used by the integration. + required: false + show_user: true + - name: group_id + type: text + title: Group ID + description: The Kafka consumer group id. + required: true + show_user: true + - name: client_id + type: text + title: Client ID + description: The Kafka client id (optional). + required: false + show_user: true + - name: version + type: text + title: Version + description: The version of the Kafka protocol to use (defaults to "1.0.0"). + required: false + show_user: true + - name: expand_event_list_from_field + type: text + title: Expand Event List from Field + description: Split a field that contains an array of JSON objects, the value would be the name of this field. + required: false + show_user: true + - name: parsers + type: yaml + title: Parsers + description: | + This option expects a list of parsers that the payload has to go through. For more information see [Parsers](https://www.elastic.co/guide/en/beats/filebeat/8.0/filebeat-input-kafka.html#_parsers_2) + required: false + show_user: true + multi: false + default: | + #- ndjson: + # keys_under_root: true + # message_key: msg + #- multiline: + # type: counter + # lines_count: 3 + - name: username + type: text + title: Username + description: Username used for SASL authentication. + required: false + show_user: true + - name: password + type: password + title: Password + description: Password used for SASL authentication. + required: false + show_user: true + - name: kerberos_enabled + type: bool + title: Kerberos Enabled + description: The enabled setting can be used to enable the Kerberos configuration by setting it to true. The default value is false. + required: false + show_user: false + - name: kerberos_auth_type + type: text + title: Kerberos Auth Type + description: | + There are two options to authenticate with Kerberos KDC: password and keytab. + Password expects the principal name and its password. When choosing keytab, you have to specify a principal name and a path to a keytab. The keytab must contain the keys of the selected principal. Otherwise, authentication will fail. + required: false + show_user: false + - name: kerberos_config_path + type: text + title: Kerberos Config Path + description: You need to set the path to the krb5.conf, so Elastic Agent can find the Kerberos KDC to retrieve a ticket. + required: false + show_user: false + - name: kerberos_username + type: text + title: Kerberos Username + description: Name of the principal used to connect to the output. + required: false + show_user: false + - name: kerberos_password + type: password + title: Kerberos Password + description: If you configured password for Auth Type, you have to provide a password for the selected principal. + required: false + show_user: false + - name: kerberos_keytab + type: text + title: Kerberos Keytab + description: If you configured keytab for Auth Type, you have to provide the path to the keytab of the selected principal. + required: false + show_user: false + - name: kerberos_service_name + type: text + title: Kerberos Service Name + description: This option can only be configured for Kafka. It is the name of the Kafka service, usually "kafka". + required: false + show_user: false + - name: kerberos_realm + type: text + title: Kerberos Realm + description: Name of the realm where the output resides. + required: false + show_user: false + - name: kerberos_enable_krb5_fast + type: bool + title: Kerberos KRB5 Fast + description: Enable Kerberos FAST authentication. This may conflict with some Active Directory installations. The default is false. + required: false + show_user: false + - name: initial_offset + type: text + title: Initial Offset + description: The initial offset to start reading, either "oldest" or "newest". Defaults to "oldest". + required: false + show_user: false + - name: connect_backoff + type: text + title: Connect Backoff + description: How long to wait before trying to reconnect to the kafka cluster after a fatal error. Default is 30s. + required: false + show_user: false + - name: consume_backoff + type: text + title: Consume Backoff + description: How long to wait before retrying a failed read. Default is 2s. + required: false + show_user: false + - name: max_wait_time + type: text + title: Max Wait Time + description: How long to wait for the minimum number of input bytes while reading. Default is 250ms. + required: false + show_user: false + - name: wait_close + type: text + title: Wait Close + description: When shutting down, how long to wait for in-flight messages to be delivered and acknowledged. + required: false + show_user: false + - name: isolation_level + type: text + title: Wait Close + description: This configures the Kafka group isolation level, supports the values "read_uncommitted" which returns all messages in the message channel and "read_committed" which hides messages that are part of an aborted transaction. The default is "read_uncommitted". + required: false + show_user: false + - name: fetch_min + type: text + title: Fetch Min + description: The minimum number of bytes to wait for. Defaults to 1. + required: false + show_user: false + - name: fetch_default + type: text + title: Fetch Default + description: The default number of bytes to read per request. Defaults to 1MB. + required: false + show_user: false + - name: fetch_max + type: text + title: Fetch Max + description: The maximum number of bytes to read per request. Defaults to 0 (no limit). + required: false + show_user: false + - name: rebalance_strategy + type: text + title: Rebalance Strategy + description: Either "range" or "roundrobin". Defaults to "range". + required: false + show_user: false + - name: rebalance_timeout + type: text + title: Rebalance Timeout + description: How long to wait for an attempted rebalance. Defaults to 60s. + required: false + show_user: false + - name: rebalance_max_retries + type: text + title: Rebalance Max Retries + description: How many times to retry if rebalancing fails. Defaults to 4. + required: false + show_user: false + - name: rebalance_retry_backoff + type: text + title: Rebalance Retry Backoff + description: How long to wait after an unsuccessful rebalance attempt. Defaults to 2s. + required: false + show_user: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/logfile_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/logfile_manifest.yml.njk new file mode 100644 index 0000000000000..24de5572cf73d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/logfile_manifest.yml.njk @@ -0,0 +1,66 @@ +- input: logfile + template_path: logfile.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + default: + - '/test/path' + description: The full path to the related log file. + - name: exclude_files + type: text + title: Exclude Files + description: A list of regular expressions to match the files that you want Filebeat to ignore. + required: false + show_user: true + default: + - '\.gz$' + - name: custom + type: yaml + title: Additional Log Configuration Options + description: > + Configuration options that can be used to further change input configuration. Check the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html) for more information. + required: false + show_user: false + default: | + #recursive_glob.enabled: true + #encoding: plain + harvester_buffer_size: 16384 + max_bytes: 10485760 + # json.keys_under_root: false + # json.add_error_key: false + # json.message_key: message + # json.overwrite_keys: false + # json.expand_keys: false + # json.document_id: "" + # json.ignore_decoding_error: false + # multiline.type: pattern + # multiline.pattern: "^{" + # multiline.negate: true + # multiline.match: after + # multiline.max_lines: 500 + # multiline.timeout: 5s + # multiline.flush_pattern: "" + # exclude_lines: ['^DBG'] + # include_lines: ['^ERR', '^WARN'] + # scan_frequency: 10s + # harvester_limit: 0 + # tail_files: false + # backoff: 1s + # max_backoff: 10s + # backoff_factor: 2 + # close_inactive: 5m + # close_renamed: false + # close_removed: true + # close_eof: false + # close_timeout: 0 + # clean_removed: true + # clean_inactive: 0 + # ignore_older: 0 + # max_bytes: 10485760 + # symlinks: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/package_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/package_manifest.yml.njk new file mode 100644 index 0000000000000..e4beecdd132ea --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/package_manifest.yml.njk @@ -0,0 +1,28 @@ +format_version: {{ format_version }} +name: {{ package_name }} +title: {{ package_title }} +version: {{ package_version }} +description: {{ package_description }} +type: integration +categories: + - security + - iam +conditions: + kibana: + version: {{ min_version }} +icons: + - src: /img/logo.svg + title: {{ package_name }} Logo + size: 32x32 + type: image/svg+xml +policy_templates: + - name: {{ package_name }} + title: {{ package_title }} + description: {{ package_description}} + inputs: {% for input in inputs %} + - type: {{ input.type }} + title: {{ input.title }} + description: {{ input.description }} {% endfor %} +owner: + github: {{ package_owner }} + type: elastic \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/ssl_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/ssl_manifest.yml.njk new file mode 100644 index 0000000000000..0eb62ad2f5924 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/ssl_manifest.yml.njk @@ -0,0 +1,75 @@ + - name: ssl_supported_protocols + type: text + title: SSL Supported Protocols + multi: true + required: false + show_user: false + default: + - 'TLSv1.1' + - 'TLSv1.2' + - 'TLSv1.3' + description: List of allowed SSL/TLS versions. If SSL/TLS server decides for protocol versions not configure. + - name: ssl_cipher_suites + type: text + title: SSL Cipher Suites + multi: true + required: false + show_user: false + description: The list of cipher suites to use. If not specified, the default cipher suites will be used. + - name: ssl_curve_types + type: text + title: SSL Curve Types + multi: true + required: false + show_user: false + description: The list of curve types for ECDHE (Elliptic Curve Diffie-Hellman ephemeral key exchange). + - name: ssl_ca_sha256 + type: text + title: SSL SHA256 Pin + multi: true + required: false + show_user: false + description: Configure a pin that can be used to do extra validation of the verified certificate chain. + - name: ssl_certificate_authorities + type: text + title: SSL Certificate Authorities + multi: true + required: false + show_user: false + description: The list of root certificates for verifications is required. If certificate_authorities is empty or not set, the system keystore is used. Example: /etc/pki/root/ca.pem + - name: ssl_certificate + type: text + title: SSL Certificate + multi: false + required: false + show_user: false + description: Path to the SSL certificate file to be used. Example: /etc/pki/client/cert.pem + - name: ssl_certificate_key + type: text + title: SSL Certificate Key + multi: false + required: false + show_user: false + description: Path to the SSL certificate key file to be used. Example: /etc/pki/client/cert.key + - name: ssl_certificate_key_passphrase + type: text + title: SSL Certificate Key Passphrase + multi: false + required: false + show_user: false + description: The passphrase used to decrypt an encrypted key stored in the configured key file. + - name: ssl_verification_mode + type: text + title: SSL Certificate Key Passphrase + multi: false + required: false + show_user: false + default: 'full' + description: The passphrase used to decrypt an encrypted key stored in the configured key file. + - name: ssl_certificate_authority_trusted_fingerprint + type: text + title: SSL Certificate Authority Trusted Fingerprint + multi: false + required: false + show_user: false + description: A HEX encoded SHA-256 of a CA certificate. If this certificate is present in the chain during the handshake, it will be added to the certificate_authorities list and the handshake will continue normaly. \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/tcp_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/tcp_manifest.yml.njk new file mode 100644 index 0000000000000..eb2b5d27d55c9 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/tcp_manifest.yml.njk @@ -0,0 +1,57 @@ +- input: tcp + template_path: tcp.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: listen_address + type: text + title: Listen Address + description: | + Bind address for the listener. Use 0.0.0.0 to listen on all interfaces. + required: true + show_user: true + default: localhost + - name: listen_port + type: text + title: Listen port + description: | + Bind port for the listener. + required: true + show_user: true + default: 8080 + - name: max_message_size + type: text + title: Max Message Size + description: The maximum size of the message received over TCP. The default is 20MiB + required: false + show_user: false + - name: framing + type: text + title: Framing + description: Specify the framing used to split incoming events. Can be one of delimiter or rfc6587. The default is delimiter + required: false + show_user: false + - name: line_delimiter + type: text + title: Line Delimiter + description: Specify the characters used to split the incoming events. The default is \n. + required: false + show_user: false + - name: max_connections + type: text + title: Max Connections + description: The at most number of connections to accept at any given point in time. + required: false + show_user: false + - name: timeout + type: text + title: Timeout + description: The duration of inactivity before a remote connection is closed. The default is 300s. Valid time units are ns, us, ms, s, m, h. + required: false + show_user: false + - name: keep_null + type: bool + title: Keep Null Values + description: If this option is set to true, fields with null values will be published in the output document. By default, keep_null is set to false. + required: false + show_user: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/manifest/udp_manifest.yml.njk b/x-pack/plugins/integration_assistant/server/templates/manifest/udp_manifest.yml.njk new file mode 100644 index 0000000000000..9955d2222b4ba --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/manifest/udp_manifest.yml.njk @@ -0,0 +1,39 @@ +- input: udp + template_path: udp.yml.hbs + title: {{ data_stream_title }} + description: {{ data_stream_description }} + vars: + - name: listen_address + type: text + title: Listen Address + description: | + Bind address for the listener. Use 0.0.0.0 to listen on all interfaces. + required: true + show_user: true + default: localhost + - name: listen_port + type: text + title: Listen port + description: | + Bind port for the listener. + required: true + show_user: true + default: 8080 + - name: max_message_size + type: text + title: Max Message Size + description: The maximum size of the message received over TCP. The default is 20MiB + required: false + show_user: false + - name: timeout + type: text + title: Timeout + description: The duration of inactivity before a remote connection is closed. The default is 300s. Valid time units are ns, us, ms, s, m, h. + required: false + show_user: false + - name: keep_null + type: bool + title: Keep Null Values + description: If this option is set to true, fields with null values will be published in the output document. By default, keep_null is set to false. + required: false + show_user: false \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/pipeline.yml.njk b/x-pack/plugins/integration_assistant/server/templates/pipeline.yml.njk new file mode 100644 index 0000000000000..ba4bee23cf633 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/pipeline.yml.njk @@ -0,0 +1,131 @@ +--- +description: Pipeline to process {{ package_name }} {{ data_stream_name }} logs +processors: + - set: + field: ecs.version + tag: set_ecs_version + value: '{{ ecs_version }}' + - rename: + field: message + target_field: event.original + tag: rename_message + ignore_missing: true + if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + tag: remove_message + if: 'ctx.event?.original != null'{% if log_format == 'json' %} + - json: + field: event.original + tag: json_original + target_field: {{ package_name }}.{{ data_stream_name }}{% endif %} +{% for processor in processors %}{% for key, value in processor %} + {% if key == 'rename' %} + - {{ key }}: + field: {{ value.field }} + target_field: {% if value.target_field | startswith('@') %}"{{ value.target_field }}"{% else %}{{ value.target_field }}{% endif %} + ignore_missing: true{% endif %} + {% if key == 'date' %} + - {{ key }}: + field: {{ value.field }} + target_field: {% if value.target_field | startswith('@') %}"{{ value.target_field }}"{% else %}{{ value.target_field }}{% endif %} + formats: + {% for format in value.formats %} + - {{ format }} + {% endfor %} + if: "ctx.{{ value.if }} != null"{% endif %} + {% if key == 'convert' %} + - {{ key }}: + field: {{ value.field }} + target_field: {% if value.target_field | startswith('@') %}"{{ value.target_field }}"{% else %}{{ value.target_field }}{% endif %} + ignore_missing: true + ignore_failure: true + type: {{value.type}}{% endif %}{% endfor %}{% endfor %} + - script: + description: Drops null/empty values recursively. + tag: script_drop_null_empty_values + lang: painless + {% raw %}source: | + boolean dropEmptyFields(Object object) { + if (object == null || object == "") { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(value -> dropEmptyFields(value)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(value -> dropEmptyFields(value)); + return (((List) object).length == 0); + } + return false; + } + dropEmptyFields(ctx);{% endraw %} + - geoip: + field: source.ip + tag: geoip_source_ip + target_field: source.geo + ignore_missing: true + - geoip: + ignore_missing: true + database_file: GeoLite2-ASN.mmdb + field: source.ip + tag: geoip_source_asn + target_field: source.as + properties: + - asn + - organization_name + - rename: + field: source.as.asn + tag: rename_source_as_asn + target_field: source.as.number + ignore_missing: true + - rename: + field: source.as.organization_name + tag: rename_source_as_organization_name + target_field: source.as.organization.name + ignore_missing: true + - geoip: + field: destination.ip + tag: geoip_destination_ip + target_field: destination.geo + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: destination.ip + tag: geoip_destination_asn + target_field: destination.as + properties: + - asn + - organization_name + ignore_missing: true + - rename: + field: destination.as.asn + tag: rename_destination_as_asn + target_field: destination.as.number + ignore_missing: true + - rename: + field: destination.as.organization_name + tag: rename_destination_as_organization_name + target_field: destination.as.organization.name + ignore_missing: true +{% if fields_to_remove.length > 0 %} + - remove: + field: + {% for field in fields_to_remove %} + - {{ field }} + {% endfor %} + ignore_missing: true + tag: remove_fields{% endif %} + - remove: + field: event.original + tag: remove_original_event + if: ctx?.tags == null || !(ctx.tags.contains("preserve_original_event")) + ignore_failure: true + ignore_missing: true +on_failure: + - append: + field: error.message + value: '{% raw %}Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}{% endraw %}' + - set: + field: event.kind + value: pipeline_error diff --git a/x-pack/plugins/integration_assistant/server/templates/pipeline_tests/test_common_config.yml b/x-pack/plugins/integration_assistant/server/templates/pipeline_tests/test_common_config.yml new file mode 100644 index 0000000000000..772cb40587804 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/pipeline_tests/test_common_config.yml @@ -0,0 +1,3 @@ +fields: + tags: + - preserve_original_event \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/readme.md.njk b/x-pack/plugins/integration_assistant/server/templates/readme.md.njk new file mode 100644 index 0000000000000..74520da051b8b --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/readme.md.njk @@ -0,0 +1,24 @@ +# {{ package_name }} Integration + +This integration is for ingesting data from [{{ package_name }}](https://example.com/). +{% for data_stream in data_streams %} +- `{{ data_stream.name }}`: {{ data_stream.description }} +{% endfor %} +See [Link to docs](https://example.com/docs) for more information. + +## Compatibility + +Insert compatibility information here. This could for example be which versions of the product it was tested with. + +## Setup + +Insert how to configure the vendor side of the integration here, for example how to configure the API, create a syslog remote destination etc. + +## Logs +{% for data_stream in data_streams %} +### {{ data_stream.name }} + +Insert a description of the data stream here. + +{% raw %}{{fields {% endraw %}"{{ data_stream.name }}"{% raw %}}}{% endraw %} +{% endfor %} diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/docker_compose.yml.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/docker_compose.yml.njk new file mode 100644 index 0000000000000..74ebed9dd0a75 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/docker_compose.yml.njk @@ -0,0 +1,3 @@ +version: "{{ docker_compose_version }}" +services: {% for service in services %} + {{ service }}{% endfor %} \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/service_filestream.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_filestream.njk new file mode 100644 index 0000000000000..642897a0fbfea --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_filestream.njk @@ -0,0 +1,6 @@ +{{package_name}}-{{data_stream_name}}-filestream: + image: alpine + volumes: + - ./sample_logs:/sample_logs:ro + - ${SERVICE_LOGS_DIR}:/var/log + command: /bin/sh -c "cp /sample_logs/* /var/log/" \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/service_gcs.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_gcs.njk new file mode 100644 index 0000000000000..3a1010d0b0bfb --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_gcs.njk @@ -0,0 +1,7 @@ +{{package_name}}-{{data_stream_name}}-gcs: + image: fsouza/fake-gcs-server:latest + command: -host=0.0.0.0 -public-host=elastic-package-service_{{package_name}}-{{data_stream_name}}-gcs_1 -port=4443 -scheme=http + volumes: + - ./sample_logs:/data + ports: + - 4443/tcp \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/service_logfile.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_logfile.njk new file mode 100644 index 0000000000000..1393ef7cc1098 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_logfile.njk @@ -0,0 +1,6 @@ +{{package_name}}-{{data_stream_name}}-logfile: + image: alpine + volumes: + - ./sample_logs:/sample_logs:ro + - ${SERVICE_LOGS_DIR}:/var/log + command: /bin/sh -c "cp /sample_logs/* /var/log/" \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/service_tcp.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_tcp.njk new file mode 100644 index 0000000000000..0267c60d00d4d --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_tcp.njk @@ -0,0 +1,6 @@ +{{package_name}}-{{data_stream_name}}-tcp: + image: docker.elastic.co/observability/stream:{{stream_version}} + volumes: + - ./sample_logs:/sample_logs:ro + entrypoint: /bin/bash + command: -c "/stream log --start-signal=SIGHUP --delay=5s --addr elastic-agent:9025 -p=tcp /sample_logs/{{package_name}}.log" \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/service_udp.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_udp.njk new file mode 100644 index 0000000000000..bdb8b5b91b8ff --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/service_udp.njk @@ -0,0 +1,6 @@ +{{package_name}}-{{data_stream_name}}-udp: + image: docker.elastic.co/observability/stream:{{stream_version}} + volumes: + - ./sample_logs:/sample_logs:ro + entrypoint: /bin/bash + command: -c "/stream log --start-signal=SIGHUP --delay=5s --addr elastic-agent:9025 -p=udp /sample_logs/{{package_name}}.log" \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/test_filestream_config.yml.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_filestream_config.yml.njk new file mode 100644 index 0000000000000..3a861dfe3b7d1 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_filestream_config.yml.njk @@ -0,0 +1,13 @@ +service: {{package_name}}-{{data_stream_name}}-filestream +input: filestream +data_stream: + vars: + preserve_original_event: true + paths: + - '{% raw %}{{SERVICE_LOGS_DIR}}{% endraw %}/test-{{package_name}}-{{data_stream_name}}.log' +numeric_keyword_fields: + - log.file.device_id + - log.file.inode + - log.file.idxhi + - log.file.idxlo + - log.file.vol \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/test_gcs_config.yml.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_gcs_config.yml.njk new file mode 100644 index 0000000000000..3bdf39c42fac7 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_gcs_config.yml.njk @@ -0,0 +1,10 @@ +service: {{package_name}}-{{data_stream_name}}-gcs +input: gcs +data_stream: + vars: + project_id: testproject + alternative_host: "http://{% raw %}{{Hostname}}:{{Port}}{% endraw %}" + buckets: | + - name: testbucket + poll: true + poll_interval: 15s diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/test_logfile_config.yml.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_logfile_config.yml.njk new file mode 100644 index 0000000000000..d6d891cd7038b --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_logfile_config.yml.njk @@ -0,0 +1,13 @@ +service: {{package_name}}-{{data_stream_name}}-logfile +input: logfile +data_stream: + vars: + preserve_original_event: true + paths: + - '{% raw %}{{SERVICE_LOGS_DIR}}{% endraw %}/{{package_name}}-{{data_stream_name}}.log' +numeric_keyword_fields: + - log.file.device_id + - log.file.inode + - log.file.idxhi + - log.file.idxlo + - log.file.vol \ No newline at end of file diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/test_tcp_config.yml.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_tcp_config.yml.njk new file mode 100644 index 0000000000000..1c5377a87e213 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_tcp_config.yml.njk @@ -0,0 +1,7 @@ +service: {{package_name}}-{{data_stream_name}}-tcp +input: tcp +data_stream: + vars: + preserve_original_event: true + listen_address: 0.0.0.0 + listen_port: 9025 diff --git a/x-pack/plugins/integration_assistant/server/templates/system_tests/test_udp_config.yml.njk b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_udp_config.yml.njk new file mode 100644 index 0000000000000..634f151b97198 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/templates/system_tests/test_udp_config.yml.njk @@ -0,0 +1,7 @@ +service: {{package_name}}-{{data_stream_name}}-udp +input: udp +data_stream: + vars: + preserve_original_event: true + listen_address: 0.0.0.0 + listen_port: 9025 diff --git a/x-pack/plugins/integration_assistant/server/types.ts b/x-pack/plugins/integration_assistant/server/types.ts new file mode 100644 index 0000000000000..54713df18b0d8 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/types.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface IntegrationAssistantPluginSetup {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface IntegrationAssistantPluginStart {} + +export interface CategorizationState { + rawSamples: string[]; + samples: string[]; + formattedSamples: string; + ecsTypes: string; + ecsCategories: string; + exAnswer: string; + lastExecutedChain: string; + packageName: string; + dataStreamName: string; + errors: object; + pipelineResults: object[]; + finalized: boolean; + reviewed: boolean; + currentPipeline: object; + currentProcessors: object[]; + invalidCategorization: object; + initialPipeline: object; + results: object; +} + +export interface EcsMappingState { + ecs: string; + lastExecutedChain: string; + rawSamples: string[]; + samples: string[]; + formattedSamples: string; + exAnswer: string; + packageName: string; + dataStreamName: string; + finalized: boolean; + currentMapping: object; + currentPipeline: object; + duplicateFields: string[]; + missingKeys: string[]; + invalidEcsFields: string[]; + results: object; + logFormat: string; + ecsVersion: string; +} + +export interface RelatedState { + rawSamples: string[]; + samples: string[]; + formattedSamples: string; + ecs: string; + exAnswer: string; + packageName: string; + dataStreamName: string; + errors: object; + pipelineResults: object[]; + finalized: boolean; + reviewed: boolean; + currentPipeline: object; + currentProcessors: object[]; + initialPipeline: object; + results: object; + lastExecutedChain: string; +} diff --git a/x-pack/plugins/integration_assistant/server/util/files.ts b/x-pack/plugins/integration_assistant/server/util/files.ts new file mode 100644 index 0000000000000..77c508f81e4b0 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/util/files.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { cpSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'fs'; +import { dirname } from 'path'; + +export function existsSync(path: string): boolean { + try { + statSync(path); + return true; + } catch (error) { + if (error.code === 'ENOENT') { + return false; + } else { + throw error; + } + } +} + +export function ensureDirSync(dirPath: string): void { + const exists = existsSync(dirPath); + if (!exists) { + mkdirSync(dirPath, { recursive: true }); + } +} + +export function createSync(path: string, content: string | Buffer): void { + writeFileSync(path, content, { encoding: 'utf-8' }); +} + +export function copySync(source: string, destination: string): void { + // Ensure the destination directory exists + mkdirSync(dirname(destination), { recursive: true }); + cpSync(source, destination, { recursive: true }); +} + +export function listDirSync(path: string): string[] { + return readdirSync(path); +} + +export function readSync(path: string): string { + return readFileSync(path, { encoding: 'utf-8' }); +} diff --git a/x-pack/plugins/integration_assistant/server/util/graph.ts b/x-pack/plugins/integration_assistant/server/util/graph.ts new file mode 100644 index 0000000000000..6149be42ce446 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/util/graph.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import type { CategorizationState, RelatedState } from '../types'; +import { testPipeline } from './pipeline'; + +export async function handleValidatePipeline( + state: CategorizationState | RelatedState, + client: IScopedClusterClient +): Promise | Partial> { + const results = await testPipeline(state.rawSamples, state.currentPipeline, client); + return { + errors: results.errors, + pipelineResults: results.pipelineResults, + lastExecutedChain: 'validate_pipeline', + }; +} diff --git a/x-pack/plugins/integration_assistant/server/util/index.ts b/x-pack/plugins/integration_assistant/server/util/index.ts new file mode 100644 index 0000000000000..b84db3eee4ee7 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/util/index.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { existsSync, ensureDirSync, createSync, copySync, listDirSync, readSync } from './files'; + +export { generateFields, mergeSamples } from './samples'; +export { deepCopy, generateUniqueId } from './util'; +export { testPipeline } from './pipeline'; +export { combineProcessors } from './processors'; diff --git a/x-pack/plugins/integration_assistant/server/util/pipeline.ts b/x-pack/plugins/integration_assistant/server/util/pipeline.ts new file mode 100644 index 0000000000000..c9c58c78b6c9a --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/util/pipeline.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; + +interface DocTemplate { + _index: string; + _id: string; + _source: { + message: string; + }; +} + +function formatSample(sample: string): DocTemplate { + const docsTemplate: DocTemplate = { + _index: 'index', + _id: 'id', + _source: { message: '' }, + }; + const formatted: DocTemplate = { ...docsTemplate }; + formatted._source.message = sample; + return formatted; +} + +export async function testPipeline( + samples: string[], + pipeline: object, + client: IScopedClusterClient +): Promise<{ pipelineResults: object[]; errors: object[] }> { + const docs = samples.map((sample) => formatSample(sample)); + const pipelineResults: object[] = []; + const errors: object[] = []; + + try { + const output = await client.asCurrentUser.ingest.simulate({ docs, pipeline }); + for (const doc of output.docs) { + if (doc.doc?._source?.error) { + errors.push(doc.doc._source.error); + } else if (doc.doc?._source) { + pipelineResults.push(doc.doc._source); + } + } + } catch (e) { + errors.push({ error: (e as Error).message }); + } + + return { pipelineResults, errors }; +} diff --git a/x-pack/plugins/integration_assistant/server/util/processors.ts b/x-pack/plugins/integration_assistant/server/util/processors.ts new file mode 100644 index 0000000000000..8c28a21b16b3c --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/util/processors.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ESProcessorItem, Pipeline } from '../../common'; +import { deepCopy } from './util'; + +export function combineProcessors( + initialPipeline: Pipeline, + processors: ESProcessorItem[] +): Pipeline { + // Create a deep copy of the initialPipeline to avoid modifying the original input + const currentPipeline = deepCopy(initialPipeline); + + // Add the new processors right before the last 2 removeprocessor in the initial pipeline. + // This is so all the processors if conditions are not accessing possibly removed fields. + const currentProcessors = currentPipeline.processors; + const combinedProcessors = [ + ...currentProcessors.slice(0, -2), + ...processors, + ...currentProcessors.slice(-2), + ]; + currentPipeline.processors = combinedProcessors; + return currentPipeline; +} diff --git a/x-pack/plugins/integration_assistant/server/util/samples.ts b/x-pack/plugins/integration_assistant/server/util/samples.ts new file mode 100644 index 0000000000000..8b306213fd3fd --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/util/samples.ts @@ -0,0 +1,207 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import * as yaml from 'js-yaml'; +import type { CategorizationState, EcsMappingState, RelatedState } from '../types'; + +interface SampleObj { + [key: string]: unknown; +} + +interface NewObj { + [key: string]: { + [key: string]: SampleObj; + }; +} + +interface Field { + name: string; + type: string; + fields?: Field[]; +} + +export function modifySamples(state: EcsMappingState | CategorizationState | RelatedState) { + const modifiedSamples: string[] = []; + const rawSamples = state.rawSamples; + const packageName = state.packageName; + const dataStreamName = state.dataStreamName; + + for (const sample of rawSamples) { + const sampleObj: SampleObj = JSON.parse(sample); + const newObj: NewObj = { + [packageName]: { + [dataStreamName]: sampleObj, + }, + }; + const modifiedSample = JSON.stringify(newObj); + modifiedSamples.push(modifiedSample); + } + + return modifiedSamples; +} + +function isEmptyValue(value: unknown): boolean { + return ( + value === null || + value === undefined || + (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0) || + (Array.isArray(value) && value.length === 0) + ); +} + +function merge(target: Record, source: Record): Record { + for (const [key, sourceValue] of Object.entries(source)) { + const targetValue = target[key]; + if (Array.isArray(sourceValue)) { + // Directly assign arrays + target[key] = sourceValue; + } else if ( + typeof sourceValue === 'object' && + sourceValue !== null && + !Array.isArray(targetValue) + ) { + if (typeof targetValue !== 'object' || isEmptyValue(targetValue)) { + target[key] = merge({}, sourceValue); + } else { + target[key] = merge(targetValue, sourceValue); + } + } else if (!(key in target) || (isEmptyValue(targetValue) && !isEmptyValue(sourceValue))) { + target[key] = sourceValue; + } + } + return target; +} + +export function mergeSamples(objects: any[]): string { + let result: Record = {}; + + for (const obj of objects) { + let sample: Record = obj; + if (typeof obj === 'string') { + sample = JSON.parse(obj); + } + result = merge(result, sample); + } + + return JSON.stringify(result, null, 2); +} + +export function formatSamples(samples: string[]): string { + const formattedSamples: unknown[] = []; + + for (const sample of samples) { + const sampleObj = JSON.parse(sample); + formattedSamples.push(sampleObj); + } + + return JSON.stringify(formattedSamples, null, 2); +} + +function determineType(value: unknown): string { + if (typeof value === 'object' && value !== null) { + if (Array.isArray(value)) { + return 'group'; + } + return 'group'; + } + if (typeof value === 'string') { + return 'keyword'; + } + if (typeof value === 'boolean') { + return 'boolean'; + } + if (typeof value === 'number') { + return 'long'; + } + return 'keyword'; // Default type for null or other undetermined types +} + +function recursiveParse(obj: unknown, path: string[]): Field { + if (typeof obj === 'object' && obj !== null) { + if (Array.isArray(obj)) { + // Assume list elements are uniform and use the first element as representative + if (obj.length > 0) { + return recursiveParse(obj[0], path); + } + return { name: path[path.length - 1], type: 'group', fields: [] }; + } + const fields: Field[] = []; + for (const [key, value] of Object.entries(obj)) { + fields.push(recursiveParse(value, path.concat(key))); + } + return { name: path[path.length - 1], type: 'group', fields }; + } + return { name: path[path.length - 1], type: determineType(obj) }; +} + +export function generateFields(mergedDocs: string): string { + const ecsTopKeysSet: Set = new Set([ + '@timestamp', + 'agent', + 'as', + 'base', + 'client', + 'cloud', + 'code_signature', + 'container', + 'data_stream', + 'destination', + 'device', + 'dll', + 'dns', + 'ecs', + 'elf', + 'email', + 'error', + 'event', + 'faas', + 'file', + 'geo', + 'group', + 'hash', + 'host', + 'http', + 'interface', + 'labels', + 'log', + 'macho', + 'message', + 'network', + 'observer', + 'orchestrator', + 'organization', + 'os', + 'package', + 'pe', + 'process', + 'registry', + 'related', + 'risk', + 'rule', + 'server', + 'service', + 'source', + 'tags', + 'threat', + 'tls', + 'tracing', + 'url', + 'user', + 'user_agent', + 'vlan', + 'volume', + 'vulnerability', + 'x509', + ]); + + const doc: SampleObj = JSON.parse(mergedDocs); + const fieldsStructure: Field[] = Object.keys(doc) + .filter((key) => !ecsTopKeysSet.has(key)) + .map((key) => recursiveParse(doc[key], [key])); + + return yaml.dump(fieldsStructure, { sortKeys: false }); +} diff --git a/x-pack/plugins/integration_assistant/server/util/util.ts b/x-pack/plugins/integration_assistant/server/util/util.ts new file mode 100644 index 0000000000000..e01063540a750 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/util/util.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export function deepCopy(obj: T): T { + return JSON.parse(JSON.stringify(obj)); +} + +export function generateUniqueId() { + return `${Date.now() + Math.floor(Math.random() * 1e13)}`; +} diff --git a/x-pack/plugins/integration_assistant/tsconfig.json b/x-pack/plugins/integration_assistant/tsconfig.json new file mode 100644 index 0000000000000..67a763a73f7f3 --- /dev/null +++ b/x-pack/plugins/integration_assistant/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "index.ts", + "server/**/*.ts", + "common/**/*.ts", + "__jest__/**/*", + "../../typings/**/*" + ], + "exclude": ["target/**/*"], + "kbn_references": [ + "@kbn/core", + "@kbn/config-schema", + "@kbn/langchain", + "@kbn/core-elasticsearch-server", + "@kbn/actions-plugin", + "@kbn/data-plugin" + ] +} diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts index d1dd5febca59e..8da4c87607987 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts @@ -36,10 +36,6 @@ export const getSuggestions = async ( ? await deps.dataViews.create(dataViewSpec) : await getESQLAdHocDataview(indexPattern, deps.dataViews); - if (dataView.fields.getByName('@timestamp')?.type === 'date' && !dataViewSpec) { - dataView.timeFieldName = '@timestamp'; - } - const columns = await getESQLQueryColumns({ esqlQuery: 'esql' in query ? query.esql : '', search: deps.data.search.search, diff --git a/x-pack/plugins/lens/public/datasources/text_based/utils.ts b/x-pack/plugins/lens/public/datasources/text_based/utils.ts index 4ca9324df6fc4..9621ab8103e4a 100644 --- a/x-pack/plugins/lens/public/datasources/text_based/utils.ts +++ b/x-pack/plugins/lens/public/datasources/text_based/utils.ts @@ -88,9 +88,6 @@ export async function getStateFromAggregateQuery( const dataView = await getESQLAdHocDataview(indexPattern, dataViews); if (dataView && dataView.id) { - if (dataView?.fields?.getByName('@timestamp')?.type === 'date') { - dataView.timeFieldName = '@timestamp'; - } dataViewId = dataView?.id; indexPatternRefs = [ ...indexPatternRefs, diff --git a/x-pack/plugins/observability_solution/apm/public/hooks/use_adhoc_apm_data_view.ts b/x-pack/plugins/observability_solution/apm/public/hooks/use_adhoc_apm_data_view.ts index 68074b80ce206..918a701ea169f 100644 --- a/x-pack/plugins/observability_solution/apm/public/hooks/use_adhoc_apm_data_view.ts +++ b/x-pack/plugins/observability_solution/apm/public/hooks/use_adhoc_apm_data_view.ts @@ -29,7 +29,11 @@ export function useAdHocApmDataView() { try { const displayError = false; - return await services.dataViews.create({ title: indexPattern }, undefined, displayError); + return await services.dataViews.create( + { title: indexPattern, timeFieldName: '@timestamp' }, + undefined, + displayError + ); } catch (e) { const noDataScreen = e.message.includes('No matching indices found'); if (noDataScreen) { diff --git a/x-pack/plugins/observability_solution/infra/common/http_api/metadata_api.ts b/x-pack/plugins/observability_solution/infra/common/http_api/metadata_api.ts index df7ade50b2140..f9db4df10ed1c 100644 --- a/x-pack/plugins/observability_solution/infra/common/http_api/metadata_api.ts +++ b/x-pack/plugins/observability_solution/infra/common/http_api/metadata_api.ts @@ -49,6 +49,7 @@ export const InfraMetadataContainerRT = rt.partial({ id: rt.string, runtime: rt.string, imageName: rt.string, + image: rt.partial({ name: rt.string }), }); export const InfraMetadataInstanceRT = rt.partial({ diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.test.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.test.ts index 5c78fca3f48db..04bfdf9945ff3 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.test.ts @@ -113,6 +113,52 @@ describe('#getAllFields', () => { expect(getAllFields(result)).toStrictEqual([{ name: 'host.os.name', value: 'Ubuntu' }]); }); + it('should map metadata with nested properties with container data removing >3th level nesting', async () => { + const result = { + id: 'host1', + name: 'host1', + features: [ + { + name: 'system.core', + source: 'metrics', + }, + ], + info: { + container: { + id: '33d16f043d5f8a7dcc2f9a2164920d0d7ca4c13a9f737bff3dbedb507d954b8e', + name: 'load-generator', + image: { + name: 'ghcr.io/open-telemetry/demo:latest-loadgenerator', // accept + }, + runtime: 'docker', + network: { + ingress: { + bytes: 1410228770498, // ignore + }, + egress: { + bytes: 23527514469, // ignore + }, + }, + }, + }, + } as InfraMetadata; + expect(getAllFields(result)).toStrictEqual([ + { + name: 'container.id', + value: '33d16f043d5f8a7dcc2f9a2164920d0d7ca4c13a9f737bff3dbedb507d954b8e', + }, + { name: 'container.name', value: 'load-generator' }, + { + name: 'container.image.name', + value: 'ghcr.io/open-telemetry/demo:latest-loadgenerator', + }, + { + name: 'container.runtime', + value: 'docker', + }, + ]); + }); + it('should map metadata with partial host, agent, could data', async () => { const result: InfraMetadata = { id: 'host1', diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts index 9e339659b5824..9e99816874565 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { isPlainObject } from 'lodash'; import type { InfraMetadata } from '../../../../../common/http_api'; export interface Field { @@ -39,10 +40,17 @@ export const getAllFields = (metadata: InfraMetadata | null) => { value, }; } else { - return Object.entries(value ?? {}).map(([prop, subProp]) => ({ - name: `${category}.${property}.${prop}`, - value: subProp, - })); + return Object.entries(value ?? {}) + .map(([prop, subProp]) => { + if (!Array.isArray(subProp) && isPlainObject(subProp)) { + return { name: '', value: '' }; + } + return { + name: `${category}.${property}.${prop}`, + value: subProp, + }; + }) + .filter(({ name }) => name); } } return []; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts index e29aa4c2e1bc9..cfb4987862535 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts @@ -8,7 +8,7 @@ export type { Message, Conversation, KnowledgeBaseEntry } from './types'; export type { ConversationCreateRequest } from './types'; export { KnowledgeBaseEntryRole, MessageRole } from './types'; -export type { FunctionDefinition } from './functions/types'; +export type { FunctionDefinition, CompatibleJSONSchema } from './functions/types'; export { FunctionVisibility } from './functions/function_visibility'; export { VISUALIZE_ESQL_USER_INTENTIONS, @@ -49,3 +49,5 @@ export { concatenateChatCompletionChunks } from './utils/concatenate_chat_comple export { DEFAULT_LANGUAGE_OPTION, LANGUAGE_OPTIONS } from './ui_settings/language_options'; export { isSupportedConnectorType } from './connectors'; + +export { ShortIdTable } from './utils/short_id_table'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts index ea6c754193341..bd1a284b0d363 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts @@ -95,6 +95,7 @@ export interface KnowledgeBaseEntry { export interface UserInstruction { doc_id: string; text: string; + system?: boolean; } export type UserInstructionOrPlainText = string | UserInstruction; @@ -109,7 +110,7 @@ export interface ObservabilityAIAssistantScreenContextRequest { actions?: Array<{ name: string; description: string; parameters?: CompatibleJSONSchema }>; } -export type ScreenContextActionRespondFunction = ({}: { +export type ScreenContextActionRespondFunction = ({}: { args: TArguments; signal: AbortSignal; connectorId: string; @@ -117,7 +118,7 @@ export type ScreenContextActionRespondFunction = ({} messages: Message[]; }) => Promise; -export interface ScreenContextActionDefinition { +export interface ScreenContextActionDefinition { name: string; description: string; parameters?: CompatibleJSONSchema; @@ -137,6 +138,6 @@ export interface ObservabilityAIAssistantScreenContext { description: string; value: any; }>; - actions?: ScreenContextActionDefinition[]; + actions?: Array>; starterPrompts?: StarterPrompt[]; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/concatenate_chat_completion_chunks.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/concatenate_chat_completion_chunks.ts index 8686ff93afb34..bead0974b91a3 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/concatenate_chat_completion_chunks.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/concatenate_chat_completion_chunks.ts @@ -31,6 +31,7 @@ export const concatenateChatCompletionChunks = acc.message.content += message.content ?? ''; acc.message.function_call.name += message.function_call?.name ?? ''; acc.message.function_call.arguments += message.function_call?.arguments ?? ''; + return cloneDeep(acc); }, { @@ -43,6 +44,6 @@ export const concatenateChatCompletionChunks = }, role: MessageRole.Assistant, }, - } + } as ConcatenatedMessage ) ); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.test.ts new file mode 100644 index 0000000000000..784cf67530652 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.test.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { ShortIdTable } from './short_id_table'; + +describe('shortIdTable', () => { + it('generates at least 10k unique ids consistently', () => { + const ids = new Set(); + + const table = new ShortIdTable(); + + let i = 10_000; + while (i--) { + const id = table.take(String(i)); + ids.add(id); + } + + expect(ids.size).toBe(10_000); + }); + + it('returns the original id based on the generated id', () => { + const table = new ShortIdTable(); + + const idsByOriginal = new Map(); + + let i = 100; + while (i--) { + const id = table.take(String(i)); + idsByOriginal.set(String(i), id); + } + + expect(idsByOriginal.size).toBe(100); + + expect(() => { + Array.from(idsByOriginal.entries()).forEach(([originalId, shortId]) => { + const returnedOriginalId = table.lookup(shortId); + if (returnedOriginalId !== originalId) { + throw Error( + `Expected shortId ${shortId} to return ${originalId}, but ${returnedOriginalId} was returned instead` + ); + } + }); + }).not.toThrow(); + }); +}); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts new file mode 100644 index 0000000000000..30049452ddf51 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/short_id_table.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +const ALPHABET = 'abcdefghijklmnopqrstuvwxyz'; + +function generateShortId(size: number): string { + let id = ''; + let i = size; + while (i--) { + const index = Math.floor(Math.random() * ALPHABET.length); + id += ALPHABET[index]; + } + return id; +} + +const MAX_ATTEMPTS_AT_LENGTH = 100; + +export class ShortIdTable { + private byShortId: Map = new Map(); + private byOriginalId: Map = new Map(); + + constructor() {} + + take(originalId: string) { + if (this.byOriginalId.has(originalId)) { + return this.byOriginalId.get(originalId)!; + } + + let uniqueId: string | undefined; + let attemptsAtLength = 0; + let length = 4; + while (!uniqueId) { + const nextId = generateShortId(length); + attemptsAtLength++; + if (!this.byShortId.has(nextId)) { + uniqueId = nextId; + } else if (attemptsAtLength >= MAX_ATTEMPTS_AT_LENGTH) { + attemptsAtLength = 0; + length++; + } + } + + this.byShortId.set(uniqueId, originalId); + this.byOriginalId.set(originalId, uniqueId); + + return uniqueId; + } + + lookup(shortId: string) { + return this.byShortId.get(shortId); + } +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/throw_serialized_chat_completion_errors.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/throw_serialized_chat_completion_errors.ts index 2c23109a1bac0..e137a4cce1f75 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/throw_serialized_chat_completion_errors.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/throw_serialized_chat_completion_errors.ts @@ -21,7 +21,7 @@ export function throwSerializedChatCompletionErrors< return (source$) => source$.pipe( tap((event) => { - // de-serialise error + // de-serialize error if (event.type === StreamingChatResponseEventType.ChatCompletionError) { const code = event.error.code ?? ChatCompletionErrorCode.InternalError; const message = event.error.message; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/until_aborted.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/until_aborted.ts new file mode 100644 index 0000000000000..d5e3ff9e18bd4 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/until_aborted.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 { Observable, OperatorFunction, takeUntil } from 'rxjs'; +import { AbortError } from '@kbn/kibana-utils-plugin/common'; + +export function untilAborted(signal: AbortSignal): OperatorFunction { + return (source$) => { + const signal$ = new Observable((subscriber) => { + if (signal.aborted) { + subscriber.error(new AbortError()); + } + signal.addEventListener('abort', () => { + subscriber.error(new AbortError()); + }); + }); + + return source$.pipe(takeUntil(signal$)); + }; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx index 64ac351bad0a4..c9b0b21e70bcd 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx @@ -10,6 +10,7 @@ export interface AssistantAvatarProps { size?: keyof typeof sizeMap; children?: ReactNode; css?: React.SVGProps['css']; + className?: string; } export const sizeMap = { @@ -20,7 +21,7 @@ export const sizeMap = { xs: 16, }; -export function AssistantAvatar({ size = 's', css }: AssistantAvatarProps) { +export function AssistantAvatar({ size = 's', css, className }: AssistantAvatarProps) { const sizePx = sizeMap[size]; return ( diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts index afd776dc13990..433ca877b0f62 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts @@ -40,6 +40,7 @@ export function useAbortableAsync( if (clearValueOnNext) { setValue(undefined); + setError(undefined); } try { @@ -47,7 +48,10 @@ export function useAbortableAsync( if (isPromise(response)) { setLoading(true); response - .then(setValue) + .then((nextValue) => { + setError(undefined); + setValue(nextValue); + }) .catch((err) => { setValue(undefined); setError(err); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts index 7f0c1f8bb4c09..2e604b59fc7ab 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts @@ -5,7 +5,6 @@ * 2.0. */ import type { PluginInitializer, PluginInitializerContext } from '@kbn/core/public'; -export type { CompatibleJSONSchema } from '../common/functions/types'; import { ObservabilityAIAssistantPlugin } from './plugin'; import type { @@ -18,6 +17,7 @@ import type { ObservabilityAIAssistantChatService, RegisterRenderFunctionDefinition, RenderFunction, + DiscoveredDataset, } from './types'; export type { @@ -27,6 +27,7 @@ export type { ObservabilityAIAssistantChatService, RegisterRenderFunctionDefinition, RenderFunction, + DiscoveredDataset, }; export { aiAssistantCapabilities } from '../common/capabilities'; @@ -59,15 +60,27 @@ export { VISUALIZE_ESQL_USER_INTENTIONS, } from '../common/functions/visualize_esql'; -export { isSupportedConnectorType } from '../common'; -export { FunctionVisibility } from '../common'; +export { + isSupportedConnectorType, + FunctionVisibility, + MessageRole, + KnowledgeBaseEntryRole, + concatenateChatCompletionChunks, + StreamingChatResponseEventType, +} from '../common'; +export type { + CompatibleJSONSchema, + Conversation, + Message, + KnowledgeBaseEntry, + FunctionDefinition, + ChatCompletionChunkEvent, + ShortIdTable, +} from '../common'; export type { TelemetryEventTypeWithPayload } from './analytics'; export { ObservabilityAIAssistantTelemetryEventType } from './analytics/telemetry_event_type'; -export type { Conversation, Message, KnowledgeBaseEntry } from '../common'; -export { MessageRole, KnowledgeBaseEntryRole } from '../common'; - export { createFunctionRequestMessage } from '../common/utils/create_function_request_message'; export { createFunctionResponseMessage } from '../common/utils/create_function_response_message'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx index 4775ad1b551b1..31907f54c49bf 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx @@ -8,7 +8,10 @@ import { i18n } from '@kbn/i18n'; import { noop } from 'lodash'; import React from 'react'; import { Observable, of } from 'rxjs'; -import type { StreamingChatResponseEventWithoutError } from '../common/conversation_complete'; +import type { + ChatCompletionChunkEvent, + StreamingChatResponseEventWithoutError, +} from '../common/conversation_complete'; import { MessageRole, ScreenContextActionDefinition } from '../common/types'; import type { ObservabilityAIAssistantAPIClient } from './api'; import type { @@ -21,7 +24,7 @@ import { buildFunctionElasticsearch, buildFunctionServiceSummary } from './utils export const mockChatService: ObservabilityAIAssistantChatService = { sendAnalyticsEvent: noop, - chat: (options) => new Observable(), + chat: (options) => new Observable(), complete: (options) => new Observable(), getFunctions: () => [buildFunctionElasticsearch(), buildFunctionServiceSummary()], renderFunction: (name) => ( diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts index 421770cf415c7..4665f9b7b486b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts @@ -15,6 +15,8 @@ import { ChatCompletionError, MessageAddEvent, createInternalServerError, + createConversationNotFoundError, + StreamingChatResponseEventWithoutError, } from '../../common'; import type { ObservabilityAIAssistantChatService } from '../types'; import { complete } from './complete'; @@ -45,7 +47,7 @@ const messages: Message[] = [ const createLlmResponse = ( chunks: Array<{ content: string; function_call?: { name: string; arguments: string } }> -): StreamingChatResponseEvent[] => { +): StreamingChatResponseEventWithoutError[] => { const id = v4(); const message = chunks.reduce( (prev, current) => { @@ -61,7 +63,7 @@ const createLlmResponse = ( } ); - const events: StreamingChatResponseEvent[] = [ + const events: StreamingChatResponseEventWithoutError[] = [ ...chunks.map((msg) => ({ id, message: msg, @@ -108,20 +110,12 @@ describe('complete', () => { describe('when an error is emitted', () => { beforeEach(() => { - requestCallback.mockImplementation(() => - of({ - type: StreamingChatResponseEventType.ChatCompletionError, - error: { - message: 'Not found', - code: ChatCompletionErrorCode.NotFoundError, - }, - }) - ); + requestCallback.mockImplementation(() => throwError(() => createConversationNotFoundError())); }); it('the observable errors out', async () => { await expect(async () => await lastValueFrom(callComplete())).rejects.toThrowError( - 'Not found' + 'Conversation not found' ); await expect(async () => await lastValueFrom(callComplete())).rejects.toBeInstanceOf( diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts index 8d9efd033bad7..90a8f16639ed6 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts @@ -20,19 +20,16 @@ import { import { MessageRole, StreamingChatResponseEventType, - type BufferFlushEvent, type ConversationCreateEvent, type ConversationUpdateEvent, type Message, type MessageAddEvent, - type StreamingChatResponseEvent, type StreamingChatResponseEventWithoutError, } from '../../common'; -import { ObservabilityAIAssistantScreenContext } from '../../common/types'; +import type { ObservabilityAIAssistantScreenContext } from '../../common/types'; import { createFunctionResponseMessage } from '../../common/utils/create_function_response_message'; -import { throwSerializedChatCompletionErrors } from '../../common/utils/throw_serialized_chat_completion_errors'; import type { ObservabilityAIAssistantAPIClientRequestParamsOf } from '../api'; -import { ObservabilityAIAssistantChatService } from '../types'; +import type { ObservabilityAIAssistantChatService } from '../types'; import { createPublicFunctionResponseError } from '../utils/create_function_response_error'; export function complete( @@ -46,20 +43,14 @@ export function complete( disableFunctions, signal, responseLanguage, + instructions, }: { client: Pick; getScreenContexts: () => ObservabilityAIAssistantScreenContext[]; - connectorId: string; - conversationId?: string; - messages: Message[]; - persist: boolean; - disableFunctions: boolean; - signal: AbortSignal; - responseLanguage: string; - }, + } & Parameters[0], requestCallback: ( params: ObservabilityAIAssistantAPIClientRequestParamsOf<'POST /internal/observability_ai_assistant/chat/complete'> - ) => Observable + ) => Observable ): Observable { return new Observable((subscriber) => { const screenContexts = getScreenContexts(); @@ -75,16 +66,10 @@ export function complete( screenContexts, conversationId, responseLanguage, + instructions, }, }, - }).pipe( - filter( - (event): event is StreamingChatResponseEvent => - event.type !== StreamingChatResponseEventType.BufferFlush - ), - throwSerializedChatCompletionErrors(), - shareReplay() - ); + }).pipe(shareReplay()); const messages$ = response$.pipe( filter( @@ -148,6 +133,7 @@ export function complete( persist, responseLanguage, disableFunctions, + instructions, }, requestCallback ).subscribe(subscriber); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts index 45fa95aa72a17..db3c8b1f5bbf3 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts @@ -6,10 +6,9 @@ */ import type { AnalyticsServiceStart, HttpResponse } from '@kbn/core/public'; -import { AbortError } from '@kbn/kibana-utils-plugin/common'; import type { IncomingMessage } from 'http'; -import { pick } from 'lodash'; import { + catchError, concatMap, delay, filter, @@ -17,27 +16,30 @@ import { map, Observable, of, + OperatorFunction, scan, shareReplay, switchMap, + throwError, timestamp, } from 'rxjs'; -import { Message, MessageRole } from '../../common'; +import { ChatCompletionChunkEvent, Message, MessageRole } from '../../common'; import { - type BufferFlushEvent, StreamingChatResponseEventType, - type StreamingChatResponseEventWithoutError, + type BufferFlushEvent, type StreamingChatResponseEvent, + type StreamingChatResponseEventWithoutError, } from '../../common/conversation_complete'; -import { - FunctionRegistry, - FunctionResponse, - FunctionVisibility, -} from '../../common/functions/types'; +import { FunctionRegistry, FunctionResponse } from '../../common/functions/types'; import { filterFunctionDefinitions } from '../../common/utils/filter_function_definitions'; import { throwSerializedChatCompletionErrors } from '../../common/utils/throw_serialized_chat_completion_errors'; +import { untilAborted } from '../../common/utils/until_aborted'; import { sendEvent } from '../analytics'; -import type { ObservabilityAIAssistantAPIClient } from '../api'; +import type { + ObservabilityAIAssistantAPIClient, + ObservabilityAIAssistantAPIClientRequestParamsOf, + ObservabilityAIAssistantAPIEndpoint, +} from '../api'; import type { ChatRegistrationRenderFunction, ObservabilityAIAssistantChatService, @@ -91,6 +93,45 @@ function toObservable(response: HttpResponse) { ); } +function serialize( + signal: AbortSignal +): OperatorFunction { + return (source$) => + source$.pipe( + catchError((error) => { + if ( + 'response' in error && + 'json' in error.response && + typeof error.response.json === 'function' + ) { + const responseBodyPromise = (error.response as HttpResponse['response'])!.json(); + + return from( + responseBodyPromise.then((body: { message?: string }) => { + if (body) { + error.body = body; + if (body.message) { + error.message = body.message; + } + } + throw error; + }) + ); + } + return throwError(() => error); + }), + switchMap((readable) => toObservable(readable as HttpResponse)), + map((line) => JSON.parse(line) as StreamingChatResponseEvent | BufferFlushEvent), + filter( + (line): line is Exclude => + line.type !== StreamingChatResponseEventType.BufferFlush + ), + throwSerializedChatCompletionErrors(), + untilAborted(signal), + shareReplay() + ); +} + export async function createChatService({ analytics, signal: setupAbortSignal, @@ -130,73 +171,39 @@ export async function createChatService({ }); }; - const client: Pick = { - chat(name: string, { connectorId, messages, function: callFunctions = 'auto', signal }) { - return new Observable((subscriber) => { - const functions = getFunctions().filter((fn) => { - const visibility = fn.visibility ?? FunctionVisibility.All; - - return ( - visibility === FunctionVisibility.All || visibility === FunctionVisibility.AssistantOnly - ); - }); + function callStreamingApi( + endpoint: TEndpoint, + options: { + signal: AbortSignal; + } & ObservabilityAIAssistantAPIClientRequestParamsOf + ): Observable { + return from( + apiClient(endpoint, { + ...options, + asResponse: true, + rawResponse: true, + }) + ).pipe(serialize(options.signal)); + } - apiClient('POST /internal/observability_ai_assistant/chat', { - params: { - body: { - name, - messages, - connectorId, - functions: - callFunctions === 'none' - ? [] - : functions.map((fn) => pick(fn, 'name', 'description', 'parameters')), - }, + const client: Pick = { + chat(name: string, { connectorId, messages, functionCall, functions, signal }) { + return callStreamingApi('POST /internal/observability_ai_assistant/chat', { + params: { + body: { + name, + messages, + connectorId, + functionCall, + functions: functions ?? [], }, - signal, - asResponse: true, - rawResponse: true, - }) - .then((_response) => { - const response = _response as unknown as HttpResponse; - - const subscription = toObservable(response) - .pipe( - map((line) => JSON.parse(line) as StreamingChatResponseEvent | BufferFlushEvent), - filter( - (line): line is StreamingChatResponseEvent => - line.type !== StreamingChatResponseEventType.BufferFlush && - line.type !== StreamingChatResponseEventType.TokenCount - ), - throwSerializedChatCompletionErrors() - ) - .subscribe(subscriber); - - // if the request is aborted, convert that into state as well - signal.addEventListener('abort', () => { - subscriber.error(new AbortError()); - subscription.unsubscribe(); - }); - }) - .catch(async (err) => { - if ('response' in err) { - const body = await (err.response as HttpResponse['response'])?.json(); - err.body = body; - if (body.message) { - err.message = body.message; - } - } - throw err; - }) - .catch((err) => { - subscriber.error(err); - }); - - return subscriber; + }, + signal, }).pipe( - // make sure the request is only triggered once, - // even with multiple subscribers - shareReplay() + filter( + (line): line is ChatCompletionChunkEvent => + line.type === StreamingChatResponseEventType.ChatCompletionChunk + ) ); }, complete({ @@ -208,6 +215,7 @@ export async function createChatService({ disableFunctions, signal, responseLanguage, + instructions, }) { return complete( { @@ -220,21 +228,13 @@ export async function createChatService({ signal, client, responseLanguage, + instructions, }, ({ params }) => { - return from( - apiClient('POST /internal/observability_ai_assistant/chat/complete', { - params, - signal, - asResponse: true, - rawResponse: true, - }) - ).pipe( - map((_response) => toObservable(_response as unknown as HttpResponse)), - switchMap((response$) => response$), - map((line) => JSON.parse(line) as StreamingChatResponseEvent | BufferFlushEvent), - shareReplay() - ); + return callStreamingApi('POST /internal/observability_ai_assistant/chat/complete', { + params, + signal, + }); } ); }, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx index 6cad5a52ed2f8..d3b52f6803621 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { noop } from 'lodash'; import React from 'react'; import { Observable, of } from 'rxjs'; -import { MessageRole } from '.'; +import { ChatCompletionChunkEvent, MessageRole } from '.'; import type { StreamingChatResponseEventWithoutError } from '../common/conversation_complete'; import type { ObservabilityAIAssistantAPIClient } from './api'; import type { ObservabilityAIAssistantChatService, ObservabilityAIAssistantService } from './types'; @@ -16,7 +16,7 @@ import { buildFunctionElasticsearch, buildFunctionServiceSummary } from './utils export const createStorybookChatService = (): ObservabilityAIAssistantChatService => ({ sendAnalyticsEvent: () => {}, - chat: (options) => new Observable(), + chat: (options) => new Observable(), complete: (options) => new Observable(), getFunctions: () => [buildFunctionElasticsearch(), buildFunctionServiceSummary()], renderFunction: (name) => ( diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts index bfafbc4772462..8480af2e02327 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts @@ -9,6 +9,7 @@ import type { LicensingPluginStart } from '@kbn/licensing-plugin/public'; import type { SecurityPluginSetup, SecurityPluginStart } from '@kbn/security-plugin/public'; import type { Observable } from 'rxjs'; import type { + ChatCompletionChunkEvent, MessageAddEvent, StreamingChatResponseEventWithoutError, } from '../common/conversation_complete'; @@ -17,6 +18,7 @@ import type { Message, ObservabilityAIAssistantScreenContext, PendingMessage, + UserInstructionOrPlainText, } from '../common/types'; import type { TelemetryEventTypeWithPayload } from './analytics'; import type { ObservabilityAIAssistantAPIClient } from './api'; @@ -34,6 +36,13 @@ import { createScreenContextAction } from './utils/create_screen_context_action' export type { PendingMessage }; +export interface DiscoveredDataset { + title: string; + description: string; + indexPatterns: string[]; + columns: unknown[]; +} + export interface ObservabilityAIAssistantChatService { sendAnalyticsEvent: (event: TelemetryEventTypeWithPayload) => void; chat: ( @@ -41,19 +50,25 @@ export interface ObservabilityAIAssistantChatService { options: { messages: Message[]; connectorId: string; - function?: 'none' | 'auto'; + functions?: Array>; + functionCall?: string; signal: AbortSignal; } - ) => Observable; + ) => Observable; complete: (options: { getScreenContexts: () => ObservabilityAIAssistantScreenContext[]; conversationId?: string; connectorId: string; messages: Message[]; persist: boolean; - disableFunctions: boolean; + disableFunctions: + | boolean + | { + except: string[]; + }; signal: AbortSignal; - responseLanguage: string; + responseLanguage?: string; + instructions?: UserInstructionOrPlainText[]; }) => Observable; getFunctions: (options?: { contexts?: string[]; filter?: string }) => FunctionDefinition[]; hasFunction: (name: string) => boolean; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_screen_context_action.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_screen_context_action.ts index 3dbc4dbaf36f0..fcd6e8dd7bb80 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_screen_context_action.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_screen_context_action.ts @@ -18,11 +18,11 @@ type ReturnOf, - TResponse = ReturnOf + TRespondFunction extends ScreenContextActionRespondFunction> >( definition: TActionDefinition, - respond: ScreenContextActionRespondFunction -): ScreenContextActionDefinition { + respond: TRespondFunction +): ScreenContextActionDefinition> { return { ...definition, respond, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts index baf006844c516..c7df07dc18d2f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts @@ -5,24 +5,16 @@ * 2.0. */ -import { decodeOrThrow, jsonRt } from '@kbn/io-ts-utils'; -import { Logger } from '@kbn/logging'; import type { Serializable } from '@kbn/utility-types'; -import dedent from 'dedent'; import { encode } from 'gpt-tokenizer'; -import * as t from 'io-ts'; -import { compact, last, omit } from 'lodash'; -import { lastValueFrom, Observable } from 'rxjs'; +import { compact, last } from 'lodash'; +import { Observable } from 'rxjs'; import { FunctionRegistrationParameters } from '.'; import { MessageAddEvent } from '../../common/conversation_complete'; import { FunctionVisibility } from '../../common/functions/types'; -import { MessageRole, type Message } from '../../common/types'; -import { concatenateChatCompletionChunks } from '../../common/utils/concatenate_chat_completion_chunks'; +import { MessageRole } from '../../common/types'; import { createFunctionResponseMessage } from '../../common/utils/create_function_response_message'; -import { RecallRanking, RecallRankingEventType } from '../analytics/recall_ranking'; -import type { ObservabilityAIAssistantClient } from '../service/client'; -import { FunctionCallChatFunction } from '../service/types'; -import { parseSuggestionScores } from './parse_suggestion_scores'; +import { recallAndScore } from '../utils/recall/recall_and_score'; const MAX_TOKEN_COUNT_FOR_DATA_ON_SCREEN = 1000; @@ -70,55 +62,26 @@ export function registerContextFunction({ messages.filter((message) => message.message.role === MessageRole.User) ); - const userPrompt = userMessage?.message.content; - const queries = [{ text: userPrompt, boost: 3 }, { text: screenDescription }].filter( - ({ text }) => text - ) as Array<{ text: string; boost?: number }>; - - const suggestions = await retrieveSuggestions({ client, queries }); - if (suggestions.length === 0) { - return { content }; - } - - try { - const { relevantDocuments, scores } = await scoreSuggestions({ + const userPrompt = userMessage?.message.content!; + + const { scores, relevantDocuments, suggestions } = await recallAndScore({ + recall: client.recall, + chat, + logger: resources.logger, + userPrompt, + context: screenDescription, + messages, + signal, + analytics, + }); + + return { + content: { ...content, learnings: relevantDocuments as unknown as Serializable }, + data: { + scores, suggestions, - screenDescription, - userPrompt, - messages, - chat, - signal, - logger: resources.logger, - }); - - analytics.reportEvent(RecallRankingEventType, { - prompt: queries.map((query) => query.text).join('|'), - scoredDocuments: suggestions.map((suggestion) => { - const llmScore = scores.find((score) => score.id === suggestion.id); - return { - content: suggestion.text, - elserScore: suggestion.score ?? -1, - llmScore: llmScore ? llmScore.score : -1, - }; - }), - }); - - return { - content: { ...content, learnings: relevantDocuments as unknown as Serializable }, - data: { - scores, - suggestions, - }, - }; - } catch (error) { - return { - content: { ...content, learnings: suggestions.slice(0, 5) }, - data: { - error, - suggestions, - }, - }; - } + }, + }; } return new Observable((subscriber) => { @@ -141,146 +104,3 @@ export function registerContextFunction({ } ); } - -async function retrieveSuggestions({ - queries, - client, -}: { - queries: Array<{ text: string; boost?: number }>; - client: ObservabilityAIAssistantClient; -}) { - const recallResponse = await client.recall({ - queries, - }); - - return recallResponse.entries.map((entry) => omit(entry, 'labels', 'is_correction')); -} - -const scoreFunctionRequestRt = t.type({ - message: t.type({ - function_call: t.type({ - name: t.literal('score'), - arguments: t.string, - }), - }), -}); - -const scoreFunctionArgumentsRt = t.type({ - scores: t.string, -}); - -async function scoreSuggestions({ - suggestions, - messages, - userPrompt, - screenDescription, - chat, - signal, - logger, -}: { - suggestions: Awaited>; - messages: Message[]; - userPrompt: string | undefined; - screenDescription: string; - chat: FunctionCallChatFunction; - signal: AbortSignal; - logger: Logger; -}) { - const indexedSuggestions = suggestions.map((suggestion, index) => ({ - ...omit(suggestion, 'score'), // To not bias the LLM - id: index, - })); - - const newUserMessageContent = - dedent(`Given the following question, score the documents that are relevant to the question. on a scale from 0 to 7, - 0 being completely irrelevant, and 7 being extremely relevant. Information is relevant to the question if it helps in - answering the question. Judge it according to the following criteria: - - - The document is relevant to the question, and the rest of the conversation - - The document has information relevant to the question that is not mentioned, - or more detailed than what is available in the conversation - - The document has a high amount of information relevant to the question compared to other documents - - The document contains new information not mentioned before in the conversation - - Question: - ${userPrompt} - - Screen description: - ${screenDescription} - - Documents: - ${JSON.stringify(indexedSuggestions, null, 2)}`); - - const newUserMessage: Message = { - '@timestamp': new Date().toISOString(), - message: { - role: MessageRole.User, - content: newUserMessageContent, - }, - }; - - const scoreFunction = { - name: 'score', - description: - 'Use this function to score documents based on how relevant they are to the conversation.', - parameters: { - type: 'object', - properties: { - scores: { - description: `The document IDs and their scores, as CSV. Example: - - my_id,7 - my_other_id,3 - my_third_id,4 - `, - type: 'string', - }, - }, - required: ['score'], - } as const, - contexts: ['core'], - }; - - const response = await lastValueFrom( - chat('score_suggestions', { - messages: [...messages.slice(0, -2), newUserMessage], - functions: [scoreFunction], - functionCall: 'score', - signal, - }).pipe(concatenateChatCompletionChunks()) - ); - - const scoreFunctionRequest = decodeOrThrow(scoreFunctionRequestRt)(response); - const { scores: scoresAsString } = decodeOrThrow(jsonRt.pipe(scoreFunctionArgumentsRt))( - scoreFunctionRequest.message.function_call.arguments - ); - - const scores = parseSuggestionScores(scoresAsString).map(({ index, score }) => { - return { - id: suggestions[index].id, - score, - }; - }); - - if (scores.length === 0) { - // seemingly invalid or no scores, return all - return { relevantDocuments: suggestions, scores: [] }; - } - - const suggestionIds = suggestions.map((document) => document.id); - - const relevantDocumentIds = scores - .filter((document) => suggestionIds.includes(document.id)) // Remove hallucinated documents - .filter((document) => document.score > 4) - .sort((a, b) => b.score - a.score) - .slice(0, 5) - .map((document) => document.id); - - const relevantDocuments = suggestions.filter((suggestion) => - relevantDocumentIds.includes(suggestion.id) - ); - - logger.debug(`Relevant documents: ${JSON.stringify(relevantDocuments, null, 2)}`); - - return { relevantDocuments, scores }; -} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts index 2f32731ac3f2d..557f09784c7f9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts @@ -9,7 +9,7 @@ import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/ import type { DataViewsServerPluginStart } from '@kbn/data-views-plugin/server'; import { castArray, chunk, groupBy, uniq } from 'lodash'; import { lastValueFrom } from 'rxjs'; -import { MessageRole, type Message } from '../../../common'; +import { MessageRole, ShortIdTable, type Message } from '../../../common'; import { concatenateChatCompletionChunks } from '../../../common/utils/concatenate_chat_completion_chunks'; import { FunctionCallChatFunction } from '../../service/types'; @@ -87,8 +87,10 @@ export async function getRelevantFieldNames({ const groupedFields = groupBy(allFields, (field) => field.name); + const shortIdTable = new ShortIdTable(); + const relevantFields = await Promise.all( - chunk(fieldNames, 500).map(async (fieldsInChunk) => { + chunk(fieldNames, 250).map(async (fieldsInChunk) => { const chunkResponse$ = ( await chat('get_relevant_dataset_names', { signal, @@ -112,29 +114,31 @@ export async function getRelevantFieldNames({ role: MessageRole.User, content: `This is the list: - ${fieldsInChunk.join('\n')}`, + ${fieldsInChunk + .map((field) => JSON.stringify({ field, id: shortIdTable.take(field) })) + .join('\n')}`, }, }, ], functions: [ { - name: 'fields', - description: 'The fields you consider relevant to the conversation', + name: 'select_relevant_fields', + description: 'The IDs of the fields you consider relevant to the conversation', parameters: { type: 'object', properties: { - fields: { + fieldIds: { type: 'array', items: { type: 'string', }, }, }, - required: ['fields'], + required: ['fieldIds'], } as const, }, ], - functionCall: 'fields', + functionCall: 'select_relevant_fields', }) ).pipe(concatenateChatCompletionChunks()); @@ -143,10 +147,16 @@ export async function getRelevantFieldNames({ return chunkResponse.message?.function_call?.arguments ? ( JSON.parse(chunkResponse.message.function_call.arguments) as { - fields: string[]; + fieldIds: string[]; } - ).fields - .filter((field) => fieldsInChunk.includes(field)) + ).fieldIds + .map((fieldId) => { + const fieldName = shortIdTable.lookup(fieldId); + return fieldName ?? fieldId; + }) + .filter((fieldName) => { + return fieldsInChunk.includes(fieldName); + }) .map((field) => { const fieldDescriptors = groupedFields[field]; return `${field}:${fieldDescriptors.map((descriptor) => descriptor.type).join(',')}`; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts index 4cf8147d31c71..5b16b79bd9980 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts @@ -51,6 +51,9 @@ export const registerFunctions: RegistrationCallback = async ({ Note that ES|QL (the Elasticsearch Query Language which is a new piped language) is the preferred query language. + If you want to call a function or tool, only call it a single time per message. Wait until the function has been executed and its results + returned to you, before executing the same tool or another tool again if needed. + DO NOT UNDER ANY CIRCUMSTANCES USE ES|QL syntax (\`service.name == "foo"\`) with "kqlFilter" (\`service.name:"foo"\`). The user is able to change the language which they want you to reply in on the settings page of the AI Assistant for Observability, which can be found in the ${ @@ -63,7 +66,10 @@ export const registerFunctions: RegistrationCallback = async ({ functions.registerInstruction(({ availableFunctionNames }) => { const instructions: string[] = []; - if (availableFunctionNames.includes(GET_DATASET_INFO_FUNCTION_NAME)) { + if ( + availableFunctionNames.includes(QUERY_FUNCTION_NAME) && + availableFunctionNames.includes(GET_DATASET_INFO_FUNCTION_NAME) + ) { instructions.push(`You MUST use the "${GET_DATASET_INFO_FUNCTION_NAME}" ${ functions.hasFunction('get_apm_dataset_info') ? 'or the get_apm_dataset_info' : '' } function before calling the "${QUERY_FUNCTION_NAME}" or the "changes" functions. diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts index 41d3a6eaea5ce..f1758c1583f71 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts @@ -6,20 +6,22 @@ */ import { notImplemented } from '@hapi/boom'; import { toBooleanRt } from '@kbn/io-ts-utils'; +import { context as otelContext } from '@opentelemetry/api'; import * as t from 'io-ts'; +import { from, map } from 'rxjs'; import { Readable } from 'stream'; -import type { PluginStartContract as ActionsPluginStart } from '@kbn/actions-plugin/server'; -import { KibanaRequest } from '@kbn/core/server'; -import { context as otelContext } from '@opentelemetry/api'; import { aiAssistantSimulatedFunctionCalling } from '../..'; +import { createFunctionResponseMessage } from '../../../common/utils/create_function_response_message'; +import { withoutTokenCountEvents } from '../../../common/utils/without_token_count_events'; +import { LangTracer } from '../../service/client/instrumentation/lang_tracer'; import { flushBuffer } from '../../service/util/flush_buffer'; import { observableIntoOpenAIStream } from '../../service/util/observable_into_openai_stream'; import { observableIntoStream } from '../../service/util/observable_into_stream'; +import { withAssistantSpan } from '../../service/util/with_assistant_span'; +import { recallAndScore } from '../../utils/recall/recall_and_score'; import { createObservabilityAIAssistantServerRoute } from '../create_observability_ai_assistant_server_route'; -import { screenContextRt, messageRt, functionRt } from '../runtime_types'; +import { functionRt, messageRt, screenContextRt } from '../runtime_types'; import { ObservabilityAIAssistantRouteHandlerResources } from '../types'; -import { withAssistantSpan } from '../../service/util/with_assistant_span'; -import { LangTracer } from '../../service/client/instrumentation/lang_tracer'; const chatCompleteBaseRt = t.type({ body: t.intersection([ @@ -32,14 +34,24 @@ const chatCompleteBaseRt = t.type({ conversationId: t.string, title: t.string, responseLanguage: t.string, - disableFunctions: toBooleanRt, + disableFunctions: t.union([ + toBooleanRt, + t.type({ + except: t.array(t.string), + }), + ]), instructions: t.array( t.union([ t.string, - t.type({ - doc_id: t.string, - text: t.string, - }), + t.intersection([ + t.type({ + doc_id: t.string, + text: t.string, + }), + t.partial({ + system: t.boolean, + }), + ]), ]) ), }), @@ -67,17 +79,17 @@ const chatCompletePublicRt = t.intersection([ }), ]); -async function guardAgainstInvalidConnector({ - actions, +async function initializeChatRequest({ + context, request, - connectorId, -}: { - actions: ActionsPluginStart; - request: KibanaRequest; - connectorId: string; -}) { - return withAssistantSpan('guard_against_invalid_connector', async () => { - const actionsClient = await actions.getActionsClientWithRequest(request); + plugins: { cloud, actions }, + params: { + body: { connectorId }, + }, + service, +}: ObservabilityAIAssistantRouteHandlerResources & { params: { body: { connectorId: string } } }) { + await withAssistantSpan('guard_against_invalid_connector', async () => { + const actionsClient = await (await actions.start()).getActionsClientWithRequest(request); const connector = await actionsClient.get({ id: connectorId, @@ -86,6 +98,29 @@ async function guardAgainstInvalidConnector({ return connector; }); + + const [client, cloudStart, simulateFunctionCalling] = await Promise.all([ + service.getClient({ request }), + cloud?.start(), + (await context.core).uiSettings.client.get(aiAssistantSimulatedFunctionCalling), + ]); + + if (!client) { + throw notImplemented(); + } + + const controller = new AbortController(); + + request.events.aborted$.subscribe(() => { + controller.abort(); + }); + + return { + client, + isCloudEnabled: Boolean(cloudStart?.isCloudEnabled), + simulateFunctionCalling, + signal: controller.signal, + }; } const chatRoute = createObservabilityAIAssistantServerRoute({ @@ -107,38 +142,20 @@ const chatRoute = createObservabilityAIAssistantServerRoute({ ]), }), handler: async (resources): Promise => { - const { request, params, service, context, plugins } = resources; + const { params } = resources; const { body: { name, messages, connectorId, functions, functionCall }, } = params; - await guardAgainstInvalidConnector({ - actions: await plugins.actions.start(), - request, - connectorId, - }); - - const [client, cloudStart, simulateFunctionCalling] = await Promise.all([ - service.getClient({ request }), - resources.plugins.cloud?.start(), - (await context.core).uiSettings.client.get(aiAssistantSimulatedFunctionCalling), - ]); - - if (!client) { - throw notImplemented(); - } - - const controller = new AbortController(); - - request.events.aborted$.subscribe(() => { - controller.abort(); - }); + const { client, simulateFunctionCalling, signal, isCloudEnabled } = await initializeChatRequest( + resources + ); const response$ = client.chat(name, { messages, connectorId, - signal: controller.signal, + signal, ...(functions.length ? { functions, @@ -149,7 +166,65 @@ const chatRoute = createObservabilityAIAssistantServerRoute({ tracer: new LangTracer(otelContext.active()), }); - return observableIntoStream(response$.pipe(flushBuffer(!!cloudStart?.isCloudEnabled))); + return observableIntoStream(response$.pipe(flushBuffer(isCloudEnabled))); + }, +}); + +const chatRecallRoute = createObservabilityAIAssistantServerRoute({ + endpoint: 'POST /internal/observability_ai_assistant/chat/recall', + options: { + tags: ['access:ai_assistant'], + }, + params: t.type({ + body: t.type({ + prompt: t.string, + context: t.string, + connectorId: t.string, + }), + }), + handler: async (resources): Promise => { + const { client, simulateFunctionCalling, signal, isCloudEnabled } = await initializeChatRequest( + resources + ); + + const { connectorId, prompt, context } = resources.params.body; + + const response$ = from( + recallAndScore({ + analytics: (await resources.context.core).coreStart.analytics, + chat: (name, params) => + client + .chat(name, { + ...params, + connectorId, + simulateFunctionCalling, + signal, + tracer: new LangTracer(otelContext.active()), + }) + .pipe(withoutTokenCountEvents()), + context, + logger: resources.logger, + messages: [], + userPrompt: prompt, + recall: client.recall, + signal, + }) + ).pipe( + map(({ scores, suggestions, relevantDocuments }) => { + return createFunctionResponseMessage({ + name: 'context', + data: { + suggestions, + scores, + }, + content: { + relevantDocuments, + }, + }); + }) + ); + + return observableIntoStream(response$.pipe(flushBuffer(isCloudEnabled))); }, }); @@ -158,7 +233,7 @@ async function chatComplete( params: t.TypeOf; } ) { - const { request, params, service, plugins } = resources; + const { params, service } = resources; const { body: { @@ -174,32 +249,12 @@ async function chatComplete( }, } = params; - await guardAgainstInvalidConnector({ - actions: await plugins.actions.start(), - request, - connectorId, - }); - - const [client, cloudStart, simulateFunctionCalling] = await Promise.all([ - service.getClient({ request }), - resources.plugins.cloud?.start() || Promise.resolve(undefined), - ( - await resources.context.core - ).uiSettings.client.get(aiAssistantSimulatedFunctionCalling), - ]); - - if (!client) { - throw notImplemented(); - } - - const controller = new AbortController(); - - request.events.aborted$.subscribe(() => { - controller.abort(); - }); + const { client, isCloudEnabled, signal, simulateFunctionCalling } = await initializeChatRequest( + resources + ); const functionClient = await service.getFunctionClient({ - signal: controller.signal, + signal, resources, client, screenContexts, @@ -211,7 +266,7 @@ async function chatComplete( conversationId, title, persist, - signal: controller.signal, + signal, functionClient, responseLanguage, instructions, @@ -219,7 +274,7 @@ async function chatComplete( disableFunctions, }); - return response$.pipe(flushBuffer(!!cloudStart?.isCloudEnabled)); + return response$.pipe(flushBuffer(isCloudEnabled)); } const chatCompleteRoute = createObservabilityAIAssistantServerRoute({ @@ -271,6 +326,7 @@ const publicChatCompleteRoute = createObservabilityAIAssistantServerRoute({ export const chatRoutes = { ...chatRoute, + ...chatRecallRoute, ...chatCompleteRoute, ...publicChatCompleteRoute, }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/process_openai_stream.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/process_openai_stream.ts index 908042770ea2d..59dbd24451c09 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/process_openai_stream.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/process_openai_stream.ts @@ -5,7 +5,7 @@ * 2.0. */ import { encode } from 'gpt-tokenizer'; -import { first, sum } from 'lodash'; +import { first, memoize, sum } from 'lodash'; import OpenAI from 'openai'; import { filter, map, Observable, tap } from 'rxjs'; import { v4 } from 'uuid'; @@ -51,6 +51,14 @@ export function processOpenAiStream({ }); } + const warnForToolCall = memoize( + (toolCall: OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall) => { + logger.warn(`More tools than 1 were called: ${JSON.stringify(toolCall)}`); + }, + (toolCall: OpenAI.Chat.Completions.ChatCompletionChunk.Choice.Delta.ToolCall) => + toolCall.index + ); + const parsed$ = source.pipe( filter((line) => !!line && line !== '[DONE]'), map( @@ -76,7 +84,16 @@ export function processOpenAiStream({ firstChoice?.delta.content, firstChoice?.delta.function_call?.name, firstChoice?.delta.function_call?.arguments, - ].map((val) => encode(val || '').length) || 0 + ...(firstChoice?.delta.tool_calls?.flatMap((toolCall) => { + return [ + toolCall.function?.name, + toolCall.function?.arguments, + toolCall.id, + toolCall.index, + toolCall.type, + ]; + }) ?? []), + ].map((val) => encode(val?.toString() ?? '').length) || 0 ); }), filter( @@ -85,8 +102,17 @@ export function processOpenAiStream({ ), map((chunk): ChatCompletionChunkEvent => { const delta = chunk.choices[0].delta; - if (delta.tool_calls && delta.tool_calls.length > 1) { - logger.warn(`More tools than 1 were called: ${JSON.stringify(delta.tool_calls)}`); + if (delta.tool_calls && (delta.tool_calls.length > 1 || delta.tool_calls[0].index > 0)) { + delta.tool_calls.forEach((toolCall) => { + warnForToolCall(toolCall); + }); + return { + id, + type: StreamingChatResponseEventType.ChatCompletionChunk, + message: { + content: delta.content ?? '', + }, + }; } const functionCall: Omit | undefined = diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts index 0349d597b7ba0..46d72d303f7e3 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts @@ -27,6 +27,7 @@ import { createFunctionResponseMessage } from '../../../common/utils/create_func import { CONTEXT_FUNCTION_NAME } from '../../functions/context'; import { ChatFunctionClient } from '../chat_function_client'; import type { KnowledgeBaseService } from '../knowledge_base_service'; +import { USER_INSTRUCTIONS_HEADER } from '../util/get_system_message_from_instructions'; import { observableIntoStream } from '../util/observable_into_stream'; import { CreateChatCompletionResponseChunk } from './adapters/process_openai_stream'; @@ -34,7 +35,7 @@ type ChunkDelta = CreateChatCompletionResponseChunk['choices'][number]['delta']; type LlmSimulator = ReturnType; -const EXPECTED_STORED_SYSTEM_MESSAGE = `system\n\nWhat follows is a set of instructions provided by the user, please abide by them as long as they don't conflict with anything you've been told so far:\n\nYou MUST respond in the users preferred language which is: English.`; +const EXPECTED_STORED_SYSTEM_MESSAGE = `system\n\n${USER_INSTRUCTIONS_HEADER}\n\nYou MUST respond in the users preferred language which is: English.`; const nextTick = () => { return new Promise(process.nextTick); @@ -368,8 +369,8 @@ describe('Observability AI Assistant client', () => { last_updated: expect.any(String), token_count: { completion: 1, - prompt: 78, - total: 79, + prompt: 84, + total: 85, }, }, type: StreamingChatResponseEventType.ConversationCreate, @@ -425,8 +426,8 @@ describe('Observability AI Assistant client', () => { last_updated: expect.any(String), token_count: { completion: 6, - prompt: 262, - total: 268, + prompt: 268, + total: 274, }, }, type: StreamingChatResponseEventType.ConversationCreate, @@ -443,8 +444,8 @@ describe('Observability AI Assistant client', () => { title: 'An auto-generated title', token_count: { completion: 6, - prompt: 262, - total: 268, + prompt: 268, + total: 274, }, }, labels: {}, @@ -574,8 +575,8 @@ describe('Observability AI Assistant client', () => { last_updated: expect.any(String), token_count: { completion: 2, - prompt: 156, - total: 158, + prompt: 162, + total: 164, }, }, type: StreamingChatResponseEventType.ConversationUpdate, @@ -593,8 +594,8 @@ describe('Observability AI Assistant client', () => { title: 'My stored conversation', token_count: { completion: 2, - prompt: 156, - total: 158, + prompt: 162, + total: 164, }, }, labels: {}, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts index 9739a59125011..dacd52648a6b8 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts @@ -45,7 +45,7 @@ import { } from '../../../common/conversation_complete'; import { CompatibleJSONSchema } from '../../../common/functions/types'; import { - UserInstruction, + UserInstructionOrPlainText, type Conversation, type ConversationCreateRequest, type ConversationUpdateRequest, @@ -170,9 +170,13 @@ export class ObservabilityAIAssistantClient { title?: string; isPublic?: boolean; kibanaPublicUrl?: string; - instructions?: Array; + instructions?: UserInstructionOrPlainText[]; simulateFunctionCalling?: boolean; - disableFunctions?: boolean; + disableFunctions?: + | boolean + | { + except: string[]; + }; }): Observable> => { return new LangTracer(context.active()).startActiveSpan( 'complete', diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts index 2ab26cb4799ae..83d9bf37e7efb 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts @@ -133,13 +133,17 @@ function getFunctionDefinitions({ }: { functionClient: ChatFunctionClient; functionLimitExceeded: boolean; - disableFunctions: boolean; + disableFunctions: + | boolean + | { + except: string[]; + }; }) { - if (functionLimitExceeded || disableFunctions) { + if (functionLimitExceeded || disableFunctions === true) { return []; } - const systemFunctions = functionClient + let systemFunctions = functionClient .getFunctions() .map((fn) => fn.definition) .filter( @@ -148,6 +152,10 @@ function getFunctionDefinitions({ [FunctionVisibility.AssistantOnly, FunctionVisibility.All].includes(def.visibility) ); + if (typeof disableFunctions === 'object') { + systemFunctions = systemFunctions.filter((fn) => disableFunctions.except.includes(fn.name)); + } + const actions = functionClient.getActions(); const allDefinitions = systemFunctions @@ -177,7 +185,11 @@ export function continueConversation({ requestInstructions: Array; userInstructions: UserInstruction[]; logger: Logger; - disableFunctions: boolean; + disableFunctions: + | boolean + | { + except: string[]; + }; tracer: LangTracer; }): Observable { let nextFunctionCallsLeft = functionCallsLeft; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts index 7c504aa43c38c..67cf8bcd000a9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts @@ -309,7 +309,7 @@ export class KnowledgeBaseService { user?: { name: string }; modelId: string; }): Promise { - const query = { + const esQuery = { bool: { should: queries.map(({ text, boost = 1 }) => ({ text_expansion: { @@ -334,7 +334,7 @@ export class KnowledgeBaseService { Pick >({ index: [this.dependencies.resources.aliases.kb], - query, + query: esQuery, size: 20, _source: { includes: ['text', 'is_correction', 'labels'], @@ -481,7 +481,9 @@ export class KnowledgeBaseService { }): Promise<{ entries: RecalledEntry[]; }> => { - this.dependencies.logger.debug(`Recalling entries from KB for queries: "${queries}"`); + this.dependencies.logger.debug( + `Recalling entries from KB for queries: "${JSON.stringify(queries)}"` + ); const modelId = await this.dependencies.getModelId(); const [documentsFromKb, documentsFromConnectors] = await Promise.all([ diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.test.ts index 99a2c34bc33d7..93594fc520998 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.test.ts @@ -4,7 +4,10 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { getSystemMessageFromInstructions } from './get_system_message_from_instructions'; +import { + getSystemMessageFromInstructions, + USER_INSTRUCTIONS_HEADER, +} from './get_system_message_from_instructions'; describe('getSystemMessageFromInstructions', () => { it('handles plain instructions', () => { @@ -42,9 +45,7 @@ describe('getSystemMessageFromInstructions', () => { requestInstructions: [{ doc_id: 'second', text: 'second_request' }], availableFunctionNames: [], }) - ).toEqual( - `first\n\nWhat follows is a set of instructions provided by the user, please abide by them as long as they don't conflict with anything you've been told so far:\n\nsecond_request` - ); + ).toEqual(`first\n\n${USER_INSTRUCTIONS_HEADER}\n\nsecond_request`); }); it('includes kb instructions if there is no request instruction', () => { @@ -55,9 +56,7 @@ describe('getSystemMessageFromInstructions', () => { requestInstructions: [], availableFunctionNames: [], }) - ).toEqual( - `first\n\nWhat follows is a set of instructions provided by the user, please abide by them as long as they don't conflict with anything you've been told so far:\n\nsecond_kb` - ); + ).toEqual(`first\n\n${USER_INSTRUCTIONS_HEADER}\n\nsecond_kb`); }); it('handles undefined values', () => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.ts index ece79b9f78485..759ff07125b95 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_system_message_from_instructions.ts @@ -5,12 +5,19 @@ * 2.0. */ -import { compact } from 'lodash'; +import { compact, partition } from 'lodash'; import { v4 } from 'uuid'; -import { UserInstruction } from '../../../common/types'; +import { UserInstruction, UserInstructionOrPlainText } from '../../../common/types'; import { withTokenBudget } from '../../../common/utils/with_token_budget'; import { RegisteredInstruction } from '../types'; +export const USER_INSTRUCTIONS_HEADER = `## User instructions + +What follows is a set of instructions provided by the user, please abide by them +as long as they don't conflict with anything you've been told so far: + +`; + export function getSystemMessageFromInstructions({ registeredInstructions, userInstructions, @@ -19,7 +26,7 @@ export function getSystemMessageFromInstructions({ }: { registeredInstructions: RegisteredInstruction[]; userInstructions: UserInstruction[]; - requestInstructions: Array; + requestInstructions: UserInstructionOrPlainText[]; availableFunctionNames: string[]; }): string { const allRegisteredInstructions = compact( @@ -32,10 +39,17 @@ export function getSystemMessageFromInstructions({ ); const requestInstructionsWithId = requestInstructions.map((instruction) => - typeof instruction === 'string' ? { doc_id: v4(), text: instruction } : instruction + typeof instruction === 'string' + ? { doc_id: v4(), text: instruction, system: false } + : instruction + ); + + const [requestSystemInstructions, requestUserInstructionsWithId] = partition( + requestInstructionsWithId, + (instruction) => instruction.system === true ); - const requestOverrideIds = requestInstructionsWithId.map((instruction) => instruction.doc_id); + const requestOverrideIds = requestUserInstructionsWithId.map((instruction) => instruction.doc_id); // all request instructions, and those from the KB that are not defined as a request instruction const allUserInstructions = requestInstructionsWithId.concat( @@ -45,12 +59,9 @@ export function getSystemMessageFromInstructions({ const instructionsWithinBudget = withTokenBudget(allUserInstructions, 1000); return [ - ...allRegisteredInstructions, + ...allRegisteredInstructions.concat(requestSystemInstructions), ...(instructionsWithinBudget.length - ? [ - `What follows is a set of instructions provided by the user, please abide by them as long as they don't conflict with anything you've been told so far:`, - ...instructionsWithinBudget, - ] + ? [USER_INSTRUCTIONS_HEADER, ...instructionsWithinBudget] : []), ] .map((instruction) => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/parse_suggestion_scores.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/parse_suggestion_scores.test.ts similarity index 71% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/parse_suggestion_scores.test.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/parse_suggestion_scores.test.ts index 7b62cf21af65b..abeeda3c37657 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/parse_suggestion_scores.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/parse_suggestion_scores.test.ts @@ -12,56 +12,56 @@ describe('parseSuggestionScores', () => { expect( parseSuggestionScores( dedent( - `0,1 - 2,7 - 3,10` + `my-id,1 + my-other-id,7 + my-another-id,10` ) ) ).toEqual([ { - index: 0, + id: 'my-id', score: 1, }, { - index: 2, + id: 'my-other-id', score: 7, }, { - index: 3, + id: 'my-another-id', score: 10, }, ]); }); it('parses semi-colons as separators', () => { - expect(parseSuggestionScores(`0,1;2,7;3,10`)).toEqual([ + expect(parseSuggestionScores(`idone,1;idtwo,7;idthree,10`)).toEqual([ { - index: 0, + id: 'idone', score: 1, }, { - index: 2, + id: 'idtwo', score: 7, }, { - index: 3, + id: 'idthree', score: 10, }, ]); }); it('parses spaces as separators', () => { - expect(parseSuggestionScores(`0,1 2,7 3,10`)).toEqual([ + expect(parseSuggestionScores(`a,1 b,7 c,10`)).toEqual([ { - index: 0, + id: 'a', score: 1, }, { - index: 2, + id: 'b', score: 7, }, { - index: 3, + id: 'c', score: 10, }, ]); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/parse_suggestion_scores.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/parse_suggestion_scores.ts similarity index 77% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/parse_suggestion_scores.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/parse_suggestion_scores.ts index 9fa39bf1233b5..464504bed85a8 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/parse_suggestion_scores.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/parse_suggestion_scores.ts @@ -8,15 +8,15 @@ export function parseSuggestionScores(scoresAsString: string) { // make sure that spaces, semi-colons etc work as separators as well const scores = scoresAsString - .replace(/[^0-9,]/g, ' ') + .replace(/[^0-9a-zA-Z\-_,]/g, ' ') .trim() .split(/\s+/) .map((pair) => { - const [index, score] = pair.split(',').map((str) => parseInt(str, 10)); + const [id, score] = pair.split(',').map((str) => str.trim()); return { - index, - score, + id, + score: parseInt(score, 10), }; }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/recall_and_score.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/recall_and_score.ts new file mode 100644 index 0000000000000..8885ff7e1d7a2 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/recall_and_score.ts @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Logger } from '@kbn/logging'; +import { AnalyticsServiceStart } from '@kbn/core/server'; +import type { Message } from '../../../common'; +import type { ObservabilityAIAssistantClient } from '../../service/client'; +import type { FunctionCallChatFunction } from '../../service/types'; +import { retrieveSuggestions } from './retrieve_suggestions'; +import { scoreSuggestions } from './score_suggestions'; +import type { RetrievedSuggestion } from './types'; +import { RecallRanking, RecallRankingEventType } from '../../analytics/recall_ranking'; + +export async function recallAndScore({ + recall, + chat, + analytics, + userPrompt, + context, + messages, + logger, + signal, +}: { + recall: ObservabilityAIAssistantClient['recall']; + chat: FunctionCallChatFunction; + analytics: AnalyticsServiceStart; + userPrompt: string; + context: string; + messages: Message[]; + logger: Logger; + signal: AbortSignal; +}): Promise<{ + relevantDocuments?: RetrievedSuggestion[]; + scores?: Array<{ id: string; score: number }>; + suggestions: RetrievedSuggestion[]; +}> { + const queries = [ + { text: userPrompt, boost: 3 }, + { text: context, boost: 1 }, + ].filter((query) => query.text.trim()); + + const suggestions = await retrieveSuggestions({ + recall, + queries, + }); + + if (!suggestions.length) { + return { + relevantDocuments: [], + scores: [], + suggestions: [], + }; + } + + try { + const { scores, relevantDocuments } = await scoreSuggestions({ + suggestions, + logger, + messages, + userPrompt, + context, + signal, + chat, + }); + + analytics.reportEvent(RecallRankingEventType, { + prompt: queries.map((query) => query.text).join('\n\n'), + scoredDocuments: suggestions.map((suggestion) => { + const llmScore = scores.find((score) => score.id === suggestion.id); + return { + content: suggestion.text, + elserScore: suggestion.score ?? -1, + llmScore: llmScore ? llmScore.score : -1, + }; + }), + }); + + return { scores, relevantDocuments, suggestions }; + } catch (error) { + logger.error(`Error scoring documents: ${error.message}`, { error }); + return { + suggestions: suggestions.slice(0, 5), + }; + } +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/retrieve_suggestions.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/retrieve_suggestions.ts new file mode 100644 index 0000000000000..3c680229cd5d2 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/retrieve_suggestions.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 { omit } from 'lodash'; +import { ObservabilityAIAssistantClient } from '../../service/client'; +import { RetrievedSuggestion } from './types'; + +export async function retrieveSuggestions({ + queries, + recall, +}: { + queries: Array<{ text: string; boost?: number }>; + recall: ObservabilityAIAssistantClient['recall']; +}): Promise { + const recallResponse = await recall({ + queries, + }); + + return recallResponse.entries.map((entry) => omit(entry, 'labels', 'is_correction')); +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/score_suggestions.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/score_suggestions.ts new file mode 100644 index 0000000000000..b6a16d6329aec --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/score_suggestions.ts @@ -0,0 +1,164 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; +import { omit } from 'lodash'; +import { Logger } from '@kbn/logging'; +import dedent from 'dedent'; +import { lastValueFrom } from 'rxjs'; +import { decodeOrThrow, jsonRt } from '@kbn/io-ts-utils'; +import { concatenateChatCompletionChunks, Message, MessageRole } from '../../../common'; +import type { FunctionCallChatFunction } from '../../service/types'; +import type { RetrievedSuggestion } from './types'; +import { parseSuggestionScores } from './parse_suggestion_scores'; +import { ShortIdTable } from '../../../common/utils/short_id_table'; + +const scoreFunctionRequestRt = t.type({ + message: t.type({ + function_call: t.type({ + name: t.literal('score'), + arguments: t.string, + }), + }), +}); + +const scoreFunctionArgumentsRt = t.type({ + scores: t.string, +}); + +export async function scoreSuggestions({ + suggestions, + messages, + userPrompt, + context, + chat, + signal, + logger, +}: { + suggestions: RetrievedSuggestion[]; + messages: Message[]; + userPrompt: string; + context: string; + chat: FunctionCallChatFunction; + signal: AbortSignal; + logger: Logger; +}): Promise<{ + relevantDocuments: RetrievedSuggestion[]; + scores: Array<{ id: string; score: number }>; +}> { + const shortIdTable = new ShortIdTable(); + + const suggestionsWithShortId = suggestions.map((suggestion) => ({ + ...omit(suggestion, 'score', 'id'), // To not bias the LLM + originalId: suggestion.id, + shortId: shortIdTable.take(suggestion.id), + })); + + const newUserMessageContent = + dedent(`Given the following question, score the documents that are relevant to the question. on a scale from 0 to 7, + 0 being completely irrelevant, and 7 being extremely relevant. Information is relevant to the question if it helps in + answering the question. Judge it according to the following criteria: + + - The document is relevant to the question, and the rest of the conversation + - The document has information relevant to the question that is not mentioned, + or more detailed than what is available in the conversation + - The document has a high amount of information relevant to the question compared to other documents + - The document contains new information not mentioned before in the conversation + + User prompt: + ${userPrompt} + + Context: + ${context} + + Documents: + ${JSON.stringify( + suggestionsWithShortId.map((suggestion) => ({ + id: suggestion.shortId, + content: suggestion.text, + })), + null, + 2 + )}`); + + const newUserMessage: Message = { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: newUserMessageContent, + }, + }; + + const scoreFunction = { + name: 'score', + description: + 'Use this function to score documents based on how relevant they are to the conversation.', + parameters: { + type: 'object', + properties: { + scores: { + description: `The document IDs and their scores, as CSV. Example: + + my_id,7 + my_other_id,3 + my_third_id,4 + `, + type: 'string', + }, + }, + required: ['score'], + } as const, + }; + + const response = await lastValueFrom( + chat('score_suggestions', { + messages: [...messages.slice(0, -2), newUserMessage], + functions: [scoreFunction], + functionCall: 'score', + signal, + }).pipe(concatenateChatCompletionChunks()) + ); + + const scoreFunctionRequest = decodeOrThrow(scoreFunctionRequestRt)(response); + const { scores: scoresAsString } = decodeOrThrow(jsonRt.pipe(scoreFunctionArgumentsRt))( + scoreFunctionRequest.message.function_call.arguments + ); + + const scores = parseSuggestionScores(scoresAsString).map(({ id, score }) => { + const originalSuggestion = suggestionsWithShortId.find( + (suggestion) => suggestion.shortId === id + ); + return { + originalId: originalSuggestion?.originalId, + score, + }; + }); + + if (scores.length === 0) { + // seemingly invalid or no scores, return all + return { relevantDocuments: suggestions, scores: [] }; + } + + const suggestionIds = suggestions.map((document) => document.id); + + const relevantDocumentIds = scores + .filter((document) => suggestionIds.includes(document.originalId ?? '')) // Remove hallucinated documents + .filter((document) => document.score > 4) + .sort((a, b) => b.score - a.score) + .slice(0, 5) + .map((document) => document.originalId); + + const relevantDocuments = suggestions.filter((suggestion) => + relevantDocumentIds.includes(suggestion.id) + ); + + logger.debug(`Relevant documents: ${JSON.stringify(relevantDocuments, null, 2)}`); + + return { + relevantDocuments, + scores: scores.map((score) => ({ id: score.originalId!, score: score.score })), + }; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/types.ts new file mode 100644 index 0000000000000..3774df64c1ee1 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/utils/recall/types.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RecalledEntry } from '../../service/knowledge_base_service'; + +export type RetrievedSuggestion = Omit; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx index 836b8f6ef7f93..620fbbc2ab166 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ import React from 'react'; -import { render, screen, waitFor } from '@testing-library/react'; +import { render, screen, waitFor, act } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; @@ -142,7 +142,8 @@ describe('VisualizeESQL', () => { }), }; renderComponent({}, lensService, undefined, ['There is an error mate']); - await waitFor(() => expect(screen.findByTestId('observabilityAiAssistantErrorsList'))); + + expect(await screen.findByTestId('observabilityAiAssistantErrorsList')).toBeInTheDocument(); }); it('should not display the table on first render', async () => { @@ -153,15 +154,16 @@ describe('VisualizeESQL', () => { suggestions: jest.fn(), }), }; + renderComponent({}, lensService); - // the button to render a table should be present - await waitFor(() => - expect(screen.findByTestId('observabilityAiAssistantLensESQLDisplayTableButton')) - ); - await waitFor(() => - expect(screen.queryByTestId('observabilityAiAssistantESQLDataGrid')).not.toBeInTheDocument() - ); + expect( + await screen.findByTestId('observabilityAiAssistantLensESQLDisplayTableButton') + ).toBeInTheDocument(); + + expect( + await screen.queryByTestId('observabilityAiAssistantESQLDataGrid') + ).not.toBeInTheDocument(); }); it('should display the table when user clicks the table button', async () => { @@ -172,11 +174,16 @@ describe('VisualizeESQL', () => { suggestions: jest.fn(), }), }; + renderComponent({}, lensService); - await waitFor(() => { - userEvent.click(screen.getByTestId('observabilityAiAssistantLensESQLDisplayTableButton')); - expect(screen.findByTestId('observabilityAiAssistantESQLDataGrid')); + + await act(async () => { + userEvent.click( + await screen.findByTestId('observabilityAiAssistantLensESQLDisplayTableButton') + ); }); + + expect(await screen.findByTestId('observabilityAiAssistantESQLDataGrid')).toBeInTheDocument(); }); it('should render the ESQLDataGrid if Lens returns a table', async () => { @@ -195,8 +202,6 @@ describe('VisualizeESQL', () => { }, lensService ); - await waitFor(() => { - expect(screen.findByTestId('observabilityAiAssistantESQLDataGrid')); - }); + expect(await screen.findByTestId('observabilityAiAssistantESQLDataGrid')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx index 97c46a6a2d759..9442a73751628 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx @@ -124,12 +124,7 @@ export function VisualizeESQL({ }, [lens]); const dataViewAsync = useAsync(() => { - return getESQLAdHocDataview(indexPattern, dataViews).then((dataView) => { - if (dataView.fields.getByName('@timestamp')?.type === 'date') { - dataView.timeFieldName = '@timestamp'; - } - return dataView; - }); + return getESQLAdHocDataview(indexPattern, dataViews); }, [indexPattern, dataViews]); const chatFlyoutSecondSlotHandler = useContext(ObservabilityAIAssistantMultipaneFlyoutContext); diff --git a/x-pack/plugins/observability_solution/slo/common/constants.ts b/x-pack/plugins/observability_solution/slo/common/constants.ts index db0c91ab0ef4b..a70a5fe082730 100644 --- a/x-pack/plugins/observability_solution/slo/common/constants.ts +++ b/x-pack/plugins/observability_solution/slo/common/constants.ts @@ -50,7 +50,7 @@ export const SUPPRESSED_PRIORITY_ACTION = { }; export const SLO_MODEL_VERSION = 2; -export const SLO_RESOURCES_VERSION = 3.2; +export const SLO_RESOURCES_VERSION = 3.3; export const SLO_RESOURCES_VERSION_MAJOR = 3; export const SLO_COMPONENT_TEMPLATE_MAPPINGS_NAME = '.slo-observability.sli-mappings'; diff --git a/x-pack/plugins/observability_solution/slo/public/data/slo/common.ts b/x-pack/plugins/observability_solution/slo/public/data/slo/common.ts index ae25d150f350b..b9276486c8d8e 100644 --- a/x-pack/plugins/observability_solution/slo/public/data/slo/common.ts +++ b/x-pack/plugins/observability_solution/slo/public/data/slo/common.ts @@ -39,6 +39,9 @@ export const buildHealthySummary = ( remaining: 0.93623, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, ...params, }; }; @@ -55,6 +58,9 @@ export const buildViolatedSummary = ( remaining: -3.1234, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, ...params, }; }; @@ -71,6 +77,9 @@ export const buildNoDataSummary = ( remaining: 1, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, ...params, }; }; @@ -87,6 +96,9 @@ export const buildDegradingSummary = ( remaining: 0.1244, isEstimated: true, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, ...params, }; }; diff --git a/x-pack/plugins/observability_solution/slo/public/data/slo/slo.ts b/x-pack/plugins/observability_solution/slo/public/data/slo/slo.ts index 02541ac8a17c7..ce50190eb7adf 100644 --- a/x-pack/plugins/observability_solution/slo/public/data/slo/slo.ts +++ b/x-pack/plugins/observability_solution/slo/public/data/slo/slo.ts @@ -62,6 +62,9 @@ const baseSlo: Omit = { remaining: 0.936, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, }, groupBy: ALL_VALUE, groupings: {}, diff --git a/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts b/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts index ea85e58479636..40fcae8c840ee 100644 --- a/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts +++ b/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts @@ -20,7 +20,7 @@ describe('SloEditLocator', () => { it('should return correct url when slo is provided', async () => { const location = await locator.getLocation(buildSlo({ id: 'foo' })); expect(location.path).toEqual( - "/edit/foo?_a=(budgetingMethod:occurrences,createdAt:'2022-12-29T10:11:12.000Z',description:'some%20description%20useful',enabled:!t,groupBy:'*',groupings:(),id:foo,indicator:(params:(filter:'baz:%20foo%20and%20bar%20%3E%202',good:'http_status:%202xx',index:some-index,timestampField:custom_timestamp,total:'a%20query'),type:sli.kql.custom),instanceId:'*',meta:(),name:'super%20important%20level%20service',objective:(target:0.98),revision:1,settings:(frequency:'1m',preventInitialBackfill:!f,syncDelay:'1m'),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:'30d',type:rolling),updatedAt:'2022-12-29T10:11:12.000Z',version:2)" + "/edit/foo?_a=(budgetingMethod:occurrences,createdAt:'2022-12-29T10:11:12.000Z',description:'some%20description%20useful',enabled:!t,groupBy:'*',groupings:(),id:foo,indicator:(params:(filter:'baz:%20foo%20and%20bar%20%3E%202',good:'http_status:%202xx',index:some-index,timestampField:custom_timestamp,total:'a%20query'),type:sli.kql.custom),instanceId:'*',meta:(),name:'super%20important%20level%20service',objective:(target:0.98),revision:1,settings:(frequency:'1m',preventInitialBackfill:!f,syncDelay:'1m'),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),fiveMinuteBurnRate:0,oneDayBurnRate:0,oneHourBurnRate:0,sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:'30d',type:rolling),updatedAt:'2022-12-29T10:11:12.000Z',version:2)" ); }); }); diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/sort_by_select.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/sort_by_select.tsx index 3d977a19cb0a8..189dbee8b4f8c 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/sort_by_select.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/sort_by_select.tsx @@ -97,6 +97,51 @@ export function SLOSortBy({ state, onStateChange, loading }: Props) { }); }, }, + { + label: i18n.translate('xpack.slo.list.sortBy.fiveMinuteBurnRate', { + defaultMessage: '5m burn rate', + }), + checked: sortBy === 'burn_rate_5m', + value: 'burn_rate_5m', + onClick: () => { + handleChangeSortBy({ + value: 'burn_rate_5m', + label: i18n.translate('xpack.slo.list.sortBy.fiveMinuteBurnRate', { + defaultMessage: '5m burn rate', + }), + }); + }, + }, + { + label: i18n.translate('xpack.slo.list.sortBy.oneHourBurnRate', { + defaultMessage: '1h burn rate', + }), + checked: sortBy === 'burn_rate_1h', + value: 'burn_rate_1h', + onClick: () => { + handleChangeSortBy({ + value: 'burn_rate_1h', + label: i18n.translate('xpack.slo.list.sortBy.oneHourBurnRate', { + defaultMessage: '1h burn rate', + }), + }); + }, + }, + { + label: i18n.translate('xpack.slo.list.sortBy.oneDayBurnRate', { + defaultMessage: '1d burn rate', + }), + checked: sortBy === 'burn_rate_1d', + value: 'burn_rate_1d', + onClick: () => { + handleChangeSortBy({ + value: 'burn_rate_1d', + label: i18n.translate('xpack.slo.list.sortBy.oneDayBurnRate', { + defaultMessage: '1d burn rate', + }), + }); + }, + }, ]; const groupLabel = sortByOptions.find((option) => option.value === sortBy)?.label || 'Default'; diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/hooks/use_url_search_state.ts b/x-pack/plugins/observability_solution/slo/public/pages/slos/hooks/use_url_search_state.ts index a4b842c2ee19f..59284ee617919 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/hooks/use_url_search_state.ts +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/hooks/use_url_search_state.ts @@ -15,7 +15,15 @@ import type { GroupByField } from '../components/slo_list_group_by'; import type { SLOView } from '../components/toggle_slo_view'; export const SLO_LIST_SEARCH_URL_STORAGE_KEY = 'search'; -export type SortField = 'sli_value' | 'error_budget_consumed' | 'error_budget_remaining' | 'status'; +export type SortField = + | 'sli_value' + | 'error_budget_consumed' + | 'error_budget_remaining' + | 'status' + | 'burn_rate_5m' + | 'burn_rate_1h' + | 'burn_rate_1d'; + export type SortDirection = 'asc' | 'desc'; export interface SearchState { diff --git a/x-pack/plugins/observability_solution/slo/public/utils/slo/remote_slo_urls.test.ts b/x-pack/plugins/observability_solution/slo/public/utils/slo/remote_slo_urls.test.ts index 2c8476b9c2e09..3c0495fd1bc9b 100644 --- a/x-pack/plugins/observability_solution/slo/public/utils/slo/remote_slo_urls.test.ts +++ b/x-pack/plugins/observability_solution/slo/public/utils/slo/remote_slo_urls.test.ts @@ -51,7 +51,7 @@ describe('remote SLO URLs Utils', () => { `"https://cloud.elast.co/app/slos/edit/fixed-id"` ); expect(createRemoteSloCloneUrl(remoteSlo)).toMatchInlineSnapshot( - `"https://cloud.elast.co/app/slos/create?_a=(budgetingMethod:occurrences,createdAt:%272022-12-29T10:11:12.000Z%27,description:%27some%20description%20useful%27,enabled:!t,groupBy:%27*%27,groupings:(),indicator:(params:(filter:%27baz:%20foo%20and%20bar%20%3E%202%27,good:%27http_status:%202xx%27,index:some-index,timestampField:custom_timestamp,total:%27a%20query%27),type:sli.kql.custom),instanceId:%27*%27,meta:(),name:%27[Copy]%20super%20important%20level%20service%27,objective:(target:0.98),remote:(kibanaUrl:%27https:/cloud.elast.co/kibana%27,remoteName:remote_cluster),revision:1,settings:(frequency:%271m%27,preventInitialBackfill:!f,syncDelay:%271m%27),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:%2730d%27,type:rolling),updatedAt:%272022-12-29T10:11:12.000Z%27,version:2)"` + `"https://cloud.elast.co/app/slos/create?_a=(budgetingMethod:occurrences,createdAt:%272022-12-29T10:11:12.000Z%27,description:%27some%20description%20useful%27,enabled:!t,groupBy:%27*%27,groupings:(),indicator:(params:(filter:%27baz:%20foo%20and%20bar%20%3E%202%27,good:%27http_status:%202xx%27,index:some-index,timestampField:custom_timestamp,total:%27a%20query%27),type:sli.kql.custom),instanceId:%27*%27,meta:(),name:%27[Copy]%20super%20important%20level%20service%27,objective:(target:0.98),remote:(kibanaUrl:%27https:/cloud.elast.co/kibana%27,remoteName:remote_cluster),revision:1,settings:(frequency:%271m%27,preventInitialBackfill:!f,syncDelay:%271m%27),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),fiveMinuteBurnRate:0,oneDayBurnRate:0,oneHourBurnRate:0,sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:%2730d%27,type:rolling),updatedAt:%272022-12-29T10:11:12.000Z%27,version:2)"` ); }); @@ -71,7 +71,7 @@ describe('remote SLO URLs Utils', () => { `"https://cloud.elast.co/s/my-custom-space/app/slos/edit/fixed-id"` ); expect(createRemoteSloCloneUrl(remoteSlo, 'my-custom-space')).toMatchInlineSnapshot( - `"https://cloud.elast.co/s/my-custom-space/app/slos/create?_a=(budgetingMethod:occurrences,createdAt:%272022-12-29T10:11:12.000Z%27,description:%27some%20description%20useful%27,enabled:!t,groupBy:%27*%27,groupings:(),indicator:(params:(filter:%27baz:%20foo%20and%20bar%20%3E%202%27,good:%27http_status:%202xx%27,index:some-index,timestampField:custom_timestamp,total:%27a%20query%27),type:sli.kql.custom),instanceId:%27*%27,meta:(),name:%27[Copy]%20super%20important%20level%20service%27,objective:(target:0.98),remote:(kibanaUrl:%27https:/cloud.elast.co/kibana%27,remoteName:remote_cluster),revision:1,settings:(frequency:%271m%27,preventInitialBackfill:!f,syncDelay:%271m%27),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:%2730d%27,type:rolling),updatedAt:%272022-12-29T10:11:12.000Z%27,version:2)"` + `"https://cloud.elast.co/s/my-custom-space/app/slos/create?_a=(budgetingMethod:occurrences,createdAt:%272022-12-29T10:11:12.000Z%27,description:%27some%20description%20useful%27,enabled:!t,groupBy:%27*%27,groupings:(),indicator:(params:(filter:%27baz:%20foo%20and%20bar%20%3E%202%27,good:%27http_status:%202xx%27,index:some-index,timestampField:custom_timestamp,total:%27a%20query%27),type:sli.kql.custom),instanceId:%27*%27,meta:(),name:%27[Copy]%20super%20important%20level%20service%27,objective:(target:0.98),remote:(kibanaUrl:%27https:/cloud.elast.co/kibana%27,remoteName:remote_cluster),revision:1,settings:(frequency:%271m%27,preventInitialBackfill:!f,syncDelay:%271m%27),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),fiveMinuteBurnRate:0,oneDayBurnRate:0,oneHourBurnRate:0,sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:%2730d%27,type:rolling),updatedAt:%272022-12-29T10:11:12.000Z%27,version:2)"` ); }); }); diff --git a/x-pack/plugins/observability_solution/slo/server/assets/component_templates/slo_summary_mappings_template.ts b/x-pack/plugins/observability_solution/slo/server/assets/component_templates/slo_summary_mappings_template.ts index b0509495e8e79..d25722e4f323d 100644 --- a/x-pack/plugins/observability_solution/slo/server/assets/component_templates/slo_summary_mappings_template.ts +++ b/x-pack/plugins/observability_solution/slo/server/assets/component_templates/slo_summary_mappings_template.ts @@ -178,6 +178,45 @@ export const getSLOSummaryMappingsTemplate = ( spaceId: { type: 'keyword', }, + fiveMinuteBurnRate: { + properties: { + goodEvents: { + type: 'long', + }, + totalEvents: { + type: 'long', + }, + value: { + type: 'double', + }, + }, + }, + oneHourBurnRate: { + properties: { + goodEvents: { + type: 'long', + }, + totalEvents: { + type: 'long', + }, + value: { + type: 'double', + }, + }, + }, + oneDayBurnRate: { + properties: { + goodEvents: { + type: 'long', + }, + totalEvents: { + type: 'long', + }, + value: { + type: 'double', + }, + }, + }, }, }, }, diff --git a/x-pack/plugins/observability_solution/slo/server/assets/ingest_templates/slo_summary_pipeline_template.ts b/x-pack/plugins/observability_solution/slo/server/assets/ingest_templates/slo_summary_pipeline_template.ts index d3b4aed69f1c0..7d51ffeddea4b 100644 --- a/x-pack/plugins/observability_solution/slo/server/assets/ingest_templates/slo_summary_pipeline_template.ts +++ b/x-pack/plugins/observability_solution/slo/server/assets/ingest_templates/slo_summary_pipeline_template.ts @@ -194,6 +194,46 @@ export const getSLOSummaryPipelineTemplate = ( ignore_failure: true, }, }, + // >= 8.15: + { + script: { + description: 'Computes the last five minute burn rate value', + lang: 'painless', + params: { + isTimeslice: timeslicesBudgetingMethodSchema.is(slo.budgetingMethod), + totalSlicesInRange: timeslicesBudgetingMethodSchema.is(slo.budgetingMethod) + ? Math.floor(5 / slo.objective.timesliceWindow!.asMinutes()) + : 0, + }, + source: getBurnRateSource('fiveMinuteBurnRate'), + }, + }, + { + script: { + description: 'Computes the last hour burn rate value', + lang: 'painless', + params: { + isTimeslice: timeslicesBudgetingMethodSchema.is(slo.budgetingMethod), + totalSlicesInRange: timeslicesBudgetingMethodSchema.is(slo.budgetingMethod) + ? Math.floor(60 / slo.objective.timesliceWindow!.asMinutes()) + : 0, + }, + source: getBurnRateSource('oneHourBurnRate'), + }, + }, + { + script: { + description: 'Computes the last day burn rate value', + lang: 'painless', + params: { + isTimeslice: timeslicesBudgetingMethodSchema.is(slo.budgetingMethod), + totalSlicesInRange: timeslicesBudgetingMethodSchema.is(slo.budgetingMethod) + ? Math.floor(1440 / slo.objective.timesliceWindow!.asMinutes()) + : 0, + }, + source: getBurnRateSource('oneDayBurnRate'), + }, + }, ], _meta: { description: `Ingest pipeline for SLO summary data [id: ${slo.id}, revision: ${slo.revision}]`, @@ -203,3 +243,27 @@ export const getSLOSummaryPipelineTemplate = ( }, }; }; + +function getBurnRateSource( + burnRateKey: 'oneDayBurnRate' | 'oneHourBurnRate' | 'fiveMinuteBurnRate' +): string { + return `def totalEvents = ctx["${burnRateKey}"]["totalEvents"]; + def goodEvents = ctx["${burnRateKey}"]["goodEvents"]; + def errorBudgetInitial = ctx["errorBudgetInitial"]; + + if (totalEvents == null || totalEvents == 0) { + ctx["${burnRateKey}"]["value"] = 0.0; + return; + } + + def totalSlicesInRange = params["totalSlicesInRange"]; + def isTimeslice = params["isTimeslice"]; + if (isTimeslice && totalSlicesInRange > 0) { + def badEvents = (double)totalEvents - (double)goodEvents; + def sliValue = 1.0 - (badEvents / (double)totalSlicesInRange); + ctx["${burnRateKey}"]["value"] = (1.0 - sliValue) / errorBudgetInitial; + } else { + def sliValue = (double)goodEvents / (double)totalEvents; + ctx["${burnRateKey}"]["value"] = (1.0 - sliValue) / errorBudgetInitial; + }`; +} diff --git a/x-pack/plugins/observability_solution/slo/server/assets/transform_templates/slo_transform_template.test.ts b/x-pack/plugins/observability_solution/slo/server/assets/transform_templates/slo_transform_template.test.ts index 535c8295516af..d3c0a9ea67b5d 100644 --- a/x-pack/plugins/observability_solution/slo/server/assets/transform_templates/slo_transform_template.test.ts +++ b/x-pack/plugins/observability_solution/slo/server/assets/transform_templates/slo_transform_template.test.ts @@ -143,7 +143,7 @@ describe('slo transform template', () => { }, defer_validation: true, _meta: { - version: 3.2, + version: 3.3, managed: true, managed_by: 'observability', }, @@ -247,7 +247,7 @@ describe('slo transform template', () => { }, defer_validation: true, _meta: { - version: 3.2, + version: 3.3, managed: true, managed_by: 'observability', }, diff --git a/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts b/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts index f5075abac0c0a..1f4c3ee2e3bb3 100644 --- a/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts +++ b/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts @@ -33,6 +33,7 @@ import { GetSLOsOverview } from '../../services/get_slos_overview'; import type { IndicatorTypes } from '../../domain/models'; import { CreateSLO, + DefaultBurnRatesClient, DefaultSummaryClient, DefaultSummaryTransformManager, DefaultTransformManager, @@ -295,7 +296,8 @@ const getSLORoute = createSloServerRoute({ const soClient = (await context.core).savedObjects.client; const esClient = (await context.core).elasticsearch.client.asCurrentUser; const repository = new KibanaSavedObjectsSLORepository(soClient, logger); - const summaryClient = new DefaultSummaryClient(esClient); + const burnRatesClient = new DefaultBurnRatesClient(esClient); + const summaryClient = new DefaultSummaryClient(esClient, burnRatesClient); const defintionClient = new SloDefinitionClient(repository, esClient, logger); const getSLO = new GetSLO(defintionClient, summaryClient); diff --git a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/create_slo.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/create_slo.test.ts.snap index 6303588a918a6..8416373c460bf 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/create_slo.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/create_slo.test.ts.snap @@ -7,7 +7,7 @@ Array [ "description": "Ingest pipeline for SLO summary data [id: unique-id, revision: 1]", "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "description": "Ingest pipeline for SLO summary data [id: unique-id, revision: 1]", "id": ".slo-observability.summary.pipeline-unique-id-1", @@ -166,6 +166,93 @@ Array [ "value": "http://myhost.com/mock-server-basepath", }, }, + Object { + "script": Object { + "description": "Computes the last five minute burn rate value", + "lang": "painless", + "params": Object { + "isTimeslice": false, + "totalSlicesInRange": 0, + }, + "source": "def totalEvents = ctx[\\"fiveMinuteBurnRate\\"][\\"totalEvents\\"]; + def goodEvents = ctx[\\"fiveMinuteBurnRate\\"][\\"goodEvents\\"]; + def errorBudgetInitial = ctx[\\"errorBudgetInitial\\"]; + + if (totalEvents == null || totalEvents == 0) { + ctx[\\"fiveMinuteBurnRate\\"][\\"value\\"] = 0.0; + return; + } + + def totalSlicesInRange = params[\\"totalSlicesInRange\\"]; + def isTimeslice = params[\\"isTimeslice\\"]; + if (isTimeslice && totalSlicesInRange > 0) { + def badEvents = (double)totalEvents - (double)goodEvents; + def sliValue = 1.0 - (badEvents / (double)totalSlicesInRange); + ctx[\\"fiveMinuteBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + } else { + def sliValue = (double)goodEvents / (double)totalEvents; + ctx[\\"fiveMinuteBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + }", + }, + }, + Object { + "script": Object { + "description": "Computes the last hour burn rate value", + "lang": "painless", + "params": Object { + "isTimeslice": false, + "totalSlicesInRange": 0, + }, + "source": "def totalEvents = ctx[\\"oneHourBurnRate\\"][\\"totalEvents\\"]; + def goodEvents = ctx[\\"oneHourBurnRate\\"][\\"goodEvents\\"]; + def errorBudgetInitial = ctx[\\"errorBudgetInitial\\"]; + + if (totalEvents == null || totalEvents == 0) { + ctx[\\"oneHourBurnRate\\"][\\"value\\"] = 0.0; + return; + } + + def totalSlicesInRange = params[\\"totalSlicesInRange\\"]; + def isTimeslice = params[\\"isTimeslice\\"]; + if (isTimeslice && totalSlicesInRange > 0) { + def badEvents = (double)totalEvents - (double)goodEvents; + def sliValue = 1.0 - (badEvents / (double)totalSlicesInRange); + ctx[\\"oneHourBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + } else { + def sliValue = (double)goodEvents / (double)totalEvents; + ctx[\\"oneHourBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + }", + }, + }, + Object { + "script": Object { + "description": "Computes the last day burn rate value", + "lang": "painless", + "params": Object { + "isTimeslice": false, + "totalSlicesInRange": 0, + }, + "source": "def totalEvents = ctx[\\"oneDayBurnRate\\"][\\"totalEvents\\"]; + def goodEvents = ctx[\\"oneDayBurnRate\\"][\\"goodEvents\\"]; + def errorBudgetInitial = ctx[\\"errorBudgetInitial\\"]; + + if (totalEvents == null || totalEvents == 0) { + ctx[\\"oneDayBurnRate\\"][\\"value\\"] = 0.0; + return; + } + + def totalSlicesInRange = params[\\"totalSlicesInRange\\"]; + def isTimeslice = params[\\"isTimeslice\\"]; + if (isTimeslice && totalSlicesInRange > 0) { + def badEvents = (double)totalEvents - (double)goodEvents; + def sliValue = 1.0 - (badEvents / (double)totalSlicesInRange); + ctx[\\"oneDayBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + } else { + def sliValue = (double)goodEvents / (double)totalEvents; + ctx[\\"oneDayBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + }", + }, + }, ], }, ] @@ -179,6 +266,11 @@ Array [ "errorBudgetEstimated": false, "errorBudgetInitial": 0.010000000000000009, "errorBudgetRemaining": 1, + "fiveMinuteBurnRate": Object { + "goodEvents": 0, + "totalEvents": 0, + "value": 0, + }, "goodEvents": 0, "isTempDoc": true, "kibanaUrl": "http://myhost.com/mock-server-basepath", @@ -193,6 +285,16 @@ Array [ }, "name": null, }, + "oneDayBurnRate": Object { + "goodEvents": 0, + "totalEvents": 0, + "value": 0, + }, + "oneHourBurnRate": Object { + "goodEvents": 0, + "totalEvents": 0, + "value": 0, + }, "service": Object { "environment": "irrelevant", "name": "irrelevant", @@ -241,7 +343,7 @@ Array [ }, }, "id": "slo-unique-id", - "index": ".slo-observability.summary-v3.2.temp", + "index": ".slo-observability.summary-v3.3.temp", "refresh": true, }, ] diff --git a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/reset_slo.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/reset_slo.test.ts.snap index 9d231462c03af..721402bc88961 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/reset_slo.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/reset_slo.test.ts.snap @@ -203,7 +203,7 @@ exports[`ResetSLO resets all associated resources 8`] = ` "description": "Ingest pipeline for SLO summary data [id: irrelevant, revision: 1]", "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "description": "Ingest pipeline for SLO summary data [id: irrelevant, revision: 1]", "id": ".slo-observability.summary.pipeline-irrelevant-1", @@ -366,6 +366,93 @@ exports[`ResetSLO resets all associated resources 8`] = ` "value": "http://myhost.com/mock-server-basepath", }, }, + Object { + "script": Object { + "description": "Computes the last five minute burn rate value", + "lang": "painless", + "params": Object { + "isTimeslice": false, + "totalSlicesInRange": 0, + }, + "source": "def totalEvents = ctx[\\"fiveMinuteBurnRate\\"][\\"totalEvents\\"]; + def goodEvents = ctx[\\"fiveMinuteBurnRate\\"][\\"goodEvents\\"]; + def errorBudgetInitial = ctx[\\"errorBudgetInitial\\"]; + + if (totalEvents == null || totalEvents == 0) { + ctx[\\"fiveMinuteBurnRate\\"][\\"value\\"] = 0.0; + return; + } + + def totalSlicesInRange = params[\\"totalSlicesInRange\\"]; + def isTimeslice = params[\\"isTimeslice\\"]; + if (isTimeslice && totalSlicesInRange > 0) { + def badEvents = (double)totalEvents - (double)goodEvents; + def sliValue = 1.0 - (badEvents / (double)totalSlicesInRange); + ctx[\\"fiveMinuteBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + } else { + def sliValue = (double)goodEvents / (double)totalEvents; + ctx[\\"fiveMinuteBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + }", + }, + }, + Object { + "script": Object { + "description": "Computes the last hour burn rate value", + "lang": "painless", + "params": Object { + "isTimeslice": false, + "totalSlicesInRange": 0, + }, + "source": "def totalEvents = ctx[\\"oneHourBurnRate\\"][\\"totalEvents\\"]; + def goodEvents = ctx[\\"oneHourBurnRate\\"][\\"goodEvents\\"]; + def errorBudgetInitial = ctx[\\"errorBudgetInitial\\"]; + + if (totalEvents == null || totalEvents == 0) { + ctx[\\"oneHourBurnRate\\"][\\"value\\"] = 0.0; + return; + } + + def totalSlicesInRange = params[\\"totalSlicesInRange\\"]; + def isTimeslice = params[\\"isTimeslice\\"]; + if (isTimeslice && totalSlicesInRange > 0) { + def badEvents = (double)totalEvents - (double)goodEvents; + def sliValue = 1.0 - (badEvents / (double)totalSlicesInRange); + ctx[\\"oneHourBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + } else { + def sliValue = (double)goodEvents / (double)totalEvents; + ctx[\\"oneHourBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + }", + }, + }, + Object { + "script": Object { + "description": "Computes the last day burn rate value", + "lang": "painless", + "params": Object { + "isTimeslice": false, + "totalSlicesInRange": 0, + }, + "source": "def totalEvents = ctx[\\"oneDayBurnRate\\"][\\"totalEvents\\"]; + def goodEvents = ctx[\\"oneDayBurnRate\\"][\\"goodEvents\\"]; + def errorBudgetInitial = ctx[\\"errorBudgetInitial\\"]; + + if (totalEvents == null || totalEvents == 0) { + ctx[\\"oneDayBurnRate\\"][\\"value\\"] = 0.0; + return; + } + + def totalSlicesInRange = params[\\"totalSlicesInRange\\"]; + def isTimeslice = params[\\"isTimeslice\\"]; + if (isTimeslice && totalSlicesInRange > 0) { + def badEvents = (double)totalEvents - (double)goodEvents; + def sliValue = 1.0 - (badEvents / (double)totalSlicesInRange); + ctx[\\"oneDayBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + } else { + def sliValue = (double)goodEvents / (double)totalEvents; + ctx[\\"oneDayBurnRate\\"][\\"value\\"] = (1.0 - sliValue) / errorBudgetInitial; + }", + }, + }, ], }, ], @@ -468,6 +555,11 @@ exports[`ResetSLO resets all associated resources 11`] = ` "errorBudgetEstimated": false, "errorBudgetInitial": 0.0010000000000000009, "errorBudgetRemaining": 1, + "fiveMinuteBurnRate": Object { + "goodEvents": 0, + "totalEvents": 0, + "value": 0, + }, "goodEvents": 0, "isTempDoc": true, "kibanaUrl": "http://myhost.com/mock-server-basepath", @@ -482,6 +574,16 @@ exports[`ResetSLO resets all associated resources 11`] = ` }, "name": null, }, + "oneDayBurnRate": Object { + "goodEvents": 0, + "totalEvents": 0, + "value": 0, + }, + "oneHourBurnRate": Object { + "goodEvents": 0, + "totalEvents": 0, + "value": 0, + }, "service": Object { "environment": "irrelevant", "name": "irrelevant", @@ -534,7 +636,7 @@ exports[`ResetSLO resets all associated resources 11`] = ` }, }, "id": "slo-irrelevant", - "index": ".slo-observability.summary-v3.2.temp", + "index": ".slo-observability.summary-v3.3.temp", "refresh": true, }, ], diff --git a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_client.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_client.test.ts.snap index 15ed30430fea7..83e4a7af010d5 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_client.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_client.test.ts.snap @@ -11,6 +11,9 @@ Object { "isEstimated": false, "remaining": 0.80158, }, + "fiveMinuteBurnRate": 0.5, + "oneDayBurnRate": 0.7, + "oneHourBurnRate": 0.6, "sliValue": 0.990079, "status": "HEALTHY", }, @@ -28,6 +31,9 @@ Object { "isEstimated": false, "remaining": -99, }, + "fiveMinuteBurnRate": 0.5, + "oneDayBurnRate": 0.7, + "oneHourBurnRate": 0.6, "sliValue": 0.9, "status": "VIOLATED", }, @@ -45,6 +51,9 @@ Object { "isEstimated": false, "remaining": 0.80158, }, + "fiveMinuteBurnRate": 0.5, + "oneDayBurnRate": 0.7, + "oneHourBurnRate": 0.6, "sliValue": 0.990079, "status": "HEALTHY", }, diff --git a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_search_client.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_search_client.test.ts.snap index 76a022867cfcf..3aee32ab1b546 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_search_client.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/summary_search_client.test.ts.snap @@ -1,6 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP - exports[`Summary Search Client returns the summary documents without duplicate temporary summary documents 1`] = ` Array [ Object { @@ -47,6 +46,9 @@ Object { "isEstimated": false, "remaining": 1, }, + "fiveMinuteBurnRate": 0, + "oneDayBurnRate": 0, + "oneHourBurnRate": 0, "sliValue": -1, "status": "NO_DATA", "summaryUpdatedAt": null, @@ -63,6 +65,9 @@ Object { "isEstimated": false, "remaining": 1, }, + "fiveMinuteBurnRate": 0, + "oneDayBurnRate": 0, + "oneHourBurnRate": 0, "sliValue": -1, "status": "NO_DATA", "summaryUpdatedAt": null, @@ -79,6 +84,9 @@ Object { "isEstimated": false, "remaining": 1, }, + "fiveMinuteBurnRate": 0, + "oneDayBurnRate": 0, + "oneHourBurnRate": 0, "sliValue": -1, "status": "NO_DATA", "summaryUpdatedAt": null, @@ -95,6 +103,9 @@ Object { "isEstimated": false, "remaining": 1, }, + "fiveMinuteBurnRate": 0, + "oneDayBurnRate": 0, + "oneHourBurnRate": 0, "sliValue": -1, "status": "NO_DATA", "summaryUpdatedAt": null, @@ -111,6 +122,9 @@ Object { "isEstimated": false, "remaining": 1, }, + "fiveMinuteBurnRate": 0, + "oneDayBurnRate": 0, + "oneHourBurnRate": 0, "sliValue": -1, "status": "NO_DATA", "summaryUpdatedAt": null, diff --git a/x-pack/plugins/observability_solution/slo/server/services/find_slo.test.ts b/x-pack/plugins/observability_solution/slo/server/services/find_slo.test.ts index 183d4beee19dd..bb26ab235c9f4 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/find_slo.test.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/find_slo.test.ts @@ -91,6 +91,9 @@ describe('FindSLO', () => { remaining: 0.9, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, }, tags: ['critical', 'k8s'], createdAt: slo.createdAt.toISOString(), @@ -180,6 +183,9 @@ function summarySearchResult(slo: SLODefinition): Paginated { remaining: 0.9, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, }, }, ], diff --git a/x-pack/plugins/observability_solution/slo/server/services/get_slo.test.ts b/x-pack/plugins/observability_solution/slo/server/services/get_slo.test.ts index 49421887d3d8e..a3665294ab5c2 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/get_slo.test.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/get_slo.test.ts @@ -49,6 +49,9 @@ describe('GetSLO', () => { remaining: 0.9, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, }, }); @@ -91,6 +94,9 @@ describe('GetSLO', () => { remaining: 0.9, isEstimated: false, }, + fiveMinuteBurnRate: 0, + oneHourBurnRate: 0, + oneDayBurnRate: 0, }, tags: ['critical', 'k8s'], createdAt: slo.createdAt.toISOString(), diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_client.test.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_client.test.ts index 584aba75e22ff..120285f374f4d 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/summary_client.test.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_client.test.ts @@ -9,8 +9,10 @@ import { ElasticsearchClientMock, elasticsearchServiceMock } from '@kbn/core/ser import moment from 'moment'; import { SLO_DESTINATION_INDEX_PATTERN } from '../../common/constants'; import { Duration, DurationUnit } from '../domain/models'; +import { BurnRatesClient } from './burn_rates_client'; import { createSLO } from './fixtures/slo'; import { sevenDaysRolling, weeklyCalendarAligned } from './fixtures/time_window'; +import { createBurnRatesClientMock } from './mocks'; import { DefaultSummaryClient } from './summary_client'; const createEsResponse = (good: number = 90, total: number = 100) => ({ @@ -33,9 +35,17 @@ const createEsResponse = (good: number = 90, total: number = 100) => ({ describe('SummaryClient', () => { let esClientMock: ElasticsearchClientMock; + let burnRatesClientMock: jest.Mocked; beforeEach(() => { esClientMock = elasticsearchServiceMock.createElasticsearchClient(); + burnRatesClientMock = createBurnRatesClientMock(); + + burnRatesClientMock.calculate.mockResolvedValueOnce([ + { name: '5m', burnRate: 0.5, sli: 0.9 }, + { name: '1h', burnRate: 0.6, sli: 0.9 }, + { name: '1d', burnRate: 0.7, sli: 0.9 }, + ]); }); describe('fetchSummary', () => { @@ -43,7 +53,7 @@ describe('SummaryClient', () => { it('returns the summary', async () => { const slo = createSLO({ timeWindow: sevenDaysRolling() }); esClientMock.search.mockResolvedValueOnce(createEsResponse()); - const summaryClient = new DefaultSummaryClient(esClientMock); + const summaryClient = new DefaultSummaryClient(esClientMock, burnRatesClientMock); const result = await summaryClient.computeSummary({ slo }); @@ -78,7 +88,7 @@ describe('SummaryClient', () => { timeWindow: weeklyCalendarAligned(), }); esClientMock.search.mockResolvedValueOnce(createEsResponse()); - const summaryClient = new DefaultSummaryClient(esClientMock); + const summaryClient = new DefaultSummaryClient(esClientMock, burnRatesClientMock); await summaryClient.computeSummary({ slo }); @@ -121,7 +131,7 @@ describe('SummaryClient', () => { timeWindow: sevenDaysRolling(), }); esClientMock.search.mockResolvedValueOnce(createEsResponse()); - const summaryClient = new DefaultSummaryClient(esClientMock); + const summaryClient = new DefaultSummaryClient(esClientMock, burnRatesClientMock); const result = await summaryClient.computeSummary({ slo }); @@ -143,16 +153,8 @@ describe('SummaryClient', () => { }, }, aggs: { - good: { - sum: { - field: 'slo.isGoodSlice', - }, - }, - total: { - value_count: { - field: 'slo.isGoodSlice', - }, - }, + good: { sum: { field: 'slo.isGoodSlice' } }, + total: { value_count: { field: 'slo.isGoodSlice' } }, }, }); }); @@ -170,7 +172,7 @@ describe('SummaryClient', () => { timeWindow: weeklyCalendarAligned(), }); esClientMock.search.mockResolvedValueOnce(createEsResponse()); - const summaryClient = new DefaultSummaryClient(esClientMock); + const summaryClient = new DefaultSummaryClient(esClientMock, burnRatesClientMock); const result = await summaryClient.computeSummary({ slo }); @@ -196,16 +198,8 @@ describe('SummaryClient', () => { }, }, aggs: { - good: { - sum: { - field: 'slo.isGoodSlice', - }, - }, - total: { - value_count: { - field: 'slo.isGoodSlice', - }, - }, + good: { sum: { field: 'slo.isGoodSlice' } }, + total: { value_count: { field: 'slo.isGoodSlice' } }, }, }); }); diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_client.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_client.ts index 635dbdd654ead..0b9ee20062d1e 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/summary_client.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_client.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { AggregationsValueCountAggregate } from '@elastic/elasticsearch/lib/api/types'; import { AggregationsSumAggregate, AggregationsTopHitsAggregate, @@ -13,13 +14,16 @@ import { ElasticsearchClient } from '@kbn/core/server'; import { ALL_VALUE, calendarAlignedTimeWindowSchema, + Duration, + DurationUnit, occurrencesBudgetingMethodSchema, timeslicesBudgetingMethodSchema, } from '@kbn/slo-schema'; import { SLO_DESTINATION_INDEX_PATTERN } from '../../common/constants'; -import { Groupings, Meta, SLODefinition, Summary } from '../domain/models'; +import { DateRange, Groupings, Meta, SLODefinition, Summary } from '../domain/models'; import { computeSLI, computeSummaryStatus, toErrorBudget } from '../domain/services'; import { toDateRange } from '../domain/services/date_range'; +import { BurnRatesClient } from './burn_rates_client'; import { getFlattenedGroupings } from './utils'; import { computeTotalSlicesFromDateRange } from './utils/compute_total_slices_from_date_range'; @@ -44,7 +48,7 @@ export interface SummaryClient { } export class DefaultSummaryClient implements SummaryClient { - constructor(private esClient: ElasticsearchClient) {} + constructor(private esClient: ElasticsearchClient, private burnRatesClient: BurnRatesClient) {} async computeSummary({ slo, instanceId, remoteName }: Params): Promise { const dateRange = toDateRange(slo.timeWindow); @@ -103,45 +107,25 @@ export class DefaultSummaryClient implements SummaryClient { }, }, }), - ...(timeslicesBudgetingMethodSchema.is(slo.budgetingMethod) && { - good: { - sum: { field: 'slo.isGoodSlice' }, - }, - total: { - value_count: { field: 'slo.isGoodSlice' }, - }, - }), - ...(occurrencesBudgetingMethodSchema.is(slo.budgetingMethod) && { - good: { sum: { field: 'slo.numerator' } }, - total: { sum: { field: 'slo.denominator' } }, - }), + ...buildAggs(slo), }, }); - const good = result.aggregations?.good?.value ?? 0; - const total = result.aggregations?.total?.value ?? 0; const source = result.aggregations?.last_doc?.hits?.hits?.[0]?._source; const groupings = source?.slo?.groupings; - let sliValue; - if (timeslicesBudgetingMethodSchema.is(slo.budgetingMethod)) { - const totalSlices = computeTotalSlicesFromDateRange( - dateRange, - slo.objective.timesliceWindow! - ); - - sliValue = computeSLI(good, total, totalSlices); - } else { - sliValue = computeSLI(good, total); - } - - const initialErrorBudget = 1 - slo.objective.target; - const consumedErrorBudget = sliValue < 0 ? 0 : (1 - sliValue) / initialErrorBudget; - const errorBudget = toErrorBudget( - initialErrorBudget, - consumedErrorBudget, - calendarAlignedTimeWindowSchema.is(slo.timeWindow) && - occurrencesBudgetingMethodSchema.is(slo.budgetingMethod) + const sliValue = computeSliValue(slo, dateRange, result.aggregations); + const errorBudget = computeErrorBudget(slo, sliValue); + + const burnRates = await this.burnRatesClient.calculate( + slo, + instanceId ?? ALL_VALUE, + [ + { name: '5m', duration: new Duration(5, DurationUnit.Minute) }, + { name: '1h', duration: new Duration(1, DurationUnit.Hour) }, + { name: '1d', duration: new Duration(1, DurationUnit.Day) }, + ], + remoteName ); return { @@ -149,6 +133,9 @@ export class DefaultSummaryClient implements SummaryClient { sliValue, errorBudget, status: computeSummaryStatus(slo.objective, sliValue, errorBudget), + fiveMinuteBurnRate: getBurnRate('5m', burnRates), + oneHourBurnRate: getBurnRate('1h', burnRates), + oneDayBurnRate: getBurnRate('1d', burnRates), }, groupings: groupings ? getFlattenedGroupings({ groupBy: slo.groupBy, groupings }) : {}, meta: getMetaFields(slo, source ?? {}), @@ -156,6 +143,18 @@ export class DefaultSummaryClient implements SummaryClient { } } +function buildAggs(slo: SLODefinition) { + return timeslicesBudgetingMethodSchema.is(slo.budgetingMethod) + ? { + good: { sum: { field: 'slo.isGoodSlice' } }, + total: { value_count: { field: 'slo.isGoodSlice' } }, + } + : { + good: { sum: { field: 'slo.numerator' } }, + total: { sum: { field: 'slo.denominator' } }, + }; +} + function getMetaFields( slo: SLODefinition, source: { monitor?: { id?: string }; config_id?: string; observer?: { name?: string } } @@ -176,3 +175,41 @@ function getMetaFields( return {}; } } + +interface BurnRateBucket { + good: AggregationsSumAggregate; + total: AggregationsSumAggregate | AggregationsValueCountAggregate; +} + +function computeSliValue( + slo: SLODefinition, + dateRange: DateRange, + bucket: BurnRateBucket | undefined +) { + const good = bucket?.good?.value ?? 0; + const total = bucket?.total?.value ?? 0; + + if (timeslicesBudgetingMethodSchema.is(slo.budgetingMethod)) { + const totalSlices = computeTotalSlicesFromDateRange(dateRange, slo.objective.timesliceWindow!); + + return computeSLI(good, total, totalSlices); + } + + return computeSLI(good, total); +} + +function computeErrorBudget(slo: SLODefinition, sliValue: number) { + const initialErrorBudget = 1 - slo.objective.target; + const consumedErrorBudget = sliValue < 0 ? 0 : (1 - sliValue) / initialErrorBudget; + + return toErrorBudget( + initialErrorBudget, + consumedErrorBudget, + calendarAlignedTimeWindowSchema.is(slo.timeWindow) && + occurrencesBudgetingMethodSchema.is(slo.budgetingMethod) + ); +} + +function getBurnRate(burnRateWindow: string, burnRates: Array<{ name: string; burnRate: number }>) { + return burnRates.find(({ name }) => name === burnRateWindow)?.burnRate ?? 0; +} diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_search_client.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_search_client.ts index d99679fe01ac0..6493e613bbedc 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/summary_search_client.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_search_client.ts @@ -33,7 +33,14 @@ export interface SummaryResult { }; } -type SortField = 'error_budget_consumed' | 'error_budget_remaining' | 'sli_value' | 'status'; +type SortField = + | 'error_budget_consumed' + | 'error_budget_remaining' + | 'sli_value' + | 'status' + | 'burn_rate_5m' + | 'burn_rate_1h' + | 'burn_rate_1d'; export interface Sort { field: SortField; @@ -158,6 +165,9 @@ export class DefaultSummarySearchClient implements SummarySearchClient { sliValue: toHighPrecision(doc._source.sliValue), status: summaryDoc.status, summaryUpdatedAt: summaryDoc.summaryUpdatedAt, + fiveMinuteBurnRate: toHighPrecision(summaryDoc.fiveMinuteBurnRate?.value ?? 0), + oneHourBurnRate: toHighPrecision(summaryDoc.oneHourBurnRate?.value ?? 0), + oneDayBurnRate: toHighPrecision(summaryDoc.oneDayBurnRate?.value ?? 0), }, groupings: getFlattenedGroupings({ groupings: summaryDoc.slo.groupings, @@ -230,6 +240,12 @@ function toDocumentSortField(field: SortField) { return 'status'; case 'sli_value': return 'sliValue'; + case 'burn_rate_5m': + return 'fiveMinuteBurnRate.value'; + case 'burn_rate_1h': + return 'oneHourBurnRate.value'; + case 'burn_rate_1d': + return 'oneDayBurnRate.value'; default: assertNever(field); } diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/occurrences.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/occurrences.ts index 88d83a486d6c0..1dd2c0758096c 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/occurrences.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/occurrences.ts @@ -6,7 +6,6 @@ */ import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { SLODefinition } from '../../../domain/models'; import { getSLOSummaryPipelineId, getSLOSummaryTransformId, @@ -14,7 +13,9 @@ import { SLO_RESOURCES_VERSION, SLO_SUMMARY_DESTINATION_INDEX_NAME, } from '../../../../common/constants'; +import { SLODefinition } from '../../../domain/models'; import { getGroupBy } from './common'; +import { buildBurnRateAgg } from './utils'; export function generateSummaryTransformForOccurrences( slo: SLODefinition @@ -115,6 +116,9 @@ export function generateSummaryTransformForOccurrences( field: '@timestamp', }, }, + ...buildBurnRateAgg('fiveMinuteBurnRate', slo), + ...buildBurnRateAgg('oneHourBurnRate', slo), + ...buildBurnRateAgg('oneDayBurnRate', slo), }, }, description: `Summarise the rollup data of SLO: ${slo.name} [id: ${slo.id}, revision: ${slo.revision}].`, diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_calendar_aligned.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_calendar_aligned.ts index b0304316583b7..f5db77467c94d 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_calendar_aligned.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_calendar_aligned.ts @@ -6,7 +6,6 @@ */ import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { DurationUnit, SLODefinition } from '../../../domain/models'; import { getSLOSummaryPipelineId, getSLOSummaryTransformId, @@ -14,7 +13,9 @@ import { SLO_RESOURCES_VERSION, SLO_SUMMARY_DESTINATION_INDEX_NAME, } from '../../../../common/constants'; +import { DurationUnit, SLODefinition } from '../../../domain/models'; import { getGroupBy } from './common'; +import { buildBurnRateAgg } from './utils'; export function generateSummaryTransformForTimeslicesAndCalendarAligned( slo: SLODefinition @@ -142,6 +143,9 @@ export function generateSummaryTransformForTimeslicesAndCalendarAligned( field: '@timestamp', }, }, + ...buildBurnRateAgg('fiveMinuteBurnRate', slo), + ...buildBurnRateAgg('oneHourBurnRate', slo), + ...buildBurnRateAgg('oneDayBurnRate', slo), }, }, description: `Summarise the rollup data of SLO: ${slo.name} [id: ${slo.id}, revision: ${slo.revision}].`, diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_rolling.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_rolling.ts index 24273dd5c037d..05724cb9e43d6 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_rolling.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/timeslices_rolling.ts @@ -6,7 +6,6 @@ */ import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { SLODefinition } from '../../../domain/models'; import { getSLOSummaryPipelineId, getSLOSummaryTransformId, @@ -14,7 +13,9 @@ import { SLO_RESOURCES_VERSION, SLO_SUMMARY_DESTINATION_INDEX_NAME, } from '../../../../common/constants'; +import { SLODefinition } from '../../../domain/models'; import { getGroupBy } from './common'; +import { buildBurnRateAgg } from './utils'; export function generateSummaryTransformForTimeslicesAndRolling( slo: SLODefinition @@ -118,6 +119,10 @@ export function generateSummaryTransformForTimeslicesAndRolling( field: '@timestamp', }, }, + + ...buildBurnRateAgg('fiveMinuteBurnRate', slo), + ...buildBurnRateAgg('oneHourBurnRate', slo), + ...buildBurnRateAgg('oneDayBurnRate', slo), }, }, description: `Summarise the rollup data of SLO: ${slo.name} [id: ${slo.id}, revision: ${slo.revision}].`, diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/utils.test.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/utils.test.ts new file mode 100644 index 0000000000000..660c0bd18abff --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/utils.test.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { twoMinute } from '../../fixtures/duration'; +import { createSLOWithTimeslicesBudgetingMethod, createSLO } from '../../fixtures/slo'; +import { getFiveMinuteRange, getOneDayRange, getOneHourRange } from './utils'; + +describe('getFiveMinuteRange', () => { + it('should return range for 5 minutes including slo delay', () => { + const slo = createSLOWithTimeslicesBudgetingMethod({ + objective: { + target: 0.98, + timesliceTarget: 0.9, + timesliceWindow: twoMinute(), + }, + }); + + const range = getFiveMinuteRange(slo); + expect(range).toEqual({ + gte: `now-540s/m`, + lte: `now-240s/m`, + }); + }); +}); + +describe('getOneHourRange', () => { + it('should return range for 1 hour including slo delay', () => { + const slo = createSLOWithTimeslicesBudgetingMethod({ + objective: { + target: 0.98, + timesliceTarget: 0.9, + timesliceWindow: twoMinute(), + }, + }); + const range = getOneHourRange(slo); + expect(range).toEqual({ + gte: `now-3840s/m`, + lte: `now-240s/m`, + }); + }); +}); + +describe('getOneDayRange', () => { + it('should return range for 1 day including slo delay', () => { + const slo = createSLO(); + + const range = getOneDayRange(slo); + expect(range).toEqual({ + gte: `now-86580s/m`, + lte: `now-180s/m`, + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/utils.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/utils.ts new file mode 100644 index 0000000000000..fb1ec8aa5eadc --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/generators/utils.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { occurrencesBudgetingMethodSchema, timeslicesBudgetingMethodSchema } from '@kbn/slo-schema'; +import { SLODefinition } from '../../../domain/models'; +import { getDelayInSecondsFromSLO } from '../../../domain/services/get_delay_in_seconds_from_slo'; + +const FIVE_MINUTES_IN_SECONDS = 300; +const ONE_HOUR_IN_SECONDS = 3600; +const ONE_DAY_IN_SECONDS = 86400; + +export function getFiveMinuteRange(slo: SLODefinition) { + const delayInSeconds = getDelayInSecondsFromSLO(slo); + return { + gte: `now-${FIVE_MINUTES_IN_SECONDS + delayInSeconds}s/m`, + lte: `now-${delayInSeconds}s/m`, + }; +} + +export function getOneHourRange(slo: SLODefinition) { + const delayInSeconds = getDelayInSecondsFromSLO(slo); + return { + gte: `now-${ONE_HOUR_IN_SECONDS + delayInSeconds}s/m`, + lte: `now-${delayInSeconds}s/m`, + }; +} + +export function getOneDayRange(slo: SLODefinition) { + const delayInSeconds = getDelayInSecondsFromSLO(slo); + return { + gte: `now-${ONE_DAY_IN_SECONDS + delayInSeconds}s/m`, + lte: `now-${delayInSeconds}s/m`, + }; +} + +export function buildBurnRateAgg( + aggKey: 'fiveMinuteBurnRate' | 'oneHourBurnRate' | 'oneDayBurnRate', + slo: SLODefinition +) { + const aggKeyToRangeMap = { + fiveMinuteBurnRate: getFiveMinuteRange, + oneHourBurnRate: getOneHourRange, + oneDayBurnRate: getOneDayRange, + }; + + return { + [aggKey]: { + filter: { + range: { + '@timestamp': aggKeyToRangeMap[aggKey](slo), + }, + }, + ...(occurrencesBudgetingMethodSchema.is(slo.budgetingMethod) && { + aggs: { + goodEvents: { + sum: { + field: 'slo.numerator', + }, + }, + totalEvents: { + sum: { + field: 'slo.denominator', + }, + }, + }, + }), + ...(timeslicesBudgetingMethodSchema.is(slo.budgetingMethod) && { + aggs: { + goodEvents: { + sum: { + field: 'slo.isGoodSlice', + }, + }, + totalEvents: { + value_count: { + field: 'slo.isGoodSlice', + }, + }, + }, + }), + }, + }; +} diff --git a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/helpers/create_temp_summary.ts b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/helpers/create_temp_summary.ts index fc2fdc6f22f2e..c473ed184f40c 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/helpers/create_temp_summary.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/summary_transform_generator/helpers/create_temp_summary.ts @@ -63,6 +63,22 @@ export interface EsSummaryDocument { kibanaUrl?: string; // >= 8.14 summaryUpdatedAt: string | null; latestSliTimestamp: string | null; + // >= 8.15 + fiveMinuteBurnRate?: { + totalEvents: number; + goodEvents: number; + value: number; + }; + oneHourBurnRate?: { + totalEvents: number; + goodEvents: number; + value: number; + }; + oneDayBurnRate?: { + totalEvents: number; + goodEvents: number; + value: number; + }; } export function createTempSummaryDocument( @@ -131,6 +147,22 @@ export function createTempSummaryDocument( kibanaUrl: basePath.publicBaseUrl ?? '', // added in 8.14, i.e. might be undefined summaryUpdatedAt: null, latestSliTimestamp: null, + // Added in 8.15 + fiveMinuteBurnRate: { + totalEvents: 0, + goodEvents: 0, + value: 0, + }, + oneHourBurnRate: { + totalEvents: 0, + goodEvents: 0, + value: 0, + }, + oneDayBurnRate: { + totalEvents: 0, + goodEvents: 0, + value: 0, + }, }; return doc; diff --git a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap index e3d9de62d62ce..dcb36e3ac06dd 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap @@ -400,13 +400,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -571,13 +571,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -742,13 +742,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { diff --git a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap index c5021f57229f0..53af7ad5777ce 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap @@ -376,13 +376,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -534,13 +534,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -692,13 +692,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { diff --git a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/histogram.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/histogram.test.ts.snap index f9015e64984d9..c0dae33244b3d 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/histogram.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/histogram.test.ts.snap @@ -77,13 +77,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -229,13 +229,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -381,13 +381,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { diff --git a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/kql_custom.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/kql_custom.test.ts.snap index b85642d631f26..4f5b239e982cf 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/kql_custom.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/kql_custom.test.ts.snap @@ -118,13 +118,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -243,13 +243,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -368,13 +368,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { diff --git a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/metric_custom.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/metric_custom.test.ts.snap index e123f9cf28ba6..351c4d57b8c5c 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/metric_custom.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/metric_custom.test.ts.snap @@ -117,13 +117,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -280,13 +280,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { diff --git a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/timeslice_metric.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/timeslice_metric.test.ts.snap index 91c884611700f..6ee25d4927910 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/timeslice_metric.test.ts.snap +++ b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/__snapshots__/timeslice_metric.test.ts.snap @@ -33,13 +33,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { @@ -247,13 +247,13 @@ Object { "_meta": Object { "managed": true, "managed_by": "observability", - "version": 3.2, + "version": 3.3, }, "defer_validation": true, "description": "Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]", "dest": Object { - "index": ".slo-observability.sli-v3.2", - "pipeline": ".slo-observability.sli.pipeline-v3.2", + "index": ".slo-observability.sli-v3.3", + "pipeline": ".slo-observability.sli.pipeline-v3.3", }, "frequency": "1m", "pivot": Object { diff --git a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/synthetics_availability.test.ts b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/synthetics_availability.test.ts index b292b8d12f342..f59c1fd9a96e6 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/transform_generators/synthetics_availability.test.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/transform_generators/synthetics_availability.test.ts @@ -26,13 +26,13 @@ describe('Synthetics Availability Transform Generator', () => { _meta: { managed: true, managed_by: 'observability', - version: 3.2, + version: 3.3, }, defer_validation: true, description: 'Rolled-up SLI data for SLO: irrelevant [id: irrelevant, revision: 1]', dest: { - index: '.slo-observability.sli-v3.2', - pipeline: '.slo-observability.sli.pipeline-v3.2', + index: '.slo-observability.sli-v3.3', + pipeline: '.slo-observability.sli.pipeline-v3.3', }, frequency: '1m', pivot: { diff --git a/x-pack/plugins/reporting/public/plugin.ts b/x-pack/plugins/reporting/public/plugin.ts index 1579bf0cf9377..fe069f7a5d6f5 100644 --- a/x-pack/plugins/reporting/public/plugin.ts +++ b/x-pack/plugins/reporting/public/plugin.ts @@ -148,6 +148,7 @@ export class ReportingPublicPlugin id: 'reporting', title: this.title, order: 3, + keywords: ['reports', 'report', 'reporting'], mount: async (params) => { params.setBreadcrumbs([{ text: this.breadcrumbText }]); const [[coreStart, startDeps], { mountManagementSection }] = await Promise.all([ diff --git a/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts b/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts index 12b3a6f62c32c..ddc95d9dd4346 100644 --- a/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts +++ b/x-pack/plugins/search_playground/server/lib/conversational_chain.test.ts @@ -6,13 +6,12 @@ */ import type { Client } from '@elastic/elasticsearch'; -import { createAssist as Assist } from '../utils/assist'; -import { clipContext, ConversationalChain } from './conversational_chain'; -import { FakeListChatModel } from '@langchain/core/utils/testing'; -import { FakeListLLM } from 'langchain/llms/fake'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import { experimental_StreamData, Message } from 'ai'; import { ChatPromptTemplate } from '@langchain/core/prompts'; +import { FakeListChatModel, FakeStreamingLLM } from '@langchain/core/utils/testing'; +import { Message, experimental_StreamData } from 'ai'; +import { createAssist as Assist } from '../utils/assist'; +import { ConversationalChain, clipContext } from './conversational_chain'; describe('conversational chain', () => { const createTestChain = async ({ @@ -76,7 +75,7 @@ describe('conversational chain', () => { ? new FakeListChatModel({ responses, }) - : new FakeListLLM({ responses }); + : new FakeStreamingLLM({ responses }); const aiClient = Assist({ es_client: mockElasticsearchClient as unknown as Client, diff --git a/x-pack/plugins/security_solution/public/cloud_security_posture/cloud_security_posture_pli_auth_block_extension.tsx b/x-pack/plugins/security_solution/public/cloud_security_posture/cloud_security_posture_pli_auth_block_extension.tsx new file mode 100644 index 0000000000000..9abc7bcfbdf82 --- /dev/null +++ b/x-pack/plugins/security_solution/public/cloud_security_posture/cloud_security_posture_pli_auth_block_extension.tsx @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PropsWithChildren } from 'react'; +import React, { memo } from 'react'; +import { useUpsellingComponent } from '../common/hooks/use_upselling'; + +export const CloudSecurityPosturePliAuthBlockExtension = memo>( + ({ children }) => { + const Component = useUpsellingComponent('cloud_security_posture_integration_installation'); + if (!Component) { + return <>{children}; + } + return ; + } +); + +CloudSecurityPosturePliAuthBlockExtension.displayName = 'CloudSecurityPosturePliAuthBlockExtension'; diff --git a/x-pack/plugins/security_solution/public/cloud_security_posture/lazy_cloud_security_posture_pli_auth_block_extension.tsx b/x-pack/plugins/security_solution/public/cloud_security_posture/lazy_cloud_security_posture_pli_auth_block_extension.tsx new file mode 100644 index 0000000000000..1e4ddebb236ff --- /dev/null +++ b/x-pack/plugins/security_solution/public/cloud_security_posture/lazy_cloud_security_posture_pli_auth_block_extension.tsx @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { lazy } from 'react'; +import type { FleetUiExtensionGetterOptions } from '../common/types'; + +export const getLazyCloudSecurityPosturePliAuthBlockExtension = ({ + coreStart, + depsStart, + services, +}: FleetUiExtensionGetterOptions) => + lazy(async () => { + const [{ withSecurityContext }, { CloudSecurityPosturePliAuthBlockExtension }] = + await Promise.all([ + import('../common/components/with_security_context/with_security_context'), + import('./cloud_security_posture_pli_auth_block_extension'), + ]); + return { + default: withSecurityContext({ + coreStart, + depsStart, + services, + WrappedComponent: CloudSecurityPosturePliAuthBlockExtension, + }), + }; + }); diff --git a/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx b/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx index 6efaaa5d01ccd..16fabb97fb464 100644 --- a/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx +++ b/x-pack/plugins/security_solution/public/common/components/header_actions/actions.tsx @@ -11,6 +11,7 @@ import { EuiButtonIcon, EuiToolTip } from '@elastic/eui'; import styled from 'styled-components'; import { TimelineTabs, TableId } from '@kbn/securitysolution-data-table'; +import { selectTimelineById } from '../../../timelines/store/selectors'; import { eventHasNotes, getEventType, @@ -18,7 +19,7 @@ import { } from '../../../timelines/components/timeline/body/helpers'; import { getScopedActions, isTimelineScope } from '../../../helpers'; import { useIsInvestigateInResolverActionEnabled } from '../../../detections/components/alerts_table/timeline_actions/investigate_in_resolver'; -import { timelineActions, timelineSelectors } from '../../../timelines/store'; +import { timelineActions } from '../../../timelines/store'; import type { ActionProps, OnPinEvent } from '../../../../common/types'; import { TimelineId } from '../../../../common/types'; import { AddEventNoteAction } from './add_note_icon_item'; @@ -66,11 +67,10 @@ const ActionsComponent: React.FC = ({ 'unifiedComponentsInTimelineEnabled' ); const emptyNotes: string[] = []; - const getTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const timelineType = useShallowEqualSelector( - (state) => - (isTimelineScope(timelineId) ? getTimeline(state, timelineId) : timelineDefaults).timelineType + const { timelineType } = useShallowEqualSelector((state) => + isTimelineScope(timelineId) ? selectTimelineById(state, timelineId) : timelineDefaults ); + const { startTransaction } = useStartTransaction(); const isEnterprisePlus = useLicense().isEnterprise(); @@ -213,8 +213,8 @@ const ActionsComponent: React.FC = ({ onEventDetailsPanelOpened(); }, [activeStep, incrementStep, isTourAnchor, isTourShown, onEventDetailsPanelOpened]); const showExpandEvent = useMemo( - () => !unifiedComponentsInTimelineEnabled || isEventViewer || timelineId !== TimelineId.active, - [isEventViewer, timelineId, unifiedComponentsInTimelineEnabled] + () => !unifiedComponentsInTimelineEnabled || isEventViewer, + [isEventViewer, unifiedComponentsInTimelineEnabled] ); return ( diff --git a/x-pack/plugins/security_solution/public/common/components/header_actions/header_actions.tsx b/x-pack/plugins/security_solution/public/common/components/header_actions/header_actions.tsx index d65b6035eaeea..7b60434d5c288 100644 --- a/x-pack/plugins/security_solution/public/common/components/header_actions/header_actions.tsx +++ b/x-pack/plugins/security_solution/public/common/components/header_actions/header_actions.tsx @@ -16,8 +16,7 @@ import { TimelineTabs, TimelineId } from '../../../../common/types'; import { isFullScreen } from '../../../timelines/components/timeline/body/column_headers'; import { isActiveTimeline } from '../../../helpers'; import { getColumnHeader } from '../../../timelines/components/timeline/body/column_headers/helpers'; -import { timelineActions, timelineSelectors } from '../../../timelines/store'; -import { useDeepEqualSelector } from '../../hooks/use_selector'; +import { timelineActions } from '../../../timelines/store'; import { useGlobalFullScreen, useTimelineFullScreen } from '../../containers/use_full_screen'; import { useKibana } from '../../lib/kibana'; import { DEFAULT_ACTION_BUTTON_WIDTH } from '.'; @@ -27,6 +26,8 @@ import { EXIT_FULL_SCREEN } from '../exit_full_screen/translations'; import { EventsSelect } from '../../../timelines/components/timeline/body/column_headers/events_select'; import * as i18n from './translations'; import { useIsExperimentalFeatureEnabled } from '../../hooks/use_experimental_features'; +import { useDeepEqualSelector } from '../../hooks/use_selector'; +import { selectTimelineById } from '../../../timelines/store/selectors'; const SortingColumnsContainer = styled.div` button { @@ -90,14 +91,14 @@ const HeaderActionsComponent: React.FC = memo( const { timelineFullScreen, setTimelineFullScreen } = useTimelineFullScreen(); const dispatch = useDispatch(); - const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const { defaultColumns } = useDeepEqualSelector((state) => - getManageTimeline(state, timelineId) - ); const unifiedComponentsInTimelineEnabled = useIsExperimentalFeatureEnabled( 'unifiedComponentsInTimelineEnabled' ); + const { defaultColumns } = useDeepEqualSelector((state) => + selectTimelineById(state, timelineId) + ); + const toggleFullScreen = useCallback(() => { if (timelineId === TimelineId.active) { setTimelineFullScreen(!timelineFullScreen); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/index.ts b/x-pack/plugins/security_solution/public/common/components/with_security_context/index.ts similarity index 100% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/index.ts rename to x-pack/plugins/security_solution/public/common/components/with_security_context/index.ts diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/render_context_providers.tsx b/x-pack/plugins/security_solution/public/common/components/with_security_context/render_context_providers.tsx similarity index 68% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/render_context_providers.tsx rename to x-pack/plugins/security_solution/public/common/components/with_security_context/render_context_providers.tsx index 4ad30f3945ee6..0d493f1e305d5 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/render_context_providers.tsx +++ b/x-pack/plugins/security_solution/public/common/components/with_security_context/render_context_providers.tsx @@ -11,14 +11,14 @@ import { Provider as ReduxStoreProvider } from 'react-redux'; import type { Store } from 'redux'; import { NavigationProvider } from '@kbn/security-solution-navigation'; import type { UpsellingService } from '@kbn/security-solution-upselling/service'; -import { UpsellingProvider } from '../../../../../../../common/components/upselling_provider'; -import { UserPrivilegesProvider } from '../../../../../../../common/components/user_privileges/user_privileges_context'; -import type { SecuritySolutionQueryClient } from '../../../../../../../common/containers/query_client/query_client_provider'; -import { ReactQueryClientProvider } from '../../../../../../../common/containers/query_client/query_client_provider'; -import { SecuritySolutionStartDependenciesContext } from '../../../../../../../common/components/user_privileges/endpoint/security_solution_start_dependencies'; -import { CurrentLicense } from '../../../../../../../common/components/current_license'; -import type { StartPlugins } from '../../../../../../../types'; -import { useKibana } from '../../../../../../../common/lib/kibana'; +import { UpsellingProvider } from '../upselling_provider'; +import { UserPrivilegesProvider } from '../user_privileges/user_privileges_context'; +import type { SecuritySolutionQueryClient } from '../../containers/query_client/query_client_provider'; +import { ReactQueryClientProvider } from '../../containers/query_client/query_client_provider'; +import { SecuritySolutionStartDependenciesContext } from '../user_privileges/endpoint/security_solution_start_dependencies'; +import { CurrentLicense } from '../current_license'; +import type { StartPlugins } from '../../../types'; +import { useKibana } from '../../lib/kibana'; export type RenderContextProvidersProps = PropsWithChildren<{ store: Store; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/store.ts b/x-pack/plugins/security_solution/public/common/components/with_security_context/store.ts similarity index 76% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/store.ts rename to x-pack/plugins/security_solution/public/common/components/with_security_context/store.ts index 512408b5e27c3..5a1179a4f5695 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/store.ts +++ b/x-pack/plugins/security_solution/public/common/components/with_security_context/store.ts @@ -8,14 +8,14 @@ import type { Dispatch, Middleware, PreloadedState, ReducersMapObject } from 'redux'; import { applyMiddleware, combineReducers, compose, createStore } from 'redux'; import type { CoreStart } from '@kbn/core/public'; -import { managementReducer } from '../../../../../../store/reducer'; -import { appReducer } from '../../../../../../../common/store/app'; -import { ExperimentalFeaturesService } from '../../../../../../../common/experimental_features_service'; -import { managementMiddlewareFactory } from '../../../../../../store/middleware'; -import type { StartPlugins } from '../../../../../../../types'; -import type { State } from '../../../../../../../common/store'; -import type { AppAction } from '../../../../../../../common/store/actions'; -import type { Immutable } from '../../../../../../../../common/endpoint/types'; +import { managementReducer } from '../../../management/store/reducer'; +import { appReducer } from '../../store/app'; +import { ExperimentalFeaturesService } from '../../experimental_features_service'; +import { managementMiddlewareFactory } from '../../../management/store/middleware'; +import type { StartPlugins } from '../../../types'; +import type { State } from '../../store'; +import type { AppAction } from '../../store/actions'; +import type { Immutable } from '../../../../common/endpoint/types'; type ComposeType = typeof compose; declare global { diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/with_security_context.tsx b/x-pack/plugins/security_solution/public/common/components/with_security_context/with_security_context.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/components/with_security_context/with_security_context.tsx rename to x-pack/plugins/security_solution/public/common/components/with_security_context/with_security_context.tsx diff --git a/x-pack/plugins/security_solution/public/common/types.ts b/x-pack/plugins/security_solution/public/common/types.ts index 02cc712b6ec90..bf92b43245252 100644 --- a/x-pack/plugins/security_solution/public/common/types.ts +++ b/x-pack/plugins/security_solution/public/common/types.ts @@ -8,6 +8,9 @@ import type { ResponseErrorAttributes } from '@kbn/core/server'; import type { DataViewBase } from '@kbn/es-query'; import type { FieldSpec } from '@kbn/data-views-plugin/common'; +import type { CoreStart } from '@kbn/core-lifecycle-browser'; +import type { UpsellingService } from '@kbn/security-solution-upselling/service'; +import type { StartPlugins } from '../types'; export interface ServerApiError { statusCode: number; @@ -32,3 +35,11 @@ export interface SecuritySolutionDataViewBase extends DataViewBase { export type AlertWorkflowStatus = 'open' | 'closed' | 'acknowledged'; export type Refetch = () => void; + +export interface FleetUiExtensionGetterOptions { + coreStart: CoreStart; + depsStart: Pick; + services: { + upsellingService: UpsellingService; + }; +} diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx index 0143b584ea8c5..d18a4c5bf658c 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx @@ -152,8 +152,9 @@ const AlertContextMenuComponent: React.FC = ({ refetchQuery([timelineQuery]); } else { refetchQuery(globalQuery); - if (refetch) refetch(); } + + if (refetch) refetch(); }, [scopeId, globalQuery, timelineQuery, refetch]); const ruleIndex = diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension.tsx index 144ecbd4ab157..93e6536977ba0 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension.tsx @@ -6,7 +6,7 @@ */ import { lazy } from 'react'; -import type { FleetUiExtensionGetterOptions } from './types'; +import type { FleetUiExtensionGetterOptions } from '../../../../../common/types'; export const getLazyEndpointAgentTamperProtectionExtension = ({ coreStart, @@ -16,7 +16,7 @@ export const getLazyEndpointAgentTamperProtectionExtension = ({ lazy(async () => { const [{ withSecurityContext }, { EndpointAgentTamperProtectionExtension }] = await Promise.all( [ - import('./components/with_security_context/with_security_context'), + import('../../../../../common/components/with_security_context/with_security_context'), import('./endpoint_agent_tamper_protection_extension'), ] ); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_generic_errors_list.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_generic_errors_list.tsx index 07f13e6759891..873c3a6d9aca3 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_generic_errors_list.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_generic_errors_list.tsx @@ -10,7 +10,7 @@ import type { PackageGenericErrorsListComponent, PackageGenericErrorsListProps, } from '@kbn/fleet-plugin/public'; -import type { FleetUiExtensionGetterOptions } from './types'; +import type { FleetUiExtensionGetterOptions } from '../../../../../common/types'; export const getLazyEndpointGenericErrorsListExtension = ({ coreStart, @@ -19,7 +19,7 @@ export const getLazyEndpointGenericErrorsListExtension = ({ }: FleetUiExtensionGetterOptions) => { return lazy(async () => { const [{ withSecurityContext }, { EndpointGenericErrorsList }] = await Promise.all([ - import('./components/with_security_context/with_security_context'), + import('../../../../../common/components/with_security_context/with_security_context'), import('./endpoint_generic_errors_list'), ]); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_package_custom_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_package_custom_extension.tsx index e122ed4c4b26f..81c8ff33ec45a 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_package_custom_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_package_custom_extension.tsx @@ -7,7 +7,7 @@ import { lazy } from 'react'; import type { PackageCustomExtensionComponent } from '@kbn/fleet-plugin/public'; -import type { FleetUiExtensionGetterOptions } from './types'; +import type { FleetUiExtensionGetterOptions } from '../../../../../common/types'; export const getLazyEndpointPackageCustomExtension = ({ coreStart, @@ -16,7 +16,7 @@ export const getLazyEndpointPackageCustomExtension = ({ }: FleetUiExtensionGetterOptions) => { return lazy(async () => { const [{ withSecurityContext }, { EndpointPackageCustomExtension }] = await Promise.all([ - import('./components/with_security_context/with_security_context'), + import('../../../../../common/components/with_security_context/with_security_context'), import('./endpoint_package_custom_extension'), ]); return { diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_create_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_create_extension.tsx index 5955661c82864..51325e74f7570 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_create_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_create_extension.tsx @@ -7,7 +7,7 @@ import { lazy } from 'react'; import type { PackagePolicyCreateExtensionComponent } from '@kbn/fleet-plugin/public'; -import type { FleetUiExtensionGetterOptions } from './types'; +import type { FleetUiExtensionGetterOptions } from '../../../../../common/types'; export const getLazyEndpointPolicyCreateExtension = ({ coreStart, @@ -16,7 +16,7 @@ export const getLazyEndpointPolicyCreateExtension = ({ }: FleetUiExtensionGetterOptions) => { return lazy(async () => { const [{ withSecurityContext }, { EndpointPolicyCreateExtension }] = await Promise.all([ - import('./components/with_security_context/with_security_context'), + import('../../../../../common/components/with_security_context/with_security_context'), import('./endpoint_policy_create_extension'), ]); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_edit_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_edit_extension.tsx index 57b1c5b23c15e..80d36a7803733 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_edit_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_edit_extension.tsx @@ -10,7 +10,7 @@ import type { PackagePolicyEditExtensionComponent, PackagePolicyEditExtensionComponentProps, } from '@kbn/fleet-plugin/public'; -import type { FleetUiExtensionGetterOptions } from './types'; +import type { FleetUiExtensionGetterOptions } from '../../../../../common/types'; export const getLazyEndpointPolicyEditExtension = ({ coreStart, @@ -19,7 +19,7 @@ export const getLazyEndpointPolicyEditExtension = ({ }: FleetUiExtensionGetterOptions) => { return lazy(async () => { const [{ withSecurityContext }, { EndpointPolicyEditExtension }] = await Promise.all([ - import('./components/with_security_context/with_security_context'), + import('../../../../../common/components/with_security_context/with_security_context'), import('./endpoint_policy_edit_extension/endpoint_policy_edit_extension'), ]); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_response_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_response_extension.tsx index 88a49965dd89a..3a596bd4c6f92 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_response_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_response_extension.tsx @@ -10,7 +10,7 @@ import type { PackagePolicyResponseExtensionComponent, PackagePolicyResponseExtensionComponentProps, } from '@kbn/fleet-plugin/public'; -import type { FleetUiExtensionGetterOptions } from './types'; +import type { FleetUiExtensionGetterOptions } from '../../../../../common/types'; export const getLazyEndpointPolicyResponseExtension = ({ coreStart, @@ -19,7 +19,7 @@ export const getLazyEndpointPolicyResponseExtension = ({ }: FleetUiExtensionGetterOptions) => { return lazy(async () => { const [{ withSecurityContext }, { EndpointPolicyResponseExtension }] = await Promise.all([ - import('./components/with_security_context/with_security_context'), + import('../../../../../common/components/with_security_context/with_security_context'), import('./endpoint_policy_response_extension'), ]); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/mocks.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/mocks.tsx index 7bad12cc0be9d..945a841c132fd 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/mocks.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/mocks.tsx @@ -16,9 +16,9 @@ import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { deepFreeze } from '@kbn/std'; +import { createFleetContextReduxStore } from '../../../../../common/components/with_security_context/store'; import type { AppContextTestRender, UiRender } from '../../../../../common/mock/endpoint'; import { createAppRootMockRenderer } from '../../../../../common/mock/endpoint'; -import { createFleetContextReduxStore } from './components/with_security_context/store'; import type { ExperimentalFeatures } from '../../../../../../common/experimental_features'; import { allowedExperimentalValues } from '../../../../../../common/experimental_features'; import type { State } from '../../../../../common/store'; @@ -26,7 +26,7 @@ import { mockGlobalState } from '../../../../../common/mock'; import { managementReducer } from '../../../../store/reducer'; import { appReducer } from '../../../../../common/store/app'; import { ExperimentalFeaturesService } from '../../../../../common/experimental_features_service'; -import { RenderContextProviders } from './components/with_security_context/render_context_providers'; +import { RenderContextProviders } from '../../../../../common/components/with_security_context/render_context_providers'; import type { AppAction } from '../../../../../common/store/actions'; // Defined a private custom reducer that reacts to an action that enables us to update the diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/types.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/types.ts deleted file mode 100644 index 1e5b4260b2148..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { CoreStart } from '@kbn/core-lifecycle-browser'; -import type { UpsellingService } from '@kbn/security-solution-upselling/service'; -import type { StartPlugins } from '../../../../../types'; - -export interface FleetUiExtensionGetterOptions { - coreStart: CoreStart; - depsStart: Pick; - services: { - upsellingService: UpsellingService; - }; -} diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index 7b0ff954371c0..991f591773aa7 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -20,8 +20,8 @@ import type { import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import type { TriggersAndActionsUIPublicPluginSetup } from '@kbn/triggers-actions-ui-plugin/public'; +import { getLazyCloudSecurityPosturePliAuthBlockExtension } from './cloud_security_posture/lazy_cloud_security_posture_pli_auth_block_extension'; import { getLazyEndpointAgentTamperProtectionExtension } from './management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension'; -import type { FleetUiExtensionGetterOptions } from './management/pages/policy/view/ingest_manager_integration/types'; import type { PluginSetup, PluginStart, @@ -39,7 +39,7 @@ import { APP_ID, APP_UI_ID, APP_PATH, APP_ICON_SOLUTION } from '../common/consta import type { AppLinkItems } from './common/links'; import { updateAppLinks, type LinksPermissions } from './common/links'; import { registerDeepLinksUpdater } from './common/links/deep_links'; -import type { SecuritySolutionUiConfigType } from './common/types'; +import type { FleetUiExtensionGetterOptions, SecuritySolutionUiConfigType } from './common/types'; import { getLazyEndpointPolicyEditExtension } from './management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_edit_extension'; import { getLazyEndpointPolicyCreateExtension } from './management/pages/policy/view/ingest_manager_integration/lazy_endpoint_policy_create_extension'; @@ -263,6 +263,12 @@ export class Plugin implements IPlugin { }); test('it renders correct tooltip for NotesButton - timeline template', () => { - (useShallowEqualSelector as jest.Mock).mockReturnValue(TimelineType.template); + (useShallowEqualSelector as jest.Mock).mockReturnValue({ + timelineType: TimelineType.template, + }); const wrapper = mount(, { wrappingComponent: TestProviders }); expect(wrapper.find('[data-test-subj="add-note"]').prop('toolTip')).toEqual( NOTES_DISABLE_TOOLTIP ); - (useShallowEqualSelector as jest.Mock).mockReturnValue(TimelineType.default); + (useShallowEqualSelector as jest.Mock).mockReturnValue({ timelineType: TimelineType.default }); }); test('it does NOT render a pin button when isEventViewer is true', () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/unified_timeline_body.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/unified_timeline_body.test.tsx index 401fe8763ada5..21a923653237a 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/unified_timeline_body.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/unified_timeline_body.test.tsx @@ -46,6 +46,8 @@ const defaultProps: UnifiedTimelineBodyProps = { activePage: 0, querySize: 0, }, + eventIdToNoteIds: {} as Record, + pinnedEventIds: {} as Record, }; const renderTestComponents = (props?: UnifiedTimelineBodyProps) => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx index 99952f170f13c..b9c8fd9edada5 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx @@ -92,8 +92,6 @@ export const EqlTabContentComponent: React.FC = ({ } = useSourcererDataView(SourcererScopeName.timeline); const { augmentedColumnHeaders, timelineQueryFieldsFromColumns } = useTimelineColumns(columns); - const leadingControlColumns = useTimelineControlColumn(columns, TIMELINE_NO_SORTING); - const unifiedComponentsInTimelineEnabled = useIsExperimentalFeatureEnabled( 'unifiedComponentsInTimelineEnabled' ); @@ -137,6 +135,14 @@ export const EqlTabContentComponent: React.FC = ({ timerangeKind, }); + const leadingControlColumns = useTimelineControlColumn({ + columns, + sort: TIMELINE_NO_SORTING, + timelineId, + activeTab: TimelineTabs.eql, + refetch, + }); + const isQueryLoading = useMemo( () => dataLoadingState === DataLoadingState.loading || diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx index 7a4242178f027..27074cceb45b1 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx @@ -171,7 +171,13 @@ export const PinnedTabContentComponent: React.FC = ({ timerangeKind: undefined, }); - const leadingControlColumns = useTimelineControlColumn(columns, sort); + const leadingControlColumns = useTimelineControlColumn({ + columns, + sort, + timelineId, + activeTab: TimelineTabs.pinned, + refetch, + }); const isQueryLoading = useMemo( () => [DataLoadingState.loading, DataLoadingState.loadingMore].includes(queryLoadingState), diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx index 21165080d3957..745cd04daaee5 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx @@ -203,7 +203,13 @@ export const QueryTabContentComponent: React.FC = ({ timerangeKind, }); - const leadingControlColumns = useTimelineControlColumn(columns, sort); + const leadingControlColumns = useTimelineControlColumn({ + columns, + sort, + timelineId, + activeTab: TimelineTabs.query, + refetch, + }); useEffect(() => { dispatch( diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx index 36284be9dad18..0a8fdcbaacd87 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/query_tab_unified_components.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import type { ComponentProps } from 'react'; +import type { ComponentProps, FunctionComponent } from 'react'; import React, { useEffect } from 'react'; import QueryTabContent from '.'; import { defaultRowRenderers } from '../../body/renderers'; @@ -15,7 +15,9 @@ import { useTimelineEventsDetails } from '../../../../containers/details'; import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { mockSourcererScope } from '../../../../../sourcerer/containers/mocks'; import { + createMockStore, createSecuritySolutionStorageMock, + mockGlobalState, mockTimelineData, TestProviders, } from '../../../../../common/mock'; @@ -29,7 +31,13 @@ import { timelineActions } from '../../../../store'; import type { ExperimentalFeatures } from '../../../../../../common'; import { allowedExperimentalValues } from '../../../../../../common'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; -import { cloneDeep, flatten } from 'lodash'; +import { defaultUdtHeaders } from '../../unified_components/default_headers'; +import { defaultColumnHeaderType } from '../../body/column_headers/default_headers'; +import { useUserPrivileges } from '../../../../../common/components/user_privileges'; +import { getEndpointPrivilegesInitialStateMock } from '../../../../../common/components/user_privileges/endpoint/mocks'; +import userEvent from '@testing-library/user-event'; + +jest.mock('../../../../../common/components/user_privileges'); jest.mock('../../../../containers', () => ({ useTimelineEvents: jest.fn(), @@ -54,9 +62,17 @@ jest.mock('../../../../../common/lib/kuery'); jest.mock('../../../../../common/hooks/use_experimental_features'); +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useLocation: jest.fn(() => ({ + pathname: '', + search: '', + })), +})); + // These tests can take more than standard timeout of 5s -// that is why we are setting it to 15s -const SPECIAL_TEST_TIMEOUT = 15000; +// that is why we are increasing it. +const SPECIAL_TEST_TIMEOUT = 50000; const useIsExperimentalFeatureEnabledMock = jest.fn((feature: keyof ExperimentalFeatures) => { if (feature === 'unifiedComponentsInTimelineEnabled') { @@ -67,7 +83,7 @@ const useIsExperimentalFeatureEnabledMock = jest.fn((feature: keyof Experimental jest.mock('../../../../../common/lib/kibana'); -// unified-field-list is is reporiting multiple analytics events +// unified-field-list is reporting multiple analytics events jest.mock(`@kbn/analytics-client`); const TestComponent = (props: Partial>) => { @@ -98,44 +114,41 @@ const TestComponent = (props: Partial>) = return ; }; +const customColumnOrder = [ + ...defaultUdtHeaders, + { + columnHeaderType: defaultColumnHeaderType, + id: 'event.severity', + }, +]; + +const mockState = { + ...structuredClone(mockGlobalState), +}; + +mockState.timeline.timelineById[TimelineId.test].columns = customColumnOrder; + +const TestWrapper: FunctionComponent = ({ children }) => { + return {children}; +}; + const renderTestComponents = (props?: Partial>) => { return render(, { - wrapper: TestProviders, + wrapper: TestWrapper, }); }; -const changeItemsPerPageTo = (newItemsPerPage: number) => { - fireEvent.click(screen.getByTestId('tablePaginationPopoverButton')); - fireEvent.click(screen.getByTestId(`tablePagination-${newItemsPerPage}-rows`)); - expect(screen.getByTestId('tablePaginationPopoverButton')).toHaveTextContent( - `Rows per page: ${newItemsPerPage}` - ); -}; - const loadPageMock = jest.fn(); -const useTimelineEventsMock = jest.fn(() => [ - false, - { - events: cloneDeep(mockTimelineData), - pageInfo: { - activePage: 0, - totalPages: 10, - }, - refreshedAt: Date.now(), - totalCount: 70, - loadPage: loadPageMock, - }, -]); - const useSourcererDataViewMocked = jest.fn().mockReturnValue({ ...mockSourcererScope, }); const { storage: storageMock } = createSecuritySolutionStorageMock(); -// Flaky : See https://github.com/elastic/kibana/issues/179831 -describe.skip('query tab with unified timeline', () => { +let useTimelineEventsMock = jest.fn(); + +describe('query tab with unified timeline', () => { const kibanaServiceMock: StartServices = { ...createStartServicesMock(), storage: storageMock, @@ -149,9 +162,20 @@ describe.skip('query tab with unified timeline', () => { }); beforeEach(() => { - // increase timeout for these tests as they are rendering a complete table with ~30 rows which can take time. - const ONE_SECOND = 1000; - jest.setTimeout(10 * ONE_SECOND); + useTimelineEventsMock = jest.fn(() => [ + false, + { + events: structuredClone(mockTimelineData.slice(0, 1)), + pageInfo: { + activePage: 0, + totalPages: 3, + }, + refreshedAt: Date.now(), + totalCount: 3, + loadPage: loadPageMock, + }, + ]); + HTMLElement.prototype.getBoundingClientRect = jest.fn(() => { return { width: 1000, @@ -176,6 +200,12 @@ describe.skip('query tab with unified timeline', () => { (useIsExperimentalFeatureEnabled as jest.Mock).mockImplementation( useIsExperimentalFeatureEnabledMock ); + + (useUserPrivileges as jest.Mock).mockReturnValue({ + kibanaSecuritySolutionsPrivileges: { crud: true, read: true }, + endpointPrivileges: getEndpointPrivilegesInitialStateMock(), + detectionEnginePrivileges: { loading: false, error: undefined, result: undefined }, + }); }); describe('render', () => { @@ -235,15 +265,39 @@ describe.skip('query tab with unified timeline', () => { fireEvent.click(screen.getByLabelText('Closes this modal window')); - expect(screen.queryByTestId('row-renderers-modal')).toBeFalsy(); + expect(screen.queryByTestId('row-renderers-modal')).not.toBeInTheDocument(); - expect(screen.queryByTestId('timeline-row-renderer-0')).toBeFalsy(); + expect(screen.queryByTestId('timeline-row-renderer-0')).not.toBeInTheDocument(); }, SPECIAL_TEST_TIMEOUT ); }); describe('pagination', () => { + beforeEach(() => { + // should return all the records instead just 3 + // as the case in the default mock + useTimelineEventsMock = jest.fn(() => [ + false, + { + events: structuredClone(mockTimelineData), + pageInfo: { + activePage: 0, + totalPages: 10, + }, + refreshedAt: Date.now(), + totalCount: 70, + loadPage: loadPageMock, + }, + ]); + + (useTimelineEvents as jest.Mock).mockImplementation(useTimelineEventsMock); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + it( 'should paginate correctly', async () => { @@ -296,9 +350,14 @@ describe.skip('query tab with unified timeline', () => { await waitFor(() => { expect(screen.getByTestId('discoverDocTable')).toBeVisible(); }); + + const messageColumnIndex = + customColumnOrder.findIndex((header) => header.id === 'message') + 3; + // 3 is the offset for additional leading columns on left + expect(container.querySelector('[data-gridcell-column-id="message"]')).toHaveAttribute( 'data-gridcell-column-index', - '12' + String(messageColumnIndex) ); expect(container.querySelector('[data-gridcell-column-id="message"]')).toBeInTheDocument(); @@ -318,7 +377,7 @@ describe.skip('query tab with unified timeline', () => { await waitFor(() => { expect(container.querySelector('[data-gridcell-column-id="message"]')).toHaveAttribute( 'data-gridcell-column-index', - '11' + String(messageColumnIndex - 1) ); }); }, @@ -391,7 +450,7 @@ describe.skip('query tab with unified timeline', () => { sort: [ { direction: 'asc', - esTypes: [], + esTypes: ['date'], field: '@timestamp', type: 'date', }, @@ -439,7 +498,7 @@ describe.skip('query tab with unified timeline', () => { sort: [ { direction: 'desc', - esTypes: [], + esTypes: ['date'], field: '@timestamp', type: 'date', }, @@ -498,7 +557,7 @@ describe.skip('query tab with unified timeline', () => { sort: [ { direction: 'desc', - esTypes: [], + esTypes: ['date'], field: '@timestamp', type: 'date', }, @@ -547,7 +606,6 @@ describe.skip('query tab with unified timeline', () => { SPECIAL_TEST_TIMEOUT ); - // Failing: See https://github.com/elastic/kibana/issues/179831 it( 'should be able to sort by multiple columns', async () => { @@ -608,7 +666,7 @@ describe.skip('query tab with unified timeline', () => { await waitFor(() => { expect(screen.getByTestId('fieldListGroupedSelectedFields-count')).toHaveTextContent( - '11' + String(customColumnOrder.length) ); }); @@ -620,7 +678,7 @@ describe.skip('query tab with unified timeline', () => { // column not longer exists in the table await waitFor(() => { expect(screen.getByTestId('fieldListGroupedSelectedFields-count')).toHaveTextContent( - '10' + String(customColumnOrder.length - 1) ); }); expect(screen.queryAllByTestId(`dataGridHeaderCell-${field.name}`)).toHaveLength(0); @@ -640,7 +698,7 @@ describe.skip('query tab with unified timeline', () => { await waitFor(() => { expect(screen.getByTestId('fieldListGroupedSelectedFields-count')).toHaveTextContent( - '11' + String(customColumnOrder.length) ); }); @@ -653,7 +711,7 @@ describe.skip('query tab with unified timeline', () => { await waitFor(() => { expect(screen.getByTestId('fieldListGroupedSelectedFields-count')).toHaveTextContent( - '12' + String(customColumnOrder.length + 1) ); }); expect(screen.queryAllByTestId(`dataGridHeaderCell-${field.name}`)).toHaveLength(1); @@ -693,50 +751,64 @@ describe.skip('query tab with unified timeline', () => { async () => { renderTestComponents(); expect(await screen.findByTestId('timeline-sidebar')).toBeVisible(); - await waitFor(() => { - expect(screen.getByTestId('fieldListGroupedAvailableFields-count')).toHaveTextContent( - '37' - ); - }); + + expect(screen.getByTestId('fieldListGroupedFieldGroups')).toBeVisible(); fireEvent.click(screen.getByTitle('Hide sidebar')); await waitFor(() => { - expect(screen.queryAllByTestId('fieldListGroupedAvailableFields-count')).toHaveLength(0); + expect(screen.queryByTestId('fieldListGroupedFieldGroups')).not.toBeInTheDocument(); }); }, SPECIAL_TEST_TIMEOUT ); + }); + describe('row leading actions', () => { it( - 'should have all populated fields in Available fields section', + 'should be able to add notes', async () => { - const listOfPopulatedFields = new Set( - flatten( - mockTimelineData.map((dataItem) => - dataItem.data.map((item) => - item.value && item.value.length > 0 ? item.field : undefined - ) - ) - ).filter((item) => typeof item !== 'undefined') - ); - renderTestComponents(); + expect(await screen.findByTestId('discoverDocTable')).toBeVisible(); - expect(await screen.findByTestId('timeline-sidebar')).toBeVisible(); + await waitFor(() => { + expect(screen.getByTestId('timeline-notes-button-small')).not.toBeDisabled(); + }); + + fireEvent.click(screen.getByTestId('timeline-notes-button-small')); + + await waitFor(() => { + expect(screen.getByTestId('add-note-container')).toBeVisible(); + }); + }, + SPECIAL_TEST_TIMEOUT + ); + + it( + 'should be cancel adding notes', + async () => { + renderTestComponents(); expect(await screen.findByTestId('discoverDocTable')).toBeVisible(); - changeItemsPerPageTo(100); + await waitFor(() => { + expect(screen.getByTestId('timeline-notes-button-small')).not.toBeDisabled(); + }); - const availableFields = screen.getByTestId('fieldListGroupedAvailableFields'); + fireEvent.click(screen.getByTestId('timeline-notes-button-small')); + + await waitFor(() => { + expect(screen.getByTestId('add-note-container')).toBeVisible(); + }); - for (const field of listOfPopulatedFields) { - fireEvent.change(screen.getByTestId('fieldListFiltersFieldSearch'), { - target: { value: field }, - }); + userEvent.type(screen.getByTestId('euiMarkdownEditorTextArea'), 'Test Note 1'); - expect(within(availableFields).getByTestId(`field-${field}`)); - } + expect(screen.getByTestId('cancel')).not.toBeDisabled(); + + fireEvent.click(screen.getByTestId('cancel')); + + await waitFor(() => { + expect(screen.queryByTestId('add-note-container')).not.toBeInTheDocument(); + }); }, SPECIAL_TEST_TIMEOUT ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/__snapshots__/use_timeline_control_columns.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/__snapshots__/use_timeline_control_columns.test.tsx.snap index a85af556d5f4c..e96dd27082bd0 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/__snapshots__/use_timeline_control_columns.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/__snapshots__/use_timeline_control_columns.test.tsx.snap @@ -5,11 +5,7 @@ Array [ Object { "headerCellRender": [Function], "id": "default-timeline-control-column", - "rowCellRender": Object { - "$$typeof": Symbol(react.memo), - "compare": null, - "type": [Function], - }, + "rowCellRender": [Function], "width": 152, }, ] diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx index b2958cb0339cb..7befceacb5449 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.test.tsx @@ -10,6 +10,8 @@ import { renderHook } from '@testing-library/react-hooks'; import { useLicense } from '../../../../../common/hooks/use_license'; import { useTimelineControlColumn } from './use_timeline_control_columns'; import type { ColumnHeaderOptions } from '../../../../../../common/types/timeline/columns'; +import { TimelineId } from '@kbn/timelines-plugin/public/store/timeline'; +import { TimelineTabs } from '../../../../../../common/types'; jest.mock('../../../../../common/hooks/use_experimental_features', () => ({ useIsExperimentalFeatureEnabled: jest.fn().mockReturnValue(true), @@ -37,20 +39,42 @@ describe('useTimelineColumns', () => { }, ]; + const refetchMock = jest.fn(); + describe('leadingControlColumns', () => { it('should return the leading control columns', () => { - const { result } = renderHook(() => useTimelineControlColumn(mockColumns, []), { - wrapper: TestProviders, - }); + const { result } = renderHook( + () => + useTimelineControlColumn({ + columns: mockColumns, + sort: [], + timelineId: TimelineId.test, + activeTab: TimelineTabs.query, + refetch: refetchMock, + }), + { + wrapper: TestProviders, + } + ); expect(result.current).toMatchSnapshot(); }); it('should have a width of 124 for 5 actions', () => { useLicenseMock.mockReturnValue({ isEnterprise: () => false, }); - const { result } = renderHook(() => useTimelineControlColumn(mockColumns, []), { - wrapper: TestProviders, - }); + const { result } = renderHook( + () => + useTimelineControlColumn({ + columns: mockColumns, + sort: [], + timelineId: TimelineId.test, + activeTab: TimelineTabs.query, + refetch: refetchMock, + }), + { + wrapper: TestProviders, + } + ); const controlColumn = result.current[0] as EuiDataGridControlColumn; expect(controlColumn.width).toBe(124); }); @@ -58,9 +82,19 @@ describe('useTimelineColumns', () => { useLicenseMock.mockReturnValue({ isEnterprise: () => true, }); - const { result } = renderHook(() => useTimelineControlColumn(mockColumns, []), { - wrapper: TestProviders, - }); + const { result } = renderHook( + () => + useTimelineControlColumn({ + columns: mockColumns, + sort: [], + timelineId: TimelineId.test, + activeTab: TimelineTabs.query, + refetch: refetchMock, + }), + { + wrapper: TestProviders, + } + ); const controlColumn = result.current[0] as EuiDataGridControlColumn; expect(controlColumn.width).toBe(152); }); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx index 736afdbbec916..02791d85de022 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/shared/use_timeline_control_columns.tsx @@ -6,7 +6,7 @@ */ import React, { useMemo } from 'react'; -import type { EuiDataGridControlColumn } from '@elastic/eui'; +import type { EuiDataGridCellValueElementProps } from '@elastic/eui'; import type { SortColumnTable } from '@kbn/securitysolution-data-table'; import { useLicense } from '../../../../../common/hooks/use_license'; import { SourcererScopeName } from '../../../../../sourcerer/store/model'; @@ -14,17 +14,32 @@ import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { getDefaultControlColumn } from '../../body/control_columns'; import type { UnifiedActionProps } from '../../unified_components/data_table/control_column_cell_render'; -import { TimelineId, TimelineTabs } from '../../../../../../common/types/timeline'; +import type { TimelineTabs } from '../../../../../../common/types/timeline'; import { HeaderActions } from '../../../../../common/components/header_actions/header_actions'; import { ControlColumnCellRender } from '../../unified_components/data_table/control_column_cell_render'; import type { ColumnHeaderOptions } from '../../../../../../common/types'; import { useTimelineColumns } from './use_timeline_columns'; +import type { TimelineDataGridCellContext } from '../../types'; +interface UseTimelineControlColumnArgs { + columns: ColumnHeaderOptions[]; + sort: SortColumnTable[]; + timelineId: string; + activeTab: TimelineTabs; + refetch: () => void; +} + +const EMPTY_STRING_ARRAY: string[] = []; + +const noOp = () => {}; const noSelectAll = ({ isSelected }: { isSelected: boolean }) => {}; -export const useTimelineControlColumn = ( - columns: ColumnHeaderOptions[], - sort: SortColumnTable[] -) => { +export const useTimelineControlColumn = ({ + columns, + sort, + timelineId, + activeTab, + refetch, +}: UseTimelineControlColumnArgs) => { const { browserFields } = useSourcererDataView(SourcererScopeName.timeline); const unifiedComponentsInTimelineEnabled = useIsExperimentalFeatureEnabled( @@ -55,14 +70,35 @@ export const useTimelineControlColumn = ( showSelectAllCheckbox={false} showFullScreenToggle={false} sort={sort} - tabType={TimelineTabs.pinned} + tabType={activeTab} + {...props} + timelineId={timelineId} + /> + ); + }, + rowCellRender: (props: EuiDataGridCellValueElementProps & TimelineDataGridCellContext) => { + return ( + ); }, - rowCellRender: ControlColumnCellRender, - })) as unknown as EuiDataGridControlColumn[]; + })); } else { return getDefaultControlColumn(ACTION_BUTTON_COUNT).map((x) => ({ ...x, @@ -76,5 +112,8 @@ export const useTimelineControlColumn = ( localColumns, sort, unifiedComponentsInTimelineEnabled, + timelineId, + activeTab, + refetch, ]); }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/types.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/types.ts new file mode 100644 index 0000000000000..e7dedcfa9aad3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/types.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { TimelineItem } from '@kbn/timelines-plugin/common'; +import type { TimelineModel } from '../../store/model'; + +export interface TimelineDataGridCellContext { + events: TimelineItem[]; + pinnedEventIds: TimelineModel['pinnedEventIds']; + eventIdsAddingNotes: Set; + onToggleShowNotes: (eventId?: string) => void; + eventIdToNoteIds: Record; + refetch: () => void; +} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx index 48b8eaa4fc74f..c662a06cb0dc1 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/control_column_cell_render.tsx @@ -9,7 +9,6 @@ import React, { memo, useMemo } from 'react'; import type { TimelineItem } from '@kbn/timelines-plugin/common'; import { eventIsPinned } from '../../body/helpers'; import { Actions } from '../../../../../common/components/header_actions'; -import { TimelineId } from '../../../../../../common/types'; import type { TimelineModel } from '../../../../store/model'; import type { ActionProps } from '../../../../../../common/types'; @@ -20,8 +19,12 @@ export interface UnifiedActionProps extends ActionProps { pinnedEventIds: TimelineModel['pinnedEventIds']; } -export const ControlColumnCellRender = memo(function RowCellRender(props: UnifiedActionProps) { - const { rowIndex, events, ecsData, pinnedEventIds, onToggleShowNotes, eventIdToNoteIds } = props; +export const ControlColumnCellRender = memo(function ControlColumnCellRender( + props: UnifiedActionProps +) { + const { rowIndex, events, pinnedEventIds, onToggleShowNotes, eventIdToNoteIds, timelineId } = + props; + const event = useMemo(() => events && events[rowIndex], [events, rowIndex]); const isPinned = useMemo( () => eventIsPinned({ eventId: event?._id, pinnedEventIds }), @@ -32,17 +35,14 @@ export const ControlColumnCellRender = memo(function RowCellRender(props: Unifie {...props} ariaRowindex={rowIndex} columnValues="columnValues" - ecsData={ecsData ?? event.ecs} - eventId={event?._id} eventIdToNoteIds={eventIdToNoteIds} isEventPinned={isPinned} isEventViewer={false} onEventDetailsPanelOpened={noOp} onRuleChange={noOp} showNotes={true} - timelineId={TimelineId.active} + timelineId={timelineId} toggleShowNotes={onToggleShowNotes} - refetch={noOp} rowIndex={rowIndex} /> ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx index a03c95341a07b..52cc643cbf2e4 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx @@ -17,15 +17,29 @@ import type { ComponentProps } from 'react'; import { getColumnHeaders } from '../../body/column_headers/helpers'; import { mockSourcererScope } from '../../../../../sourcerer/containers/mocks'; import { timelineActions } from '../../../../store'; -import type { ExpandedDetailTimeline } from '../../../../../../common/types'; +import { useUnifiedTableExpandableFlyout } from '../hooks/use_unified_timeline_expandable_flyout'; jest.mock('../../../../../sourcerer/containers'); +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useLocation: jest.fn(() => ({ + pathname: '', + search: '', + })), +})); + const onFieldEditedMock = jest.fn(); const refetchMock = jest.fn(); const onEventClosedMock = jest.fn(); const onChangePageMock = jest.fn(); +const openFlyoutMock = jest.fn(); +const closeFlyoutMock = jest.fn(); +const isExpandableFlyoutDisabled = false; + +jest.mock('../hooks/use_unified_timeline_expandable_flyout'); + const initialEnrichedColumns = getColumnHeaders( defaultUdtHeaders, mockSourcererScope.browserFields @@ -39,7 +53,7 @@ type TestComponentProps = Partial> & { // These tests can take more than standard timeout of 5s // that is why we are setting it to 10s -const SPECIAL_TEST_TIMEOUT = 10000; +const SPECIAL_TEST_TIMEOUT = 50000; const TestComponent = (props: TestComponentProps) => { const { store = createMockStore(), ...restProps } = props; @@ -81,10 +95,17 @@ const getTimelineFromStore = ( return store.getState().timeline.timelineById[timelineId]; }; -// FLAKY: https://github.com/elastic/kibana/issues/179843 -describe.skip('unified data table', () => { +describe('unified data table', () => { beforeEach(() => { (useSourcererDataView as jest.Mock).mockReturnValue(mockSourcererScope); + (useUnifiedTableExpandableFlyout as jest.Mock).mockReturnValue({ + isExpandableFlyoutDisabled, + openFlyout: openFlyoutMock, + closeFlyout: closeFlyoutMock, + }); + }); + afterEach(() => { + jest.clearAllMocks(); }); it( @@ -269,86 +290,11 @@ describe.skip('unified data table', () => { fireEvent.click(screen.getAllByTestId('docTableExpandToggleColumn')[0]); await waitFor(() => { - expect(screen.getByTestId('timeline:details-panel:flyout')).toBeVisible(); + expect(openFlyoutMock).toHaveBeenCalledTimes(1); }); }, SPECIAL_TEST_TIMEOUT ); - - it( - 'should show details flyout when expandedDetails state is set', - async () => { - const customMockStore = createMockStore(); - const mockExpandedDetail: ExpandedDetailTimeline = { - query: { - params: { - eventId: 'some_id', - indexName: 'security-*', - }, - panelView: 'eventDetail', - }, - }; - customMockStore.dispatch( - timelineActions.toggleDetailPanel({ - id: TimelineId.test, - tabType: TimelineTabs.query, - ...mockExpandedDetail.query, - }) - ); - - render( - - ); - - await waitFor(() => { - expect(screen.getByTestId('timeline:details-panel:flyout')).toBeVisible(); - }); - }, - SPECIAL_TEST_TIMEOUT - ); - it( - 'should close details flyout when close icon is clicked', - async () => { - const customMockStore = createMockStore(); - const mockExpandedDetail: ExpandedDetailTimeline = { - query: { - params: { - eventId: 'some_id', - indexName: 'security-*', - }, - panelView: 'eventDetail', - }, - }; - - customMockStore.dispatch( - timelineActions.toggleDetailPanel({ - id: TimelineId.test, - tabType: TimelineTabs.query, - ...mockExpandedDetail.query, - }) - ); - - render( - - ); - - await waitFor(() => { - expect(screen.getByTestId('euiFlyoutCloseButton')).toBeVisible(); - }); - - fireEvent.click(screen.getByTestId('euiFlyoutCloseButton')); - expect(onEventClosedMock).toHaveBeenCalledTimes(1); - }, - SPECIAL_TEST_TIMEOUT - ); }); describe('pagination', () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx index f425c72880521..bca35ae0af446 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.test.tsx @@ -58,6 +58,14 @@ jest.mock('../../../../common/lib/kuery'); jest.mock('../../../../common/hooks/use_experimental_features'); +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useLocation: jest.fn(() => ({ + pathname: '', + search: '', + })), +})); + const useIsExperimentalFeatureEnabledMock = jest.fn((feature: keyof ExperimentalFeatures) => { if (feature === 'unifiedComponentsInTimelineEnabled') { return true; @@ -79,8 +87,8 @@ const columnsToDisplay = [ ]; // These tests can take more than standard timeout of 5s -// that is why we are setting it to 10s -const SPECIAL_TEST_TIMEOUT = 10000; +// that is why we are increasing the timeout +const SPECIAL_TEST_TIMEOUT = 50000; const localMockedTimelineData = structuredClone(mockTimelineData); @@ -110,6 +118,8 @@ const TestComponent = (props: Partial>) = dataLoadingState: DataLoadingState.loaded, updatedAt: Date.now(), isTextBasedQuery: false, + eventIdToNoteIds: {} as Record, + pinnedEventIds: {} as Record, }; const dispatch = useDispatch(); @@ -188,8 +198,6 @@ describe('unified timeline', () => { }); beforeEach(() => { - const ONE_SECOND = 1000; - jest.setTimeout(10 * ONE_SECOND); HTMLElement.prototype.getBoundingClientRect = jest.fn(() => { return { width: 1000, @@ -216,9 +224,7 @@ describe('unified timeline', () => { ); }); - // Flaky : See https://github.com/elastic/kibana/issues/179831 - // removing/moving column current leads to infitinite loop, will be fixed in further PRs. - describe.skip('columns', () => { + describe('columns', () => { it( 'should move column left correctly ', async () => { @@ -297,7 +303,7 @@ describe('unified timeline', () => { SPECIAL_TEST_TIMEOUT ); - it.skip( + it( 'should remove column ', async () => { const field = { @@ -539,9 +545,7 @@ describe('unified timeline', () => { ); }); - // FLAKY: https://github.com/elastic/kibana/issues/180937 - // FLAKY: https://github.com/elastic/kibana/issues/180956 - describe.skip('unified field list', () => { + describe('unified field list', () => { it( 'should be able to add filters', async () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx index b4daa07f11c40..eaa85e635e4cc 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx @@ -50,6 +50,7 @@ import { timelineActions } from '../../../store'; import type { TimelineModel } from '../../../store/model'; import { getFieldsListCreationOptions } from './get_fields_list_creation_options'; import { defaultUdtHeaders } from './default_headers'; +import type { TimelineDataGridCellContext } from '../types'; const TimelineBodyContainer = styled.div.attrs(({ className = '' }) => ({ className: `${className}`, @@ -119,8 +120,8 @@ interface Props { dataView: DataView; trailingControlColumns?: EuiDataGridProps['trailingControlColumns']; leadingControlColumns?: EuiDataGridProps['leadingControlColumns']; - pinnedEventIds?: TimelineModel['pinnedEventIds']; - eventIdToNoteIds?: TimelineModel['eventIdToNoteIds']; + pinnedEventIds: TimelineModel['pinnedEventIds']; + eventIdToNoteIds: TimelineModel['eventIdToNoteIds']; } const UnifiedTimelineComponent: React.FC = ({ @@ -170,8 +171,10 @@ const UnifiedTimelineComponent: React.FC = ({ } = timelineDataService; const [eventIdsAddingNotes, setEventIdsAddingNotes] = useState>(new Set()); + const onToggleShowNotes = useCallback( - (eventId: string) => { + (eventId?: string) => { + if (!eventId) return; const newSet = new Set(eventIdsAddingNotes); if (newSet.has(eventId)) { newSet.delete(eventId); @@ -370,7 +373,7 @@ const UnifiedTimelineComponent: React.FC = ({ onFieldEdited(); }, [onFieldEdited]); - const cellContext = useMemo(() => { + const cellContext: TimelineDataGridCellContext = useMemo(() => { return { events, pinnedEventIds, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts index e2c3036477875..752f8e472a755 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/alert_counts/alert_counts_tool.test.ts @@ -8,6 +8,7 @@ import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import type { KibanaRequest } from '@kbn/core-http-server'; import type { DynamicTool } from '@langchain/core/tools'; +import { loggerMock } from '@kbn/logging-mocks'; import { ALERT_COUNTS_TOOL } from './alert_counts_tool'; import type { RetrievalQAChain } from 'langchain/chains'; import type { ExecuteConnectorRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen'; @@ -29,9 +30,11 @@ describe('AlertCountsTool', () => { const isEnabledKnowledgeBase = true; const chain = {} as unknown as RetrievalQAChain; const modelExists = true; + const logger = loggerMock.create(); const rest = { isEnabledKnowledgeBase, chain, + logger, modelExists, }; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.test.ts index a608673adf661..5d8fb0b51739a 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.test.ts @@ -11,6 +11,8 @@ import type { AttackDiscoveryPostRequestBody } from '@kbn/elastic-assistant-comm import type { ActionsClientLlm } from '@kbn/langchain/server'; import type { DynamicTool } from '@langchain/core/tools'; +import { loggerMock } from '@kbn/logging-mocks'; + import { ATTACK_DISCOVERY_TOOL } from './attack_discovery_tool'; import { mockAnonymizationFields } from '../mock/mock_anonymization_fields'; import { mockEmptyOpenAndAcknowledgedAlertsQueryResults } from '../mock/mock_empty_open_and_acknowledged_alerts_qery_results'; @@ -66,11 +68,13 @@ describe('AttackDiscoveryTool', () => { search: jest.fn(), } as unknown as ElasticsearchClient; const llm = jest.fn() as unknown as ActionsClientLlm; + const logger = loggerMock.create(); const rest = { anonymizationFields: mockAnonymizationFields, isEnabledKnowledgeBase: false, llm, + logger, modelExists: false, onNewReplacements: jest.fn(), size, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/esql_language_knowledge_base/esql_language_knowledge_base_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/esql_language_knowledge_base/esql_language_knowledge_base_tool.test.ts index 2db0575de8dce..29b10e9fb0275 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/esql_language_knowledge_base/esql_language_knowledge_base_tool.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/esql_language_knowledge_base/esql_language_knowledge_base_tool.test.ts @@ -11,6 +11,7 @@ import { ESQL_KNOWLEDGE_BASE_TOOL } from './esql_language_knowledge_base_tool'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import type { KibanaRequest } from '@kbn/core-http-server'; import type { ExecuteConnectorRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen'; +import { loggerMock } from '@kbn/logging-mocks'; describe('EsqlLanguageKnowledgeBaseTool', () => { const chain = {} as RetrievalQAChain; @@ -27,9 +28,11 @@ describe('EsqlLanguageKnowledgeBaseTool', () => { size: 20, }, } as unknown as KibanaRequest; + const logger = loggerMock.create(); const rest = { chain, esClient, + logger, request, }; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/index.ts b/x-pack/plugins/security_solution/server/assistant/tools/index.ts index b99c1f6e0cd38..0e5ea3a8f69d1 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/index.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/index.ts @@ -11,10 +11,14 @@ import { ALERT_COUNTS_TOOL } from './alert_counts/alert_counts_tool'; import { ESQL_KNOWLEDGE_BASE_TOOL } from './esql_language_knowledge_base/esql_language_knowledge_base_tool'; import { OPEN_AND_ACKNOWLEDGED_ALERTS_TOOL } from './open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool'; import { ATTACK_DISCOVERY_TOOL } from './attack_discovery/attack_discovery_tool'; +import { KNOWLEDGE_BASE_RETRIEVAL_TOOL } from './knowledge_base/knowledge_base_retrieval_tool'; +import { KNOWLEDGE_BASE_WRITE_TOOL } from './knowledge_base/knowledge_base_write_tool'; export const getAssistantTools = (): AssistantTool[] => [ ALERT_COUNTS_TOOL, ATTACK_DISCOVERY_TOOL, ESQL_KNOWLEDGE_BASE_TOOL, + KNOWLEDGE_BASE_RETRIEVAL_TOOL, + KNOWLEDGE_BASE_WRITE_TOOL, OPEN_AND_ACKNOWLEDGED_ALERTS_TOOL, ]; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_retrieval_tool.ts b/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_retrieval_tool.ts new file mode 100644 index 0000000000000..47cb35e244d51 --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_retrieval_tool.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DynamicStructuredTool } from '@langchain/core/tools'; +import { z } from 'zod'; +import type { AssistantTool, AssistantToolParams } from '@kbn/elastic-assistant-plugin/server'; +import type { AIAssistantKnowledgeBaseDataClient } from '@kbn/elastic-assistant-plugin/server/ai_assistant_data_clients/knowledge_base'; +import { APP_UI_ID } from '../../../../common'; + +export interface KnowledgeBaseRetrievalToolParams extends AssistantToolParams { + kbDataClient: AIAssistantKnowledgeBaseDataClient; +} + +const toolDetails = { + description: + "Call this for fetching details from the user's knowledge base. The knowledge base contains useful information the user wants to store between conversation contexts. Call this function when the user asks for information about themself, like 'what is my favorite...' or 'using my saved....'. Input must always be the free-text query on a single line, with no other text. You are welcome to re-write the query to be a summary of items/things to search for in the knowledge base, as a vector search will be performed to return similar results when requested. If the results returned do not look relevant, disregard and tell the user you were unable to find the information they were looking for. All requests include a `knowledge history` section which includes some existing knowledge of the user. DO NOT CALL THIS FUNCTION if the `knowledge history` sections appears to be able to answer the user's query.", + id: 'knowledge-base-retrieval-tool', + name: 'KnowledgeBaseRetrievalTool', +}; +export const KNOWLEDGE_BASE_RETRIEVAL_TOOL: AssistantTool = { + ...toolDetails, + sourceRegister: APP_UI_ID, + isSupported: (params: AssistantToolParams): params is KnowledgeBaseRetrievalToolParams => { + const { kbDataClient, isEnabledKnowledgeBase, modelExists } = params; + return isEnabledKnowledgeBase && modelExists && kbDataClient != null; + }, + getTool(params: AssistantToolParams) { + if (!this.isSupported(params)) return null; + + const { kbDataClient, logger } = params as KnowledgeBaseRetrievalToolParams; + if (kbDataClient == null) return null; + + return new DynamicStructuredTool({ + name: toolDetails.name, + description: toolDetails.description, + schema: z.object({ + query: z.string().describe(`Summary of items/things to search for in the knowledge base`), + }), + func: async (input, _, cbManager) => { + logger.debug(`KnowledgeBaseRetrievalToolParams:input\n ${JSON.stringify(input, null, 2)}`); + + const docs = await kbDataClient.getKnowledgeBaseDocuments({ + query: input.query, + kbResource: 'user', + required: false, + }); + + return JSON.stringify(docs); + }, + tags: ['knowledge-base'], + }); + }, +}; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_write_tool.ts b/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_write_tool.ts new file mode 100644 index 0000000000000..addb2a5580dfc --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/knowledge_base/knowledge_base_write_tool.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DynamicStructuredTool } from '@langchain/core/tools'; +import { z } from 'zod'; +import type { AssistantTool, AssistantToolParams } from '@kbn/elastic-assistant-plugin/server'; +import type { AIAssistantKnowledgeBaseDataClient } from '@kbn/elastic-assistant-plugin/server/ai_assistant_data_clients/knowledge_base'; +import type { KnowledgeBaseEntryCreateProps } from '@kbn/elastic-assistant-common'; +import { APP_UI_ID } from '../../../../common'; + +export interface KnowledgeBaseWriteToolParams extends AssistantToolParams { + kbDataClient: AIAssistantKnowledgeBaseDataClient; +} + +const toolDetails = { + description: + "Call this for writing details to the user's knowledge base. The knowledge base contains useful information the user wants to store between conversation contexts. Input will be the summarized knowledge base entry to store, with no other text, and whether or not the entry is required.", + id: 'knowledge-base-write-tool', + name: 'KnowledgeBaseWriteTool', +}; +export const KNOWLEDGE_BASE_WRITE_TOOL: AssistantTool = { + ...toolDetails, + sourceRegister: APP_UI_ID, + isSupported: (params: AssistantToolParams): params is KnowledgeBaseWriteToolParams => { + const { isEnabledKnowledgeBase, kbDataClient, modelExists } = params; + return isEnabledKnowledgeBase && modelExists && kbDataClient != null; + }, + getTool(params: AssistantToolParams) { + if (!this.isSupported(params)) return null; + + const { kbDataClient, logger } = params as KnowledgeBaseWriteToolParams; + if (kbDataClient == null) return null; + + return new DynamicStructuredTool({ + name: toolDetails.name, + description: toolDetails.description, + schema: z.object({ + query: z.string().describe(`Summary of items/things to save in the knowledge base`), + required: z + .boolean() + .describe( + `Whether or not the entry is required to always be included in conversations. Is only true if the user explicitly asks for it to be required or always included in conversations, otherwise this is always false.` + ), + }), + func: async (input, _, cbManager) => { + logger.debug(`KnowledgeBaseWriteToolParams:input\n ${JSON.stringify(input, null, 2)}`); + + const knowledgeBaseEntry: KnowledgeBaseEntryCreateProps = { + metadata: { kbResource: 'user', source: 'conversation', required: input.required }, + text: input.query, + }; + + logger.debug(`knowledgeBaseEntry\n ${JSON.stringify(knowledgeBaseEntry, null, 2)}`); + + const resp = await kbDataClient.createKnowledgeBaseEntry({ knowledgeBaseEntry }); + + if (resp == null) { + return "I'm sorry, but I was unable to add this entry to your knowledge base."; + } + return "I've successfully saved this entry to your knowledge base. You can ask me to recall this information at any time."; + }, + tags: ['knowledge-base'], + }); + }, +}; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts index b083e3b8754bc..2b134dfd86335 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool.test.ts @@ -14,6 +14,7 @@ import { MAX_SIZE } from './helpers'; import type { RetrievalQAChain } from 'langchain/chains'; import { mockAlertsFieldsApi } from '@kbn/elastic-assistant-plugin/server/__mocks__/alerts'; import type { ExecuteConnectorRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen'; +import { loggerMock } from '@kbn/logging-mocks'; describe('OpenAndAcknowledgedAlertsTool', () => { const alertsIndexPattern = 'alerts-index'; @@ -32,10 +33,12 @@ describe('OpenAndAcknowledgedAlertsTool', () => { const isEnabledKnowledgeBase = true; const chain = {} as unknown as RetrievalQAChain; const modelExists = true; + const logger = loggerMock.create(); const rest = { isEnabledKnowledgeBase, esClient, chain, + logger, modelExists, }; diff --git a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts index 4798b4923de96..f4365787b9189 100644 --- a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts +++ b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts @@ -44,7 +44,7 @@ export const PLI_PRODUCT_FEATURES: PliProductFeatures = { ], }, cloud: { - essentials: [], + essentials: [ProductFeatureKey.cloudSecurityPosture], complete: [], }, } as const; diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/register_upsellings.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/register_upsellings.tsx index 23c5faf1551cc..ef4574424b42c 100644 --- a/x-pack/plugins/security_solution_serverless/public/upselling/register_upsellings.tsx +++ b/x-pack/plugins/security_solution_serverless/public/upselling/register_upsellings.tsx @@ -20,6 +20,13 @@ import type { UpsellingSectionId, } from '@kbn/security-solution-upselling/service/types'; import React from 'react'; +import { CloudSecurityPostureIntegrationPliBlockLazy } from './sections/cloud_security_posture'; +import { + EndpointAgentTamperProtectionLazy, + EndpointPolicyProtectionsLazy, + EndpointProtectionUpdatesLazy, + RuleDetailsEndpointExceptionsLazy, +} from './sections/endpoint_management'; import type { SecurityProductTypes } from '../../common/config'; import { getProductProductFeatures } from '../../common/pli/pli_features'; import type { Services } from '../common/services'; @@ -32,12 +39,6 @@ import { OsqueryResponseActionsUpsellingSectionLazy, ThreatIntelligencePaywallLazy, } from './lazy_upselling'; -import { - EndpointAgentTamperProtectionLazy, - EndpointPolicyProtectionsLazy, - EndpointProtectionUpdatesLazy, - RuleDetailsEndpointExceptionsLazy, -} from './sections/endpoint_management'; import * as i18n from './translations'; interface UpsellingsConfig { @@ -160,6 +161,11 @@ export const upsellingSections: UpsellingSections = [ pli: ProductFeatureKey.endpointProtectionUpdates, component: EndpointProtectionUpdatesLazy, }, + { + id: 'cloud_security_posture_integration_installation', + pli: ProductFeatureKey.cloudSecurityPosture, + component: CloudSecurityPostureIntegrationPliBlockLazy, + }, { id: 'entity_analytics_panel', pli: ProductFeatureKey.advancedInsights, diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/sections/cloud_security_posture/cloud_security_posture_integration_pli_block.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/sections/cloud_security_posture/cloud_security_posture_integration_pli_block.tsx new file mode 100644 index 0000000000000..dd742aa3d5d9f --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/upselling/sections/cloud_security_posture/cloud_security_posture_integration_pli_block.tsx @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { EuiCard, EuiIcon, EuiSpacer } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +/** + * Component displayed when a given product tier is not allowed to use Cloud Security Posture Integrations installation forms. + */ +export const CloudSecurityPostureIntegrationPliBlock = memo(() => { + // TODO: prefer to use getProductTypeByPLI(ProductFeatureKey.cloudSecurityPosture) after we change returned text to include "Protection" + const requiredPLI = 'Cloud Protection Essentials'; + + return ( + <> + + } + betaBadgeProps={{ + label: i18n.translate( + 'xpack.securitySolutionServerless.cloudSecurityPostureIntegrationPliBlock.badgeText', + { + defaultMessage: 'Cloud Protection Essentials', + } + ), + }} + title={ +

+ + {i18n.translate( + 'xpack.securitySolutionServerless.cloudSecurityPostureIntegrationPliBlock.cardTitle', + { + defaultMessage: 'Protection updates', + } + )} + +

+ } + > +
+ {i18n.translate( + 'xpack.securitySolutionServerless.cloudSecurityPostureIntegrationPliBlock.cardMessage', + { + defaultMessage: + 'To turn on CSPM, KSPM or CNVM, view your Cloud Posture Dashboards and generate findings of misconfiguration or vulnerabilities in your cloud environment, you must add {requiredPLI} under Manage --> Project features.', + values: { + requiredPLI, + }, + } + )} +
+ + + ); +}); +CloudSecurityPostureIntegrationPliBlock.displayName = 'CloudSecurityPostureIntegrationPliBlock'; diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/sections/cloud_security_posture/index.ts b/x-pack/plugins/security_solution_serverless/public/upselling/sections/cloud_security_posture/index.ts new file mode 100644 index 0000000000000..b5c5794e00185 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/upselling/sections/cloud_security_posture/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { lazy } from 'react'; + +export const CloudSecurityPostureIntegrationPliBlockLazy = lazy(() => + import('./cloud_security_posture_integration_pli_block').then( + ({ CloudSecurityPostureIntegrationPliBlock }) => ({ + default: CloudSecurityPostureIntegrationPliBlock, + }) + ) +); diff --git a/x-pack/plugins/stack_connectors/common/bedrock/schema.ts b/x-pack/plugins/stack_connectors/common/bedrock/schema.ts index 2fade1be5fc40..bf35aa6bb8e0d 100644 --- a/x-pack/plugins/stack_connectors/common/bedrock/schema.ts +++ b/x-pack/plugins/stack_connectors/common/bedrock/schema.ts @@ -38,6 +38,7 @@ export const InvokeAIActionParamsSchema = schema.object({ temperature: schema.maybe(schema.number()), stopSequences: schema.maybe(schema.arrayOf(schema.string())), system: schema.maybe(schema.string()), + maxTokens: schema.maybe(schema.number()), // abort signal from client signal: schema.maybe(schema.any()), timeout: schema.maybe(schema.number()), diff --git a/x-pack/plugins/stack_connectors/server/connector_types/bedrock/bedrock.ts b/x-pack/plugins/stack_connectors/server/connector_types/bedrock/bedrock.ts index 1a4b6aad6653e..8b05c30a5b0cb 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/bedrock/bedrock.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/bedrock/bedrock.ts @@ -78,6 +78,7 @@ export class BedrockConnector extends SubActionConnector { method: 'runApi', schema: RunActionParamsSchema, }); + this.registerSubAction({ name: SUB_ACTION.INVOKE_AI, method: 'invokeAI', @@ -305,11 +306,14 @@ The Kibana Connector in use may need to be reconfigured with an updated Amazon B stopSequences, system, temperature, + maxTokens, signal, timeout, }: InvokeAIActionParams): Promise { const res = await this.runApi({ - body: JSON.stringify(formatBedrockBody({ messages, stopSequences, system, temperature })), + body: JSON.stringify( + formatBedrockBody({ messages, stopSequences, system, temperature, maxTokens }) + ), model, signal, timeout, @@ -323,16 +327,18 @@ const formatBedrockBody = ({ stopSequences, temperature = 0, system, + maxTokens = DEFAULT_TOKEN_LIMIT, }: { messages: Array<{ role: string; content: string }>; stopSequences?: string[]; temperature?: number; + maxTokens?: number; // optional system message to be sent to the API system?: string; }) => ({ anthropic_version: 'bedrock-2023-05-31', ...ensureMessageFormat(messages, system), - max_tokens: DEFAULT_TOKEN_LIMIT, + max_tokens: maxTokens, stop_sequences: stopSequences, temperature, }); @@ -351,6 +357,11 @@ const ensureMessageFormat = ( const newMessages = messages.reduce((acc: Array<{ role: string; content: string }>, m) => { const lastMessage = acc[acc.length - 1]; + if (m.role === 'system') { + system = `${system.length ? `${system}\n` : ''}${m.content}`; + return acc; + } + if (lastMessage && lastMessage.role === m.role) { // Bedrock only accepts assistant and user roles. // If 2 user or 2 assistant messages are sent in a row, combine the messages into a single message @@ -359,13 +370,12 @@ const ensureMessageFormat = ( { content: `${lastMessage.content}\n${m.content}`, role: m.role }, ]; } - if (m.role === 'system') { - system = `${system.length ? `${system}\n` : ''}${m.content}`; - return acc; - } // force role outside of system to ensure it is either assistant or user - return [...acc, { content: m.content, role: m.role === 'assistant' ? 'assistant' : 'user' }]; + return [ + ...acc, + { content: m.content, role: ['assistant', 'ai'].includes(m.role) ? 'assistant' : 'user' }, + ]; }, []); return system.length ? { system, messages: newMessages } : { messages: newMessages }; }; 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 5f583790d3b8b..d7f5a2beb4c8f 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 @@ -236,7 +236,7 @@ const ActionsConnectorsList: React.FunctionComponent = () => { const name = getConnectorName(value, item); const link = ( - + { + return await testSubjects.exists('cloud-security-posture-integration-pli-auth-block'); + }; + const fillInTextField = async (selector: string, text: string) => { const textField = await testSubjects.find(selector); await textField.type(text); @@ -282,5 +286,6 @@ export function AddCisIntegrationFormPageProvider({ selectValue, getValueInEditPage, isOptionChecked, + checkIntegrationPliAuthBlockExists, }; } diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/agent_policies.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/agent_policies.ts new file mode 100644 index 0000000000000..7ab4e86448bde --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/agent_policies.ts @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { CreateAgentPolicyResponse } from '@kbn/fleet-plugin/common'; +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { skipIfNoDockerRegistry } from '../../helpers'; +import { SpaceTestApiClient } from './api_helper'; +import { cleanFleetIndices } from './helpers'; +import { setupTestSpaces, TEST_SPACE_1 } from './space_helpers'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const esClient = getService('es'); + const kibanaServer = getService('kibanaServer'); + + describe('agent policies', async function () { + skipIfNoDockerRegistry(providerContext); + const apiClient = new SpaceTestApiClient(supertest); + + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + setupTestSpaces(providerContext); + let defaultSpacePolicy1: CreateAgentPolicyResponse; + let spaceTest1Policy1: CreateAgentPolicyResponse; + let spaceTest1Policy2: CreateAgentPolicyResponse; + before(async () => { + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ + apiClient.createAgentPolicy(), + apiClient.createAgentPolicy(TEST_SPACE_1), + apiClient.createAgentPolicy(TEST_SPACE_1), + ]); + defaultSpacePolicy1 = _defaultSpacePolicy1; + spaceTest1Policy1 = _spaceTest1Policy1; + spaceTest1Policy2 = _spaceTest1Policy2; + }); + + describe('GET /agent_policies', () => { + it('should return policies in a specific space', async () => { + const agentPolicies = await apiClient.getAgentPolicies(TEST_SPACE_1); + expect(agentPolicies.total).to.eql(2); + const policyIds = agentPolicies.items?.map((item) => item.id); + expect(policyIds).to.contain(spaceTest1Policy1.item.id); + expect(policyIds).to.contain(spaceTest1Policy2.item.id); + expect(policyIds).not.to.contain(defaultSpacePolicy1.item.id); + }); + + it('should return policies in default space', async () => { + const agentPolicies = await apiClient.getAgentPolicies(); + expect(agentPolicies.total).to.eql(1); + const policyIds = agentPolicies.items?.map((item) => item.id); + expect(policyIds).not.to.contain(spaceTest1Policy1.item.id); + expect(policyIds).not.contain(spaceTest1Policy2.item.id); + expect(policyIds).to.contain(defaultSpacePolicy1.item.id); + }); + }); + + describe('GET /agent_policies/{id}', () => { + it('should allow to access a policy in a specific space', async () => { + await apiClient.getAgentPolicy(spaceTest1Policy1.item.id, TEST_SPACE_1); + }); + it('should not allow to get a policy from a different space from the default space', async () => { + let err: Error | undefined; + try { + await apiClient.getAgentPolicy(spaceTest1Policy1.item.id); + } catch (_err) { + err = _err; + } + + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + + it('should not allow to get an default space policy from a different space', async () => { + let err: Error | undefined; + try { + await apiClient.getAgentPolicy(defaultSpacePolicy1.item.id, TEST_SPACE_1); + } catch (_err) { + err = _err; + } + + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/agents.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/agents.ts new file mode 100644 index 0000000000000..73c2675d7b2d5 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/agents.ts @@ -0,0 +1,136 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { CreateAgentPolicyResponse } from '@kbn/fleet-plugin/common'; +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { skipIfNoDockerRegistry } from '../../helpers'; +import { SpaceTestApiClient } from './api_helper'; +import { cleanFleetIndices } from './helpers'; +import { setupTestSpaces, TEST_SPACE_1 } from './space_helpers'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const esClient = getService('es'); + const kibanaServer = getService('kibanaServer'); + const createFleetAgent = async (agentPolicyId: string, spaceId?: string) => { + const agentResponse = await esClient.index({ + index: '.fleet-agents', + refresh: true, + body: { + access_api_key_id: 'api-key-3', + active: true, + policy_id: agentPolicyId, + policy_revision_idx: 1, + last_checkin_status: 'online', + type: 'PERMANENT', + local_metadata: { + host: { hostname: 'host123' }, + elastic: { agent: { version: '8.15.0' } }, + }, + user_provided_metadata: {}, + enrolled_at: new Date().toISOString(), + last_checkin: new Date().toISOString(), + tags: ['tag1'], + namespaces: spaceId ? [spaceId] : undefined, + }, + }); + + return agentResponse._id; + }; + describe('agents', async function () { + skipIfNoDockerRegistry(providerContext); + const apiClient = new SpaceTestApiClient(supertest); + + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + setupTestSpaces(providerContext); + let defaultSpacePolicy1: CreateAgentPolicyResponse; + let spaceTest1Policy1: CreateAgentPolicyResponse; + let spaceTest1Policy2: CreateAgentPolicyResponse; + + let defaultSpaceAgent1: string; + let defaultSpaceAgent2: string; + let testSpaceAgent1: string; + let testSpaceAgent2: string; + + before(async () => { + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ + apiClient.createAgentPolicy(), + apiClient.createAgentPolicy(TEST_SPACE_1), + apiClient.createAgentPolicy(TEST_SPACE_1), + ]); + defaultSpacePolicy1 = _defaultSpacePolicy1; + spaceTest1Policy1 = _spaceTest1Policy1; + spaceTest1Policy2 = _spaceTest1Policy2; + + const [_defaultSpaceAgent1, _defaultSpaceAgent2, _testSpaceAgent1, _testSpaceAgent2] = + await Promise.all([ + createFleetAgent(defaultSpacePolicy1.item.id, 'default'), + createFleetAgent(defaultSpacePolicy1.item.id), + createFleetAgent(spaceTest1Policy1.item.id, TEST_SPACE_1), + createFleetAgent(spaceTest1Policy2.item.id, TEST_SPACE_1), + ]); + + defaultSpaceAgent1 = _defaultSpaceAgent1; + defaultSpaceAgent2 = _defaultSpaceAgent2; + testSpaceAgent1 = _testSpaceAgent1; + testSpaceAgent2 = _testSpaceAgent2; + }); + + describe('GET /agents', () => { + it('should return agents in a specific space', async () => { + const agents = await apiClient.getAgents(TEST_SPACE_1); + expect(agents.total).to.eql(2); + const agentIds = agents.items?.map((item) => item.id); + expect(agentIds).to.contain(testSpaceAgent1); + expect(agentIds).to.contain(testSpaceAgent2); + }); + + it('should return agents in default space', async () => { + const agents = await apiClient.getAgents(); + expect(agents.total).to.eql(2); + const agentIds = agents.items?.map((item) => item.id); + expect(agentIds).to.contain(defaultSpaceAgent1); + expect(agentIds).to.contain(defaultSpaceAgent2); + }); + }); + + describe('GET /agents/{id}', () => { + it('should allow to retrieve agent in the same space', async () => { + await apiClient.getAgent(testSpaceAgent1, TEST_SPACE_1); + }); + + it('should not allow to get an agent from a different space from the default space', async () => { + let err: Error | undefined; + try { + await apiClient.getAgent(testSpaceAgent1); + } catch (_err) { + err = _err; + } + + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts new file mode 100644 index 0000000000000..cff3d3ddb637b --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts @@ -0,0 +1,142 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidV4 } from 'uuid'; +import type { Agent } from 'supertest'; +import { + CreateAgentPolicyResponse, + GetAgentPoliciesResponse, + GetAgentsResponse, + GetOneAgentPolicyResponse, + GetOneAgentResponse, +} from '@kbn/fleet-plugin/common'; +import { + GetEnrollmentAPIKeysResponse, + GetOneEnrollmentAPIKeyResponse, + PostEnrollmentAPIKeyResponse, + PostEnrollmentAPIKeyRequest, +} from '@kbn/fleet-plugin/common/types'; +import { + GetUninstallTokenResponse, + GetUninstallTokensMetadataResponse, +} from '@kbn/fleet-plugin/common/types/rest_spec/uninstall_token'; + +export class SpaceTestApiClient { + constructor(private readonly supertest: Agent) {} + private getBaseUrl(spaceId?: string) { + return spaceId ? `/s/${spaceId}` : ''; + } + // Agent policies + async createAgentPolicy(spaceId?: string): Promise { + const { body: res } = await this.supertest + .post(`${this.getBaseUrl(spaceId)}/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: `test ${uuidV4()}`, + description: '', + namespace: 'default', + inactivity_timeout: 24 * 1000, + }) + .expect(200); + + return res; + } + async deleteAgentPolicy(agentPolicyId: string, spaceId?: string) { + await this.supertest + .post(`${this.getBaseUrl(spaceId)}/api/fleet/agent_policies/delete`) + .send({ + agentPolicyId, + }) + .set('kbn-xsrf', 'xxxx') + .expect(200); + } + async getAgentPolicy(policyId: string, spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/agent_policies/${policyId}`) + .expect(200); + + return res; + } + async getAgentPolicies(spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/agent_policies`) + .expect(200); + + return res; + } + // Enrollmennt API Keys + async getEnrollmentApiKey( + keyId: string, + spaceId?: string + ): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/enrollment_api_keys/${keyId}`) + .expect(200); + + return res; + } + async getEnrollmentApiKeys(spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/enrollment_api_keys`) + .expect(200); + + return res; + } + async deleteEnrollmentApiKey( + keyId: string, + spaceId?: string + ): Promise { + const { body: res } = await this.supertest + .delete(`${this.getBaseUrl(spaceId)}/api/fleet/enrollment_api_keys/${keyId}`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + + return res; + } + async postEnrollmentApiKeys( + body: PostEnrollmentAPIKeyRequest['body'], + spaceId?: string + ): Promise { + const { body: res } = await this.supertest + .post(`${this.getBaseUrl(spaceId)}/api/fleet/enrollment_api_keys`) + .set('kbn-xsrf', 'xxxx') + .send(body) + .expect(200); + + return res; + } + // Uninstall tokens + async getUninstallTokens(spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/uninstall_tokens`) + .expect(200); + + return res; + } + async getUninstallToken(tokenId: string, spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/uninstall_tokens/${tokenId}`) + .expect(200); + + return res; + } + // Agents + async getAgent(agentId: string, spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/agents/${agentId}`) + .expect(200); + + return res; + } + async getAgents(spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/agents`) + .expect(200); + + return res; + } +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_api_keys.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_api_keys.ts new file mode 100644 index 0000000000000..13238acb3917c --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_api_keys.ts @@ -0,0 +1,196 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { CreateAgentPolicyResponse } from '@kbn/fleet-plugin/common'; +import { type EnrollmentAPIKey } from '@kbn/fleet-plugin/common/types'; +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { skipIfNoDockerRegistry } from '../../helpers'; +import { SpaceTestApiClient } from './api_helper'; +import { cleanFleetIndices } from './helpers'; +import { setupTestSpaces, TEST_SPACE_1 } from './space_helpers'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const esClient = getService('es'); + const kibanaServer = getService('kibanaServer'); + + describe('enrollment api keys', async function () { + skipIfNoDockerRegistry(providerContext); + const apiClient = new SpaceTestApiClient(supertest); + + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + setupTestSpaces(providerContext); + + let defaultSpacePolicy1: CreateAgentPolicyResponse; + let spaceTest1Policy1: CreateAgentPolicyResponse; + let spaceTest1Policy2: CreateAgentPolicyResponse; + let defaultSpaceEnrollmentKey1: EnrollmentAPIKey; + let spaceTest1EnrollmentKey1: EnrollmentAPIKey; + // Create agent policies it should create a enrollment key for every keys + before(async () => { + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ + apiClient.createAgentPolicy(), + apiClient.createAgentPolicy(TEST_SPACE_1), + apiClient.createAgentPolicy(TEST_SPACE_1), + ]); + defaultSpacePolicy1 = _defaultSpacePolicy1; + spaceTest1Policy1 = _spaceTest1Policy1; + spaceTest1Policy2 = _spaceTest1Policy2; + + const space1ApiKeys = await apiClient.getEnrollmentApiKeys(TEST_SPACE_1); + const defaultSpaceApiKeys = await apiClient.getEnrollmentApiKeys(); + defaultSpaceEnrollmentKey1 = defaultSpaceApiKeys.items[0]; + spaceTest1EnrollmentKey1 = space1ApiKeys.items[0]; + }); + + describe('read APIs', () => { + describe('GET /enrollment_api_keys', () => { + it('should return enrolmment keys in a specific space', async () => { + const apiKeys = await apiClient.getEnrollmentApiKeys(TEST_SPACE_1); + expect(apiKeys.total).to.eql(2); + const policyIds = apiKeys.items?.map((item) => item.policy_id); + expect(policyIds).to.contain(spaceTest1Policy1.item.id); + expect(policyIds).to.contain(spaceTest1Policy2.item.id); + expect(policyIds).not.to.contain(defaultSpacePolicy1.item.id); + }); + + it('should return enrolmment keys in default space', async () => { + const apiKeys = await apiClient.getEnrollmentApiKeys(); + expect(apiKeys.total).to.eql(1); + const policyIds = apiKeys.items?.map((item) => item.policy_id); + expect(policyIds).not.to.contain(spaceTest1Policy1.item.id); + expect(policyIds).not.contain(spaceTest1Policy2.item.id); + expect(policyIds).to.contain(defaultSpacePolicy1.item.id); + }); + }); + + describe('GET /enrollment_api_keys/{id}', () => { + it('should allow to access a enrollment keu in a specific space', async () => { + await apiClient.getEnrollmentApiKey(spaceTest1EnrollmentKey1.id, TEST_SPACE_1); + }); + it('should not allow to get an enrolmment key from a different space from the default space', async () => { + let err: Error | undefined; + try { + await apiClient.getEnrollmentApiKey(spaceTest1EnrollmentKey1.id); + } catch (_err) { + err = _err; + } + + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + + it('should not allow to get an default space enrolmment key from a different space', async () => { + let err: Error | undefined; + try { + await apiClient.getEnrollmentApiKey(defaultSpaceEnrollmentKey1.id, TEST_SPACE_1); + } catch (_err) { + err = _err; + } + + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + }); + }); + + describe('write APIs', () => { + describe('POST /enrollment_api_keys', () => { + it('should allow to create an enrollment api key for a policy in the default space', async () => { + const res = await apiClient.postEnrollmentApiKeys({ + policy_id: defaultSpacePolicy1.item.id, + }); + expect(res.item).to.have.key('id'); + }); + it('should allow to create an enrollment api key for a policy in the same space', async () => { + const res = await apiClient.postEnrollmentApiKeys( + { + policy_id: spaceTest1Policy1.item.id, + }, + TEST_SPACE_1 + ); + expect(res.item).to.have.key('id'); + }); + + it('should not allow to create an enrollment api key for a policy in a different space', async () => { + let err: Error | undefined; + try { + await apiClient.postEnrollmentApiKeys( + { + policy_id: defaultSpacePolicy1.item.id, + }, + TEST_SPACE_1 + ); + } catch (_err) { + err = _err; + } + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + + it('should not allow to create an enrollment api key for a policy from a different space in the default space', async () => { + let err: Error | undefined; + try { + await apiClient.postEnrollmentApiKeys({ + policy_id: spaceTest1Policy1.item.id, + }); + } catch (_err) { + err = _err; + } + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + }); + describe('DELETE /enrollment_api_keys', () => { + it('should not allow to delete an enrollment api key in a different space', async () => { + let err: Error | undefined; + try { + await apiClient.deleteEnrollmentApiKey(defaultSpaceEnrollmentKey1.id, TEST_SPACE_1); + } catch (_err) { + err = _err; + } + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + + it('should not allow to delete an enrollment api key from a different space in the default space', async () => { + let err: Error | undefined; + try { + await apiClient.deleteEnrollmentApiKey(spaceTest1EnrollmentKey1.id); + } catch (_err) { + err = _err; + } + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + it('should allow to delete an enrollment api key in the default space', async () => { + await apiClient.deleteEnrollmentApiKey(defaultSpaceEnrollmentKey1.id); + }); + it('should allow to create an enrollment api key in the same space', async () => { + await apiClient.deleteEnrollmentApiKey(spaceTest1EnrollmentKey1.id, TEST_SPACE_1); + }); + }); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/helpers.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/helpers.ts new file mode 100644 index 0000000000000..fe731e323ce12 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/helpers.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Client } from '@elastic/elasticsearch'; + +export async function cleanFleetIndices(esClient: Client) { + await Promise.all([ + esClient.deleteByQuery({ + index: '.fleet-enrollment-api-keys', + q: '*', + ignore_unavailable: true, + refresh: true, + }), + esClient.deleteByQuery({ + index: '.fleet-agents', + q: '*', + ignore_unavailable: true, + refresh: true, + }), + ]); +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/index.js b/x-pack/test/fleet_api_integration/apis/space_awareness/index.js new file mode 100644 index 0000000000000..4313c329104f2 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/index.js @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export default function loadTests({ loadTestFile }) { + describe('Space awareness', () => { + loadTestFile(require.resolve('./enrollment_api_keys')); + loadTestFile(require.resolve('./uninstall_tokens')); + loadTestFile(require.resolve('./agent_policies')); + loadTestFile(require.resolve('./agents')); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/space_helpers.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/space_helpers.ts new file mode 100644 index 0000000000000..b529c6390517a --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/space_helpers.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 { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; + +export const TEST_SPACE_1 = 'test1'; + +export function setupTestSpaces(providerContex: FtrProviderContext) { + const kibanaServer = providerContex.getService('kibanaServer'); + before(async () => + Promise.all([ + kibanaServer.spaces + .create({ + id: TEST_SPACE_1, + name: TEST_SPACE_1, + }) + .catch((err) => {}), + ]) + ); +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/uninstall_tokens.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/uninstall_tokens.ts new file mode 100644 index 0000000000000..12bbc8bec3b37 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/uninstall_tokens.ts @@ -0,0 +1,115 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { CreateAgentPolicyResponse } from '@kbn/fleet-plugin/common'; +import { UninstallTokenMetadata } from '@kbn/fleet-plugin/common/types/models/uninstall_token'; +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { skipIfNoDockerRegistry } from '../../helpers'; +import { SpaceTestApiClient } from './api_helper'; +import { cleanFleetIndices } from './helpers'; +import { setupTestSpaces, TEST_SPACE_1 } from './space_helpers'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const esClient = getService('es'); + const kibanaServer = getService('kibanaServer'); + + describe('uninstall tokens', async function () { + skipIfNoDockerRegistry(providerContext); + const apiClient = new SpaceTestApiClient(supertest); + + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + setupTestSpaces(providerContext); + let defaultSpacePolicy1: CreateAgentPolicyResponse; + let spaceTest1Policy1: CreateAgentPolicyResponse; + let spaceTest1Policy2: CreateAgentPolicyResponse; + let defaultSpaceToken: UninstallTokenMetadata; + let spaceTest1Token: UninstallTokenMetadata; + // Create agent policies it should create am uninstall token for every keys + before(async () => { + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ + apiClient.createAgentPolicy(), + apiClient.createAgentPolicy(TEST_SPACE_1), + apiClient.createAgentPolicy(TEST_SPACE_1), + ]); + defaultSpacePolicy1 = _defaultSpacePolicy1; + spaceTest1Policy1 = _spaceTest1Policy1; + spaceTest1Policy2 = _spaceTest1Policy2; + + const space1Tokens = await apiClient.getUninstallTokens(TEST_SPACE_1); + const defaultSpaceTokens = await apiClient.getUninstallTokens(); + defaultSpaceToken = defaultSpaceTokens.items[0]; + spaceTest1Token = space1Tokens.items[0]; + }); + + describe('GET /uninstall_tokens', () => { + it('should return uninstall_tokens in a specific space', async () => { + const tokens = await apiClient.getUninstallTokens(TEST_SPACE_1); + expect(tokens.total).to.eql(2); + const policyIds = tokens.items?.map((item) => item.policy_id); + expect(policyIds).to.contain(spaceTest1Policy1.item.id); + expect(policyIds).to.contain(spaceTest1Policy2.item.id); + expect(policyIds).not.to.contain(defaultSpacePolicy1.item.id); + }); + + it('should return uninstall_tokens in default space', async () => { + const tokens = await apiClient.getUninstallTokens(); + expect(tokens.total).to.eql(1); + const policyIds = tokens.items?.map((item) => item.policy_id); + expect(policyIds).not.to.contain(spaceTest1Policy1.item.id); + expect(policyIds).not.contain(spaceTest1Policy2.item.id); + expect(policyIds).to.contain(defaultSpacePolicy1.item.id); + }); + }); + + describe('GET /uninstall_tokens/{id}', () => { + it('should allow to access a uninstall token in a specific space', async () => { + await apiClient.getUninstallToken(spaceTest1Token.id, TEST_SPACE_1); + }); + it('should not allow to get an uninstall token from a different space from the default space', async () => { + let err: Error | undefined; + try { + await apiClient.getUninstallToken(spaceTest1Token.id); + } catch (_err) { + err = _err; + } + + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + + it('should not allow to get an default space uninstall token from a different space', async () => { + let err: Error | undefined; + try { + await apiClient.getUninstallToken(defaultSpaceToken.id, TEST_SPACE_1); + } catch (_err) { + err = _err; + } + + expect(err).to.be.an(Error); + expect(err?.message).to.match(/404 "Not Found"/); + }); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/config.space_awareness.ts b/x-pack/test/fleet_api_integration/config.space_awareness.ts new file mode 100644 index 0000000000000..f77d3826964ed --- /dev/null +++ b/x-pack/test/fleet_api_integration/config.space_awareness.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const baseFleetApiConfig = await readConfigFile(require.resolve('./config.base.ts')); + + const serverArgs: string[] = [...baseFleetApiConfig.get('kbnTestServer.serverArgs')]; + + const enableExperimentalIndex = serverArgs.findIndex((val) => + val.includes('xpack.fleet.enableExperimental') + ); + serverArgs[enableExperimentalIndex] = `--xpack.fleet.enableExperimental=${JSON.stringify([ + 'outputSecretsStorage', + 'agentTamperProtectionEnabled', + 'enableStrictKQLValidation', + 'subfeaturePrivileges', + 'enablePackagesStateMachine', + 'useSpaceAwareness', + ])}`; + + return { + ...baseFleetApiConfig.getAll(), + kbnTestServer: { + ...baseFleetApiConfig.get('kbnTestServer'), + serverArgs, + }, + testFiles: [require.resolve('./apis/space_awareness')], + junit: { + reportName: 'X-Pack Fleet Agent Policy API Integration Tests', + }, + }; +} diff --git a/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/ml/alert_flyout.ts b/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/ml/alert_flyout.ts index 58c72ef9d1a27..7802a25f53e2f 100644 --- a/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/ml/alert_flyout.ts +++ b/x-pack/test/functional_with_es_ssl/apps/discover_ml_uptime/ml/alert_flyout.ts @@ -67,7 +67,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { let testJobId = ''; - describe('anomaly detection alert', function () { + // Failing: See https://github.com/elastic/kibana/issues/186261 + describe.skip('anomaly detection alert', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ecommerce'); await ml.testResources.createDataViewIfNeeded('ft_ecommerce', 'order_date'); diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/nlp_cleanup_task/basic_license_essentials_tier/task_execution.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/nlp_cleanup_task/basic_license_essentials_tier/task_execution.ts index c560c1db035ac..1e018646dd610 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/genai/nlp_cleanup_task/basic_license_essentials_tier/task_execution.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/nlp_cleanup_task/basic_license_essentials_tier/task_execution.ts @@ -25,7 +25,10 @@ export default ({ getService }: FtrProviderContext): void => { id: SUPPORTED_TRAINED_MODELS.TINY_ELSER.name, }; - describe('@serverless NLP Cleanup Task in Essentials Tier', () => { + // This started failing after merging with main, so skipping for now + // See https://github.com/elastic/kibana/pull/186219 for details, but issue appears to be with + // sporadic errors in loading `pt_tiny_elser` + describe.skip('@serverless NLP Cleanup Task in Essentials Tier', () => { describe('New Essentials Deployment', () => { it('registers and enables NLP Cleanup Task', async () => { const task = await kibanaServer.savedObjects.get({ diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/table_row_actions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/table_row_actions.cy.ts new file mode 100644 index 0000000000000..3166f2e7f6b89 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/table_row_actions.cy.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getNewRule } from '../../../objects/rule'; +import { deleteAlertsAndRules } from '../../../tasks/api_calls/common'; +import { createRule } from '../../../tasks/api_calls/rules'; +import { login } from '../../../tasks/login'; +import { visitWithTimeRange } from '../../../tasks/navigation'; +import { openTimelineUsingToggle } from '../../../tasks/security_main'; +import { ALERTS_URL } from '../../../urls/navigation'; +import { + createNewTimeline, + executeTimelineKQL, + executeTimelineSearch, + openTimelineEventContextMenu, +} from '../../../tasks/timeline'; +import { MARK_ALERT_ACKNOWLEDGED_BTN } from '../../../screens/alerts'; +import { GET_TIMELINE_GRID_CELL } from '../../../screens/timeline'; + +describe( + 'Timeline table Row Actions', + { + tags: ['@ess', '@serverless', '@skipInServerlessMKI'], + }, + () => { + beforeEach(() => { + deleteAlertsAndRules(); + createRule(getNewRule()); + login(); + visitWithTimeRange(ALERTS_URL); + openTimelineUsingToggle(); + createNewTimeline(); + executeTimelineSearch('*'); + }); + + it('should refresh the table when alert status is changed', () => { + executeTimelineKQL('kibana.alert.workflow_status:open'); + cy.get(GET_TIMELINE_GRID_CELL('@timestamp')).should('have.length', 1); + openTimelineEventContextMenu(); + cy.get(MARK_ALERT_ACKNOWLEDGED_BTN).click(); + cy.get(GET_TIMELINE_GRID_CELL('@timestamp')).should('have.length', 0); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/unified_components/table_row_actions.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/unified_components/table_row_actions.cy.ts new file mode 100644 index 0000000000000..39fda4d67f244 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/unified_components/table_row_actions.cy.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; +import { getNewRule } from '../../../../objects/rule'; +import { createRule } from '../../../../tasks/api_calls/rules'; +import { MARK_ALERT_ACKNOWLEDGED_BTN } from '../../../../screens/alerts'; +import { GET_UNIFIED_DATA_GRID_CELL } from '../../../../screens/unified_timeline'; +import { login } from '../../../../tasks/login'; +import { visitWithTimeRange } from '../../../../tasks/navigation'; +import { openTimelineUsingToggle } from '../../../../tasks/security_main'; +import { + createNewTimeline, + executeTimelineKQL, + executeTimelineSearch, + openTimelineEventContextMenu, +} from '../../../../tasks/timeline'; +import { ALERTS_URL } from '../../../../urls/navigation'; + +describe( + 'Unified Timeline table Row Actions', + { + tags: ['@ess', '@serverless', '@skipInServerlessMKI'], + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'unifiedComponentsInTimelineEnabled', + ])}`, + ], + }, + }, + }, + () => { + beforeEach(() => { + deleteAlertsAndRules(); + createRule(getNewRule()); + login(); + visitWithTimeRange(ALERTS_URL); + openTimelineUsingToggle(); + createNewTimeline(); + executeTimelineSearch('*'); + }); + + it('should refresh the table when alert status is changed', () => { + executeTimelineKQL('kibana.alert.workflow_status:open'); + cy.get(GET_UNIFIED_DATA_GRID_CELL('@timestamp', 0)).should('be.visible'); + openTimelineEventContextMenu(); + cy.get(MARK_ALERT_ACKNOWLEDGED_BTN).click(); + cy.get(GET_UNIFIED_DATA_GRID_CELL('@timestamp', 0)).should('not.exist'); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts index 75c78c24e4dc6..e2bf51be199c9 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts @@ -89,12 +89,14 @@ import { BOTTOM_BAR_TIMELINE_PLUS_ICON, BOTTOM_BAR_CREATE_NEW_TIMELINE, BOTTOM_BAR_CREATE_NEW_TIMELINE_TEMPLATE, + TIMELINE_FLYOUT, } from '../screens/timeline'; import { REFRESH_BUTTON, TIMELINE, TIMELINES_TAB_TEMPLATE } from '../screens/timelines'; import { drag, drop, waitForTabToBeLoaded } from './common'; import { closeFieldsBrowser, filterFieldsBrowser } from './fields_browser'; +import { TIMELINE_CONTEXT_MENU_BTN } from '../screens/alerts'; const hostExistsQuery = 'host.name: *'; @@ -505,3 +507,23 @@ export const selectKqlSearchMode = () => { cy.get(TIMELINE_SEARCH_OR_FILTER).click(); cy.get(TIMELINE_KQLMODE_SEARCH).click(); }; + +export const openTimelineEventContextMenu = (rowIndex: number = 0) => { + cy.get(TIMELINE_FLYOUT).within(() => { + const togglePopover = () => { + cy.get(TIMELINE_CONTEXT_MENU_BTN).eq(rowIndex).should('be.visible'); + cy.get(TIMELINE_CONTEXT_MENU_BTN).eq(rowIndex).click(); + cy.get(TIMELINE_CONTEXT_MENU_BTN) + .first() + .should('be.visible') + .then(($btnEl) => { + if ($btnEl.attr('data-popover-open') !== 'true') { + cy.log(`${TIMELINE_CONTEXT_MENU_BTN} was flaky, attempting to re-open popover`); + togglePopover(); + } + }); + }; + + togglePopover(); + }); +}; diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/slos/create_slo.ts b/x-pack/test_serverless/api_integration/test_suites/observability/slos/create_slo.ts index 02ac42ad6e81a..197d68bdaa77f 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/slos/create_slo.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/slos/create_slo.ts @@ -149,10 +149,10 @@ export default function ({ getService }: FtrProviderContext) { const expectedTransforms: ExpectedTransforms = { count: 2, results: { - transform0: { id: 'slo-my-custom-id1-1', destIndex: '.slo-observability.sli-v3.2' }, + transform0: { id: 'slo-my-custom-id1-1', destIndex: '.slo-observability.sli-v3.3' }, transform1: { id: 'slo-summary-my-custom-id1-1', - destIndex: '.slo-observability.summary-v3.2', + destIndex: '.slo-observability.summary-v3.3', }, }, typeOfVersion: 'string', @@ -318,25 +318,25 @@ export default function ({ getService }: FtrProviderContext) { const expectedTransforms: ExpectedTransforms = { count: 8, results: { - transform0: { id: 'slo-my-custom-id1-1', destIndex: '.slo-observability.sli-v3.2' }, - transform1: { id: 'slo-my-custom-id2-1', destIndex: '.slo-observability.sli-v3.2' }, - transform2: { id: 'slo-my-custom-id3-1', destIndex: '.slo-observability.sli-v3.2' }, - transform3: { id: 'slo-my-custom-id4-1', destIndex: '.slo-observability.sli-v3.2' }, + transform0: { id: 'slo-my-custom-id1-1', destIndex: '.slo-observability.sli-v3.3' }, + transform1: { id: 'slo-my-custom-id2-1', destIndex: '.slo-observability.sli-v3.3' }, + transform2: { id: 'slo-my-custom-id3-1', destIndex: '.slo-observability.sli-v3.3' }, + transform3: { id: 'slo-my-custom-id4-1', destIndex: '.slo-observability.sli-v3.3' }, transform4: { id: 'slo-summary-my-custom-id1-1', - destIndex: '.slo-observability.summary-v3.2', + destIndex: '.slo-observability.summary-v3.3', }, transform5: { id: 'slo-summary-my-custom-id2-1', - destIndex: '.slo-observability.summary-v3.2', + destIndex: '.slo-observability.summary-v3.3', }, transform6: { id: 'slo-summary-my-custom-id3-1', - destIndex: '.slo-observability.summary-v3.2', + destIndex: '.slo-observability.summary-v3.3', }, transform7: { id: 'slo-summary-my-custom-id4-1', - destIndex: '.slo-observability.summary-v3.2', + destIndex: '.slo-observability.summary-v3.3', }, }, typeOfVersion: 'string', diff --git a/x-pack/test_serverless/functional/config.base.ts b/x-pack/test_serverless/functional/config.base.ts index 07aa6c9af5318..916be8ecd5cf3 100644 --- a/x-pack/test_serverless/functional/config.base.ts +++ b/x-pack/test_serverless/functional/config.base.ts @@ -16,7 +16,6 @@ import type { CreateTestConfigOptions } from '../shared/types'; export function createTestConfig(options: CreateTestConfigOptions) { return async ({ readConfigFile }: FtrConfigProviderContext) => { const svlSharedConfig = await readConfigFile(require.resolve('../shared/config.base.ts')); - return { ...svlSharedConfig.getAll(), @@ -110,6 +109,9 @@ export function createTestConfig(options: CreateTestConfigOptions) { maintenanceWindows: { pathname: '/app/management/insightsAndAlerting/maintenanceWindows', }, + fleet: { + pathname: '/app/fleet', + }, }, // choose where screenshots should be saved screenshots: { diff --git a/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts similarity index 81% rename from x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts rename to x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts index 6a755c26e91d4..7063ec943dfba 100644 --- a/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.ts +++ b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.basic.ts @@ -16,6 +16,8 @@ export default createTestConfig({ kbnServerArgs: [ `--xpack.fleet.packages.0.name=cloud_security_posture`, `--xpack.fleet.packages.0.version=${CLOUD_SECURITY_PLUGIN_VERSION}`, + // configs the environment to run on the basic product tier, which may include PLI block components or messages + `--xpack.securitySolutionServerless.productTypes=${JSON.stringify([])}`, ], // load tests in the index file testFiles: [require.resolve('./ftr/cloud_security_posture')], diff --git a/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.essentials.ts b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.essentials.ts new file mode 100644 index 0000000000000..320b130e63e91 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/config.cloud_security_posture.essentials.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createTestConfig } from '../../config.base'; + +export default createTestConfig({ + serverlessProject: 'security', + junit: { + reportName: 'Serverless Security Cloud Security Functional Tests', + }, + kbnServerArgs: [ + `--xpack.fleet.packages.0.name=cloud_security_posture`, + `--xpack.fleet.packages.0.version=1.5.2`, + `--xpack.securitySolutionServerless.productTypes=${JSON.stringify([ + { product_line: 'security', product_tier: 'essentials' }, + { product_line: 'endpoint', product_tier: 'essentials' }, + { product_line: 'cloud', product_tier: 'essentials' }, + ])}`, + ], + // we should only resolve files which are ending with `.essentials.ts` + testFiles: [require.resolve('./ftr/cloud_security_posture/csp_integrations_form.essentials.ts')], +}); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/csp_integrations_form.essentials.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/csp_integrations_form.essentials.ts new file mode 100644 index 0000000000000..28f494598835a --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/csp_integrations_form.essentials.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import type { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function (providerContext: FtrProviderContext) { + const { getPageObjects } = providerContext; + const pageObjects = getPageObjects(['cisAddIntegration', 'header', 'svlCommonPage']); + + describe('[Essentials PLI] Test Cloud Security Posture Integrations on Serverless', function () { + this.tags(['skipMKI']); + let cisIntegration: typeof pageObjects.cisAddIntegration; + + before(async () => { + await pageObjects.svlCommonPage.login(); + }); + + beforeEach(async () => { + cisIntegration = pageObjects.cisAddIntegration; + await cisIntegration.navigateToAddIntegrationCspmPage(); + }); + + it('[Essentials PLI] Integration installation form should be available with Essentials or Complete PLI', async () => { + await pageObjects.header.waitUntilLoadingHasFinished(); + const pliBlockExists = await cisIntegration.checkIntegrationPliAuthBlockExists(); + + expect(pliBlockExists).to.be(false); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/csp_integrations_form.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/csp_integrations_form.ts new file mode 100644 index 0000000000000..a136d707cdb84 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/csp_integrations_form.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import type { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function (providerContext: FtrProviderContext) { + const { getPageObjects } = providerContext; + const pageObjects = getPageObjects(['cisAddIntegration', 'header', 'svlCommonPage']); + + describe('Test Cloud Security Posture Integrations on Serverless', function () { + this.tags(['skipMKI']); + let cisIntegration: typeof pageObjects.cisAddIntegration; + + before(async () => { + await pageObjects.svlCommonPage.login(); + }); + + beforeEach(async () => { + cisIntegration = pageObjects.cisAddIntegration; + await cisIntegration.navigateToAddIntegrationCspmPage(); + }); + + it('Integration installation form should not be available without required PLI', async () => { + await pageObjects.header.waitUntilLoadingHasFinished(); + const pliBlockExists = await cisIntegration.checkIntegrationPliAuthBlockExists(); + + expect(pliBlockExists).to.be(true); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts index 4750199f7f566..c94ab36cd46df 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts @@ -10,6 +10,9 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('cloud_security_posture', function () { this.tags(['cloud_security_posture']); + + // do not resolve files which are ending with `.essentials.ts` loadTestFile(require.resolve('./compliance_dashboard')); + loadTestFile(require.resolve('./csp_integrations_form')); }); } diff --git a/yarn.lock b/yarn.lock index fd9203c60e8f2..ebb123de3032e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,21 +35,6 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@anthropic-ai/sdk@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.9.1.tgz#b2d2b7bf05c90dce502c9a2e869066870f69ba88" - integrity sha512-wa1meQ2WSfoY8Uor3EdrJq0jTiZJoKoSii2ZVWRY1oN4Tlr5s59pADg9T79FTbPe1/se5c3pBeZgJL63wmuoBA== - dependencies: - "@types/node" "^18.11.18" - "@types/node-fetch" "^2.6.4" - abort-controller "^3.0.0" - agentkeepalive "^4.2.1" - digest-fetch "^1.3.0" - form-data-encoder "1.7.2" - formdata-node "^4.3.2" - node-fetch "^2.6.7" - web-streams-polyfill "^3.2.1" - "@apidevtools/json-schema-ref-parser@^9.0.6": version "9.0.9" resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" @@ -111,12 +96,12 @@ tslib "^1.11.1" "@aws-sdk/types@^3.222.0": - version "3.433.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.433.0.tgz#0f94eae2a4a3525ca872c9ab04e143c01806d755" - integrity sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA== + version "3.577.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.577.0.tgz#7700784d368ce386745f8c340d9d68cea4716f90" + integrity sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA== dependencies: - "@smithy/types" "^2.4.0" - tslib "^2.5.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" @@ -5168,6 +5153,10 @@ version "0.0.0" uid "" +"@kbn/integration-assistant-plugin@link:x-pack/plugins/integration_assistant": + version "0.0.0" + uid "" + "@kbn/interactive-setup-plugin@link:src/plugins/interactive_setup": version "0.0.0" uid "" @@ -6908,48 +6897,68 @@ resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== -"@langchain/community@^0.0.44", "@langchain/community@~0.0.41": - version "0.0.44" - resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.44.tgz#b4f3453e3fd0b7a8c704fc35b004d7d738bd3416" - integrity sha512-II9Hz90jJmfWRICtxTg1auQWzFw0npqacWiiOpaxNhzs6rptdf56gyfC48Z6n1ii4R8FfAlfX6YxhOE7lGGKXg== +"@langchain/community@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.2.4.tgz#fb5feb4f4a01a1b33adfd28ce7126d0dedb3e6d1" + integrity sha512-rwrPNQLyIe84TPqPYbYOfDA4G/ba1rdj7OtZg63dQmxIvNDOmUCh4xIQac2iuRUnM3o4Ben0Faa9qz+V5oPgIA== dependencies: - "@langchain/core" "~0.1.44" - "@langchain/openai" "~0.0.19" + "@langchain/core" "~0.2.0" + "@langchain/openai" "~0.0.28" + binary-extensions "^2.2.0" expr-eval "^2.0.2" flat "^5.0.2" + js-yaml "^4.1.0" + langchain "0.2.3" langsmith "~0.1.1" uuid "^9.0.0" zod "^3.22.3" zod-to-json-schema "^3.22.5" -"@langchain/core@0.1.53", "@langchain/core@^0.1.53", "@langchain/core@~0.1.44", "@langchain/core@~0.1.45": - version "0.1.53" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.53.tgz#40bf273b6d5e1426c60ce9cc259562fe656573f1" - integrity sha512-khfRTu2DSCNMPUmnKx7iH0TpEaunW/4BgR6STTteRRDd0NFtXGfAwUuY9sm0+EKi/XKhdAmpGnfLwSfNg5F0Qw== +"@langchain/core@0.2.3", "@langchain/core@>0.1.0 <0.3.0", "@langchain/core@>0.1.56 <0.3.0", "@langchain/core@>0.1.61 <0.3.0", "@langchain/core@~0.2.0": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.3.tgz#7faa82f92b0c7843506e827a38bfcbb60f009d13" + integrity sha512-mVuFHSLpPQ4yOHNXeoSA3LnmIMuFmUiit5rvbYcPZqM6SrB2zCNN2nD4Ty5+3H5X4tYItDoSqsTuUNUQySXRQw== dependencies: ansi-styles "^5.0.0" camelcase "6" decamelize "1.2.0" - js-tiktoken "^1.0.8" + js-tiktoken "^1.0.12" langsmith "~0.1.7" ml-distance "^4.0.0" + mustache "^4.2.0" p-queue "^6.6.2" p-retry "4" uuid "^9.0.0" zod "^3.22.4" zod-to-json-schema "^3.22.3" -"@langchain/openai@^0.0.25", "@langchain/openai@~0.0.19": - version "0.0.25" - resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e" - integrity sha512-cD9xPDDXK2Cjs6yYg27BpdzBnQZvBb1yaNgMoGLWIT27UQVRyT96PLC1OVMQOmMmHaKDBCj/1bW4GQQgX7+d2Q== +"@langchain/langgraph@^0.0.23": + version "0.0.23" + resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.0.23.tgz#34b5ad5dc9fe644ee96bcfcf11197ec1d7f9e0e2" + integrity sha512-pXlcsBOseT5xdf9enUqbLQ/59LaZxgMI2dL2vFJ+EpcoK7bQnlzzhRtRPp+vubMyMeEKRoAXlaA9ObwpVi93CA== + dependencies: + "@langchain/core" ">0.1.61 <0.3.0" + uuid "^9.0.1" + +"@langchain/openai@^0.0.34", "@langchain/openai@~0.0.28": + version "0.0.34" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.34.tgz#36c9bca0721ab9f7e5d40927e7c0429cacbd5b56" + integrity sha512-M+CW4oXle5fdoz2T2SwdOef8pl3/1XmUx1vjn2mXUVM/128aO0l23FMF0SNBsAbRV6P+p/TuzjodchJbi0Ht/A== dependencies: - "@langchain/core" "~0.1.45" - js-tiktoken "^1.0.7" - openai "^4.26.0" + "@langchain/core" ">0.1.56 <0.3.0" + js-tiktoken "^1.0.12" + openai "^4.41.1" zod "^3.22.4" zod-to-json-schema "^3.22.3" +"@langchain/textsplitters@~0.0.0": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@langchain/textsplitters/-/textsplitters-0.0.2.tgz#500baa8341fb7fc86fca531a4192665a319504a3" + integrity sha512-6bQOuYHTGYlkgPY/8M5WPq4nnXZpEysGzRopQCYjg2WLcEoIPUMMrXsAaNNdvU3BOeMrhin8izvpDPD165hX6Q== + dependencies: + "@langchain/core" ">0.1.0 <0.3.0" + js-tiktoken "^1.0.12" + "@langtrase/trace-attributes@^3.0.8": version "3.0.8" resolved "https://registry.yarnpkg.com/@langtrase/trace-attributes/-/trace-attributes-3.0.8.tgz#ff6ae44cfc048a9da10a7949664b2060a71b6304" @@ -8242,70 +8251,70 @@ "@types/node" ">=18.0.0" axios "^1.6.0" -"@smithy/eventstream-codec@^2.0.12", "@smithy/eventstream-codec@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz#4405ab0f9c77d439c575560c4886e59ee17d6d38" - integrity sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw== +"@smithy/eventstream-codec@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz#81d30391220f73d41f432f65384b606d67673e46" + integrity sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ== dependencies: "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.9.1" - "@smithy/util-hex-encoding" "^2.1.1" - tslib "^2.5.0" + "@smithy/types" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" -"@smithy/eventstream-serde-node@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz#2e1afa27f9c7eb524c1c53621049c5e4e3cea6a5" - integrity sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw== +"@smithy/eventstream-serde-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz#6519523fbb429307be29b151b8ba35bcca2b6e64" + integrity sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ== dependencies: - "@smithy/eventstream-serde-universal" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" + "@smithy/eventstream-serde-universal" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz#0f5eec9ad033017973a67bafb5549782499488d2" - integrity sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ== +"@smithy/eventstream-serde-universal@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz#cb8441a73fbde4cbaa68e4a21236f658d914a073" + integrity sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw== dependencies: - "@smithy/eventstream-codec" "^2.1.1" - "@smithy/types" "^2.9.1" - tslib "^2.5.0" + "@smithy/eventstream-codec" "^3.0.0" + "@smithy/types" "^3.0.0" + tslib "^2.6.2" -"@smithy/is-array-buffer@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz#8fa9b8040651e7ba0b2f6106e636a91354ff7d34" - integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug== +"@smithy/is-array-buffer@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" + integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" -"@smithy/types@^2.4.0", "@smithy/types@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.9.1.tgz#ed04d4144eed3b8bd26d20fc85aae8d6e357ebb9" - integrity sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw== +"@smithy/types@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.0.0.tgz#00231052945159c64ffd8b91e8909d8d3006cb7e" + integrity sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" -"@smithy/util-buffer-from@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz#7eb75d72288b6b3001bc5f75b48b711513091deb" - integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw== +"@smithy/util-buffer-from@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" + integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== dependencies: - "@smithy/is-array-buffer" "^2.0.0" - tslib "^2.5.0" + "@smithy/is-array-buffer" "^3.0.0" + tslib "^2.6.2" -"@smithy/util-hex-encoding@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" - integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== +"@smithy/util-hex-encoding@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" + integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" -"@smithy/util-utf8@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.0.0.tgz#b4da87566ea7757435e153799df9da717262ad42" - integrity sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ== +"@smithy/util-utf8@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" + integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== dependencies: - "@smithy/util-buffer-from" "^2.0.0" - tslib "^2.5.0" + "@smithy/util-buffer-from" "^3.0.0" + tslib "^2.6.2" "@statoscope/extensions@5.28.1": version "5.28.1" @@ -10612,6 +10621,11 @@ resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-2.0.5.tgz#388e5c4ff4b0e1787f130753cbbe83d3ba770858" integrity sha512-kH8I7OSSwQu9DS9JYdFWbuvhVzvFRoCPCkGxNwoGgaPeDfEPJlcxNvEOypZhQ3XXHsGbfIuYcxcJxKUfJHnRfw== +"@types/nunjucks@^3.2.6": + version "3.2.6" + resolved "https://registry.yarnpkg.com/@types/nunjucks/-/nunjucks-3.2.6.tgz#6d6e0363719545df8b9a024279902edf68b2caa9" + integrity sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w== + "@types/object-hash@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@types/object-hash/-/object-hash-1.3.0.tgz#b20db2074129f71829d61ff404e618c4ac3d73cf" @@ -11705,6 +11719,11 @@ resolved "https://registry.yarnpkg.com/@zip.js/zip.js/-/zip.js-2.7.45.tgz#823fe2789401d8c1d836ce866578379ec1bd6f0b" integrity sha512-Mm2EXF33DJQ/3GWWEWeP1UCqzpQ5+fiMvT3QWspsXY05DyqqxWu7a9awSzU4/spHMHVFrTjani1PR0vprgZpow== +a-sync-waterfall@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" + integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA== + abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" @@ -12365,7 +12384,7 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@^2.0.0: +asap@^2.0.0, asap@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -12479,7 +12498,7 @@ async@^1.4.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^3.2.0, async@^3.2.3: +async@^3.2.0, async@^3.2.3, async@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== @@ -12877,11 +12896,6 @@ bare-path@^2.0.0, bare-path@^2.1.0: dependencies: bare-os "^2.1.0" -base-64@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" - integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== - base64-js@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" @@ -14098,16 +14112,16 @@ clone-stats@^1.0.0: resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= +clone@2.x, clone@^2.1.1, clone@^2.1.2, clone@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + clone@^1.0.2, clone@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.1.1, clone@^2.1.2, clone@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - cloneable-readable@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" @@ -14285,7 +14299,7 @@ commander@^4.0.1, commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^5.0.0: +commander@^5.0.0, commander@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== @@ -14301,9 +14315,9 @@ common-path-prefix@^3.0.0: integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== common-tags@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== commondir@^1.0.1: version "1.0.1" @@ -15901,14 +15915,6 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -digest-fetch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661" - integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA== - dependencies: - base-64 "^0.1.0" - md5 "^2.3.0" - dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -16226,10 +16232,10 @@ elastic-apm-node@3.46.0: traverse "^0.6.6" unicode-byte-truncate "^1.0.0" -elastic-apm-node@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.6.0.tgz#9de3b758158c85dee5932857eb93e21cf204c45a" - integrity sha512-mieujz8IA30wkavF8JG/mSBep2DG2zGMblQAh1uEkeXIjb8njrW3Ef+cqKPEdaFPN/Iqm2LZzZuy+Fu20MsfkA== +elastic-apm-node@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.7.0.tgz#27d7d78f659dbed6e03a5c4d50b5bab62b775bc2" + integrity sha512-fOcDYOcZ/180Ib0p8xLNF8iDu9e1QGqZiEizOntdh1GmkurN3sIGVgGlE25s9LRBUMmD2bMWwlER56T8moW+tg== dependencies: "@elastic/ecs-pino-format" "^1.5.0" "@opentelemetry/api" "^1.4.1" @@ -21236,10 +21242,10 @@ js-string-escape@^1.0.1: resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= -js-tiktoken@^1.0.7, js-tiktoken@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc" - integrity sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA== +js-tiktoken@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211" + integrity sha512-L7wURW1fH9Qaext0VzaUDpFGVQgjkdE3Dgsy9/+yXyGEpBKnylTd0mU0bfbNkKDlXRb6TEsZkwuflu1B8uQbJQ== dependencies: base64-js "^1.5.1" @@ -21643,17 +21649,16 @@ kuler@^2.0.0: resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -langchain@^0.1.30: - version "0.1.30" - resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.1.30.tgz#e1adb3f1849fcd5c596c668300afd5dc8cb37a97" - integrity sha512-5h/vNMmutQ98tbB0sPDlAileZVca6A2McFgGa3+D56Dm8mSSCzTQL2DngPA6h09DlKDpSr7+6PdFw5Hoj0ZDSw== +langchain@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.2.3.tgz#c14bb05cf871b21bd63b84b3ab89580b1d62539f" + integrity sha512-T9xR7zd+Nj0oXy6WoYKmZLy0DlQiDLFPGYWdOXDxy+AvqlujoPdVQgDSpdqiOHvAjezrByAoKxoHCz5XMwTP/Q== dependencies: - "@anthropic-ai/sdk" "^0.9.1" - "@langchain/community" "~0.0.41" - "@langchain/core" "~0.1.44" - "@langchain/openai" "~0.0.19" + "@langchain/core" "~0.2.0" + "@langchain/openai" "~0.0.28" + "@langchain/textsplitters" "~0.0.0" binary-extensions "^2.2.0" - js-tiktoken "^1.0.7" + js-tiktoken "^1.0.12" js-yaml "^4.1.0" jsonpointer "^5.0.1" langchainhub "~0.0.8" @@ -21671,10 +21676,10 @@ langchainhub@~0.0.8: resolved "https://registry.yarnpkg.com/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110" integrity sha512-Woyb8YDHgqqTOZvWIbm2CaFDGfZ4NTSyXV687AG4vXEfoNo7cGQp7nhl7wL3ehenKWmNEmcxCLgOZzW8jE6lOQ== -langsmith@^0.1.14, langsmith@~0.1.1, langsmith@~0.1.7: - version "0.1.14" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d" - integrity sha512-iEzQLLB7/0nRpAwNBAR7B7N64fyByg5UsNjSvLaCCkQ9AS68PSafjB8xQkyI8QXXrGjU1dEqDRoa8m4SUuRdUw== +langsmith@^0.1.30, langsmith@~0.1.1, langsmith@~0.1.7: + version "0.1.30" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.30.tgz#3000e441605b26e15a87fb991a3929c944edbc0a" + integrity sha512-g8f10H1iiRjCweXJjgM3Y9xl6ApCa1OThDvc0BlSDLVrGVPy1on9wT39vAzYkeadC7oG48p7gfpGlYH3kLkJ9Q== dependencies: "@types/uuid" "^9.0.1" commander "^10.0.1" @@ -21701,6 +21706,11 @@ latest-version@^7.0.0: dependencies: package-json "^8.1.0" +launchdarkly-eventsource@1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/launchdarkly-eventsource/-/launchdarkly-eventsource-1.4.4.tgz#fa595af8602e487c61520787170376c6a1104459" + integrity sha512-GL+r2Y3WccJlhFyL2buNKel+9VaMnYpbE/FfCkOST5jSNSFodahlxtGyrE8o7R+Qhobyq0Ree4a7iafJDQi9VQ== + launchdarkly-eventsource@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/launchdarkly-eventsource/-/launchdarkly-eventsource-2.0.3.tgz#8a7b8da5538153f438f7d452b1c87643d900f984" @@ -21723,6 +21733,19 @@ launchdarkly-js-sdk-common@5.2.0: fast-deep-equal "^2.0.1" uuid "^8.0.0" +launchdarkly-node-server-sdk@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/launchdarkly-node-server-sdk/-/launchdarkly-node-server-sdk-7.0.3.tgz#d7a8b996d992b0ca5d4972db5df1ae49332b094c" + integrity sha512-uSkBezAiQ9nwv8N6CmI7OmyJ9e3xpueJzYOso8+5vMf7VtBtPjz6RRsUkUsSzUDo7siclmW8USjCwqn9aX2EbQ== + dependencies: + async "^3.2.4" + launchdarkly-eventsource "1.4.4" + lru-cache "^6.0.0" + node-cache "^5.1.0" + semver "^7.5.4" + tunnel "0.0.6" + uuid "^8.3.2" + lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -22143,9 +22166,9 @@ loglevel-plugin-prefix@^0.8.4: integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== loglevel@^1.6.0: - version "1.6.8" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" - integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + version "1.9.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7" + integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg== lolex@^4.2.0: version "4.2.0" @@ -22932,9 +22955,9 @@ minimatch@^5.0.1, minimatch@^5.1.0: brace-expansion "^2.0.1" minimatch@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" - integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" @@ -23438,6 +23461,11 @@ mustache@^2.3.2: resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" integrity sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ== +mustache@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + mutation-observer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/mutation-observer/-/mutation-observer-1.0.3.tgz#42e9222b101bca82e5ba9d5a7acf4a14c0f263d0" @@ -23628,6 +23656,13 @@ node-addon-api@^6.1.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== +node-cache@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" + integrity sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg== + dependencies: + clone "2.x" + node-dir@^0.1.10: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -23933,6 +23968,15 @@ numeral@^2.0.6: resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" integrity sha1-StCAk21EPCVhrtnyGX7//iX05QY= +nunjucks@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.4.tgz#f0878eef528ce7b0aa35d67cc6898635fd74649e" + integrity sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ== + dependencies: + a-sync-waterfall "^1.0.0" + asap "^2.0.3" + commander "^5.1.0" + nwsapi@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" @@ -24227,16 +24271,15 @@ open@^8.0.9, open@^8.4.0, open@~8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -openai@^4.24.1, openai@^4.26.0: - version "4.26.1" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.26.1.tgz#7b7c0225c09922445f68f3c4cdbd5775ed31108c" - integrity sha512-DvWbjhWbappsFRatOWmu4Dp1/Q4RG9oOz6CfOSjy0/Drb8G+5iAiqWAO4PfpGIkhOOKtvvNfQri2SItl+U7LhQ== +openai@^4.24.1, openai@^4.41.1: + version "4.47.1" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.47.1.tgz#1d23c7a8eb3d7bcdc69709cd905f4c9af0181dba" + integrity sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" abort-controller "^3.0.0" agentkeepalive "^4.2.1" - digest-fetch "^1.3.0" form-data-encoder "1.7.2" formdata-node "^4.3.2" node-fetch "^2.6.7" @@ -28007,7 +28050,7 @@ semver@7.5.4: dependencies: lru-cache "^6.0.0" -semver@7.6.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: +semver@7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== @@ -28019,6 +28062,11 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -30273,7 +30321,7 @@ tslib@2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@2.6.2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2: +tslib@2.6.2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -30307,7 +30355,7 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel@^0.0.6: +tunnel@0.0.6, tunnel@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==