diff --git a/.buildkite/ftr_oblt_stateful_configs.yml b/.buildkite/ftr_oblt_stateful_configs.yml index c2dd4a025b2ff..5972264018aa3 100644 --- a/.buildkite/ftr_oblt_stateful_configs.yml +++ b/.buildkite/ftr_oblt_stateful_configs.yml @@ -1,10 +1,9 @@ disabled: # Cypress configs, for now these are still run manually + - x-pack/test/apm_cypress/cli_config.ts - x-pack/solutions/observability/plugins/observability_onboarding/e2e/ftr_config_open.ts - x-pack/solutions/observability/plugins/observability_onboarding/e2e/ftr_config_runner.ts - x-pack/solutions/observability/plugins/observability_onboarding/e2e/ftr_config.ts - - x-pack/solutions/observability/plugins/apm/ftr_e2e/ftr_config_run.ts - - x-pack/solutions/observability/plugins/apm/ftr_e2e/ftr_config.ts - x-pack/solutions/observability/plugins/inventory/e2e/ftr_config_run.ts - x-pack/solutions/observability/plugins/inventory/e2e/ftr_config.ts - x-pack/solutions/observability/plugins/profiling/e2e/ftr_config_open.ts diff --git a/.buildkite/ftr_security_serverless_configs.yml b/.buildkite/ftr_security_serverless_configs.yml index 34280160fb7aa..eca2fc6bdf0a6 100644 --- a/.buildkite/ftr_security_serverless_configs.yml +++ b/.buildkite/ftr_security_serverless_configs.yml @@ -121,6 +121,7 @@ enabled: - x-pack/test/security_solution_api_integration/test_suites/edr_workflows/resolver/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/edr_workflows/response_actions/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/edr_workflows/spaces/trial_license_complete_tier/configs/serverless.config.ts + - x-pack/test/security_solution_api_integration/test_suites/siem_migrations/rules/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_endpoint/configs/serverless.endpoint.config.ts - x-pack/test/security_solution_endpoint/configs/serverless.integrations.config.ts # serverless config files that run deployment-agnostic tests diff --git a/.buildkite/ftr_security_stateful_configs.yml b/.buildkite/ftr_security_stateful_configs.yml index a67bd2b299be8..d9953cfe1e727 100644 --- a/.buildkite/ftr_security_stateful_configs.yml +++ b/.buildkite/ftr_security_stateful_configs.yml @@ -95,6 +95,7 @@ enabled: - x-pack/test/security_solution_api_integration/test_suites/edr_workflows/resolver/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/edr_workflows/response_actions/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/edr_workflows/spaces/trial_license_complete_tier/configs/ess.config.ts + - x-pack/test/security_solution_api_integration/test_suites/siem_migrations/rules/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_endpoint/configs/endpoint.config.ts - x-pack/test/security_solution_endpoint/configs/integrations.config.ts - x-pack/test/api_integration/apis/cloud_security_posture/config.ts @@ -104,3 +105,4 @@ enabled: - x-pack/test/cloud_security_posture_functional/data_views/config.ts - x-pack/test/automatic_import_api_integration/apis/config_basic.ts - x-pack/test/automatic_import_api_integration/apis/config_graphs.ts + - x-pack/test/security_solution_api_integration/test_suites/asset_inventory/entity_store/trial_license_complete_tier/configs/ess.config.ts diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json index 077986e3d636b..e9017b545e468 100644 --- a/.buildkite/package-lock.json +++ b/.buildkite/package-lock.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@types/chai": "^4.3.3", - "@types/js-yaml": "^4.0.5", + "@types/js-yaml": "^4.0.9", "@types/minimatch": "^3.0.5", "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", @@ -354,9 +354,9 @@ "dev": true }, "node_modules/@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true }, "node_modules/@types/minimatch": { @@ -2215,9 +2215,9 @@ "dev": true }, "@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true }, "@types/minimatch": { diff --git a/.buildkite/package.json b/.buildkite/package.json index 9edd3b330b0ed..3c7fe28d0c064 100644 --- a/.buildkite/package.json +++ b/.buildkite/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@types/chai": "^4.3.3", - "@types/js-yaml": "^4.0.5", + "@types/js-yaml": "^4.0.9", "@types/minimatch": "^3.0.5", "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index 70edf113aba62..c52f3ac6687a9 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -479,6 +479,22 @@ steps: - exit_status: '-1' limit: 1 + - command: .buildkite/scripts/steps/functional/apm_cypress.sh + label: 'APM Cypress Tests' + agents: + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + provider: gcp + machineType: n2-standard-4 + preemptible: true + depends_on: build + timeout_in_minutes: 120 + parallelism: 3 + retry: + automatic: + - exit_status: '-1' + limit: 1 + - command: '.buildkite/scripts/steps/functional/on_merge_unsupported_ftrs.sh' label: Trigger unsupported ftr tests timeout_in_minutes: 10 diff --git a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml index 1fe71d7711a78..78b3d6b44200c 100644 --- a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml +++ b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml @@ -28,25 +28,6 @@ steps: - exit_status: '-1' limit: 3 - - command: .buildkite/scripts/steps/functional/apm_cypress.sh - label: 'APM Cypress Tests' - agents: - image: family/kibana-ubuntu-2004 - imageProject: elastic-images-prod - provider: gcp - machineType: n2-standard-4 - preemptible: true - depends_on: build - env: - PING_SLACK_TEAM: "@obs-ux-infra_services-team" - timeout_in_minutes: 120 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 - - command: .buildkite/scripts/steps/functional/profiling_cypress.sh label: 'Profiling Cypress Tests' agents: diff --git a/.buildkite/pipelines/pull_request/apm_cypress.yml b/.buildkite/pipelines/pull_request/apm_cypress.yml index 97935cc3489d1..ec45ccf0f2ceb 100644 --- a/.buildkite/pipelines/pull_request/apm_cypress.yml +++ b/.buildkite/pipelines/pull_request/apm_cypress.yml @@ -13,7 +13,7 @@ steps: - check_types - check_oas_snapshot timeout_in_minutes: 120 - parallelism: 1 # TODO: Set parallelism when apm_cypress handles it + parallelism: 3 retry: automatic: - exit_status: '-1' diff --git a/.buildkite/scripts/lifecycle/post_command.sh b/.buildkite/scripts/lifecycle/post_command.sh index 4d8217a4a284a..164004431c840 100755 --- a/.buildkite/scripts/lifecycle/post_command.sh +++ b/.buildkite/scripts/lifecycle/post_command.sh @@ -10,6 +10,7 @@ IS_TEST_EXECUTION_STEP="$(buildkite-agent meta-data get "${BUILDKITE_JOB_ID}_is_ if [[ "$IS_TEST_EXECUTION_STEP" == "true" ]]; then echo "--- Upload Artifacts" + buildkite-agent artifact upload '.scout/reports/scout-playwright-test-failures-*/**/*' buildkite-agent artifact upload 'target/junit/**/*' buildkite-agent artifact upload 'target/kibana-coverage/jest/**/*' buildkite-agent artifact upload 'target/kibana-coverage/functional/**/*' diff --git a/.buildkite/scripts/steps/checks/dependencies_missing_owner.sh b/.buildkite/scripts/steps/checks/dependencies_missing_owner.sh new file mode 100755 index 0000000000000..abb6780900208 --- /dev/null +++ b/.buildkite/scripts/steps/checks/dependencies_missing_owner.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/common/util.sh + +echo --- Check for NPM dependencies missing owners +node scripts/dependency_ownership.js --missingOwner --failIfUnowned diff --git a/.buildkite/scripts/steps/checks/quick_checks.txt b/.buildkite/scripts/steps/checks/quick_checks.txt index d6b6698b78f46..f3e6009c8a9c7 100644 --- a/.buildkite/scripts/steps/checks/quick_checks.txt +++ b/.buildkite/scripts/steps/checks/quick_checks.txt @@ -19,3 +19,4 @@ .buildkite/scripts/steps/checks/native_modules.sh .buildkite/scripts/steps/checks/test_files_missing_owner.sh .buildkite/scripts/steps/checks/styled_components_mapping.sh +.buildkite/scripts/steps/checks/dependencies_missing_owner.sh diff --git a/.buildkite/scripts/steps/functional/apm_cypress.sh b/.buildkite/scripts/steps/functional/apm_cypress.sh index 1b388eede871d..900cdd7e0e056 100755 --- a/.buildkite/scripts/steps/functional/apm_cypress.sh +++ b/.buildkite/scripts/steps/functional/apm_cypress.sh @@ -2,35 +2,15 @@ set -euo pipefail -source .buildkite/scripts/common/util.sh +source .buildkite/scripts/steps/functional/common.sh -APM_CYPRESS_RECORD_KEY="$(vault_get apm-cypress-dashboard-record-key CYPRESS_RECORD_KEY)" - -.buildkite/scripts/bootstrap.sh -.buildkite/scripts/download_build_artifacts.sh -.buildkite/scripts/copy_es_snapshot_cache.sh +export KIBANA_INSTALL_DIR=${KIBANA_BUILD_LOCATION} export JOB=kibana-apm-cypress -IS_FLAKY_TEST_RUNNER=${CLI_COUNT:-0} -GH_APM_TEAM_LABEL="Team:APM" - -if (! is_pr); then - echo "--- Add GH labels to buildkite metadata" - ts-node .buildkite/scripts/steps/add_gh_labels_to_bk_metadata.ts BUILDKITE_MESSAGE true - GH_ON_MERGE_LABELS="$(buildkite-agent meta-data get gh_labels --default '')" -fi - -# Enabling cypress dashboard recording when PR is labeled with `apm:cypress-record` and we are not using the flaky test runner OR on merge with Team:APM label applied -if ([[ "$IS_FLAKY_TEST_RUNNER" -ne 1 ]] && is_pr_with_label "apm:cypress-record") || ([[ $GH_ON_MERGE_LABELS == *"$GH_APM_TEAM_LABEL"* ]]); then - CYPRESS_ARGS="--record --key "$APM_CYPRESS_RECORD_KEY" --parallel --ci-build-id "${BUILDKITE_BUILD_ID}"" -else - CYPRESS_ARGS="" -fi echo "--- APM Cypress Tests" -cd "$XPACK_DIR" +cd "$XPACK_DIR/solutions/observability/plugins/apm/ftr_e2e" -node solutions/observability/plugins/apm/scripts/test/e2e.js \ - --kibana-install-dir "$KIBANA_BUILD_LOCATION" \ - $CYPRESS_ARGS +set +e +yarn cypress:run; status=$?; yarn junit:merge || :; exit $status diff --git a/.buildkite/scripts/steps/renovate.sh b/.buildkite/scripts/steps/renovate.sh index cc4583e3da216..0ddfe95d1b8d6 100755 --- a/.buildkite/scripts/steps/renovate.sh +++ b/.buildkite/scripts/steps/renovate.sh @@ -4,3 +4,4 @@ set -euo pipefail echo '--- Renovate: validation' .buildkite/scripts/steps/checks/renovate.sh +.buildkite/scripts/steps/checks/dependencies_missing_owner.sh diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 85226c3002ae4..d0c384015b88c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -143,7 +143,6 @@ packages/kbn-gen-ai-functional-testing @elastic/appex-ai-infra packages/kbn-generate @elastic/kibana-operations packages/kbn-generate-console-definitions @elastic/kibana-management packages/kbn-get-repo-files @elastic/kibana-operations -packages/kbn-grid-layout @elastic/kibana-presentation packages/kbn-import-locator @elastic/kibana-operations packages/kbn-import-resolver @elastic/kibana-operations packages/kbn-jest-serializers @elastic/kibana-operations @@ -358,6 +357,7 @@ src/platform/packages/private/kbn-apm-config-loader @elastic/kibana-core @vignes src/platform/packages/private/kbn-config-mocks @elastic/kibana-core src/platform/packages/private/kbn-esql-editor @elastic/kibana-esql src/platform/packages/private/kbn-generate-csv @elastic/appex-sharedux +src/platform/packages/private/kbn-grid-layout @elastic/kibana-presentation src/platform/packages/private/kbn-handlebars @elastic/kibana-security src/platform/packages/private/kbn-hapi-mocks @elastic/kibana-core src/platform/packages/private/kbn-health-gateway-server @elastic/kibana-core @@ -1390,6 +1390,7 @@ packages/kbn-monaco/src/esql @elastic/kibana-esql /test/api_integration/apis/ui_metric/*.ts @elastic/obs-ux-infra_services-team /x-pack/test/functional/apps/apm/ @elastic/obs-ux-infra_services-team /x-pack/test/apm_api_integration/ @elastic/obs-ux-infra_services-team +/x-pack/test/apm_cypress/ @elastic/obs-ux-infra_services-team /src/apm.js @elastic/kibana-core @vigneshshanmugam /src/platform/packages/shared/kbn-utility-types/src/dot.ts @dgieselaar /src/platform/packages/shared/kbn-utility-types/src/dot_test.ts @dgieselaar @@ -2186,6 +2187,7 @@ x-pack/test/security_solution_api_integration/test_suites/detections_response/te x-pack/test/security_solution_api_integration/test_suites/detections_response/user_roles @elastic/security-detections-response x-pack/test/security_solution_api_integration/test_suites/explore @elastic/security-threat-hunting-explore x-pack/test/security_solution_api_integration/test_suites/investigations @elastic/security-threat-hunting-investigations +x-pack/test/security_solution_api_integration/test_suites/siem_migrations @elastic/security-threat-hunting x-pack/test/security_solution_api_integration/test_suites/sources @elastic/security-detections-response /x-pack/test/common/utils/security_solution/detections_response @elastic/security-detections-response /x-pack/test/functional/es_archives/signals @elastic/security-detections-response @@ -2512,6 +2514,9 @@ x-pack/solutions/security/plugins/security_solution/public/common/components/ses x-pack/solutions/security/plugins/security_solution/public/cloud_defend @elastic/kibana-cloud-security-posture x-pack/solutions/security/plugins/security_solution/public/cloud_security_posture @elastic/kibana-cloud-security-posture x-pack/solutions/security/plugins/security_solution/public/kubernetes @elastic/kibana-cloud-security-posture +x-pack/test/security_solution_api_integration/test_suites/asset_inventory @elastic/kibana-cloud-security-posture +x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory @elastic/kibana-cloud-security-posture + ## Fleet plugin (co-owned with Fleet team) x-pack/platform/plugins/shared/fleet/public/components/cloud_security_posture @elastic/fleet @elastic/kibana-cloud-security-posture x-pack/platform/plugins/shared/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/.gitignore b/.gitignore index e59ae47c01cde..a980a79f9fc49 100644 --- a/.gitignore +++ b/.gitignore @@ -137,6 +137,7 @@ src/platform/packages/**/package-map.json /packages/kbn-synthetic-package-map/ **/.synthetics/ **/.journeys/ +**/.rca/ x-pack/test/security_api_integration/plugins/audit_log/audit.log # ignore FTR temp directory diff --git a/.i18nrc.json b/.i18nrc.json index 3701544a1f0a3..14fa4c6f31cdc 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -35,7 +35,7 @@ "presentationPanel": "src/platform/plugins/private/presentation_panel", "embeddableExamples": "examples/embeddable_examples", "esQuery": "src/platform/packages/shared/kbn-es-query/src", - "kbnGridLayout": "packages/kbn-grid-layout", + "kbnGridLayout": "src/platform/packages/private/kbn-grid-layout", "esUi": "src/platform/plugins/shared/es_ui_shared", "expandableFlyout": "packages/kbn-expandable-flyout", "expressionError": "src/platform/plugins/shared/expression_error", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 32367f578161a..6d2f227565d36 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index bf9d6c1455ba7..ee7095a2218da 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: 2025-01-15 +date: 2025-01-20 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 364c31f22a150..efc4f16272f94 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 2e670ce1f9dc8..55063aaec9de4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 4d5ab6f2ac12f..96b660ca5b9d1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index e1d58b99de56e..a8571862ccaf4 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: 2025-01-15 +date: 2025-01-20 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 ff8f06986be97..3b4aaeccc0e64 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 57c3787573e8c..4d37857b2153e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 833418a250bca..5312dbc3f0cb6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index ebde3b2df2eeb..f0b4fae171bbb 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -3518,7 +3518,7 @@ "CustomFieldTypes", ".TOGGLE; value: boolean | null; } | { key: string; type: ", "CustomFieldTypes", - ".NUMBER; value: number | null; })[]; }; } | { type: \"comment\"; payload: { comment: { type: ", + ".NUMBER; value: number | null; })[]; }; } | { type: \"comment\"; payload: { comment: { comment: string; type: ", { "pluginId": "cases", "scope": "common", @@ -3526,7 +3526,23 @@ "section": "def-common.AttachmentType", "text": "AttachmentType" }, - ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", + ".user; owner: string; } | { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } | { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.AttachmentType", + "text": "AttachmentType" + }, + ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", { "pluginId": "cases", "scope": "common", @@ -3590,23 +3606,7 @@ "section": "def-common.JsonValue", "text": "JsonValue" }, - "; }; } | { comment: string; type: ", - { - "pluginId": "cases", - "scope": "common", - "docId": "kibCasesPluginApi", - "section": "def-common.AttachmentType", - "text": "AttachmentType" - }, - ".user; owner: string; } | { type: ", - { - "pluginId": "cases", - "scope": "common", - "docId": "kibCasesPluginApi", - "section": "def-common.AttachmentType", - "text": "AttachmentType" - }, - ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; }; }; } | ({ type: \"create_case\"; } & { payload: { connector: { id: string; } & (({ type: ", + "; }; }; }; } | ({ type: \"create_case\"; } & { payload: { connector: { id: string; } & (({ type: ", { "pluginId": "cases", "scope": "common", diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 34eb3cc931654..b335ce22e71e6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index c5219e80a916f..7afbc64aab34c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 0ec5a3a8fd5f2..10e62e40fd5fc 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: 2025-01-15 +date: 2025-01-20 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 d6bee0b20da14..ac8e45303ae7d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index d48ba42b7aea9..e57f0d7ffc894 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 492a005561801..4bf8a963a9e9e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index e4bbabfc836ca..c7a02cf71d9f7 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 7c54198e8edf1..e06a7ca6af709 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index f687652de9abd..628f76f45faa8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index b0e64997d6f9e..8667a012c47f3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index 1f4849c5b6812..9bc423c5b980f 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -36,54 +36,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "dashboard", - "id": "def-public.createDashboardEditUrl", - "type": "Function", - "tags": [], - "label": "createDashboardEditUrl", - "description": [], - "signature": [ - "(id: string | undefined, editMode: boolean | undefined) => string" - ], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_constants.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "dashboard", - "id": "def-public.createDashboardEditUrl.$1", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_constants.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - }, - { - "parentPluginId": "dashboard", - "id": "def-public.createDashboardEditUrl.$2", - "type": "CompoundType", - "tags": [], - "label": "editMode", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_constants.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "dashboard", "id": "def-public.DashboardListingTable", @@ -708,7 +660,7 @@ "tags": [], "label": "PanelPlacementStrategy", "description": [], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_constants.ts", + "path": "src/platform/plugins/shared/dashboard/public/plugin_constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -717,30 +669,30 @@ "misc": [ { "parentPluginId": "dashboard", - "id": "def-public.DASHBOARD_APP_ID", + "id": "def-public.DASHBOARD_API_TYPE", "type": "string", "tags": [], - "label": "DASHBOARD_APP_ID", + "label": "DASHBOARD_API_TYPE", "description": [], "signature": [ - "\"dashboards\"" + "\"dashboard\"" ], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_constants.ts", + "path": "src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "dashboard", - "id": "def-public.DASHBOARD_CONTAINER_TYPE", + "id": "def-public.DASHBOARD_APP_ID", "type": "string", "tags": [], - "label": "DASHBOARD_CONTAINER_TYPE", + "label": "DASHBOARD_APP_ID", "description": [], "signature": [ - "\"dashboard\"" + "\"dashboards\"" ], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_container/index.ts", + "path": "src/platform/plugins/shared/dashboard/public/plugin_constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -755,7 +707,7 @@ "signature": [ "48" ], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_constants.ts", + "path": "src/platform/plugins/shared/dashboard/common/content_management/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1249,7 +1201,7 @@ "signature": [ "\"dashboard\"" ], - "path": "src/platform/plugins/shared/dashboard/public/dashboard_constants.ts", + "path": "src/platform/plugins/shared/dashboard/public/plugin_constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1271,7 +1223,9 @@ "parentPluginId": "dashboard", "id": "def-public.DashboardSetup.locator", "type": "Object", - "tags": [], + "tags": [ + "deprecated" + ], "label": "locator", "description": [], "signature": [ @@ -1285,8 +1239,9 @@ " | undefined" ], "path": "src/platform/plugins/shared/dashboard/public/plugin.tsx", - "deprecated": false, - "trackAdoption": false + "deprecated": true, + "trackAdoption": false, + "references": [] } ], "lifecycle": "setup", @@ -1307,7 +1262,9 @@ "parentPluginId": "dashboard", "id": "def-public.DashboardStart.locator", "type": "Object", - "tags": [], + "tags": [ + "deprecated" + ], "label": "locator", "description": [], "signature": [ @@ -1321,8 +1278,54 @@ " | undefined" ], "path": "src/platform/plugins/shared/dashboard/public/plugin.tsx", - "deprecated": false, - "trackAdoption": false + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "ml", + "path": "x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts" + }, + { + "plugin": "ml", + "path": "x-pack/platform/plugins/shared/ml/public/application/services/dashboard_service.ts" + }, + { + "plugin": "ml", + "path": "x-pack/platform/plugins/shared/ml/public/application/components/custom_urls/custom_url_editor/utils.ts" + }, + { + "plugin": "monitoring", + "path": "x-pack/platform/plugins/private/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx" + }, + { + "plugin": "dashboardEnhanced", + "path": "x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/abstract_dashboard_drilldown.tsx" + }, + { + "plugin": "stackConnectors", + "path": "x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/gen_ai/use_get_dashboard.ts" + }, + { + "plugin": "stackConnectors", + "path": "x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/gen_ai/use_get_dashboard.ts" + }, + { + "plugin": "ml", + "path": "x-pack/platform/plugins/shared/ml/public/application/services/dashboard_service.test.ts" + }, + { + "plugin": "ml", + "path": "x-pack/platform/plugins/shared/ml/public/application/services/dashboard_service.test.ts" + }, + { + "plugin": "apm", + "path": "x-pack/solutions/observability/plugins/apm/public/components/app/service_dashboards/actions/goto_dashboard.tsx" + }, + { + "plugin": "infra", + "path": "x-pack/solutions/observability/plugins/infra/public/components/asset_details/tabs/dashboards/actions/goto_dashboard_link.tsx" + } + ] }, { "parentPluginId": "dashboard", diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 797ab093ddbc5..49540a6dc8b36 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 113 | 0 | 109 | 12 | +| 110 | 0 | 106 | 12 | ## Client diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index a9b8180a77c94..f423d8964a481 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index b55014b5ff3a2..55054a57bbd10 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -7506,6 +7506,35 @@ "path": "src/platform/plugins/shared/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-public.GetFieldsOptions.abortSignal", + "type": "Object", + "tags": [], + "label": "abortSignal", + "description": [], + "signature": [ + "AbortSignal | undefined" + ], + "path": "src/platform/plugins/shared/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-public.GetFieldsOptions.runtimeMappings", + "type": "Object", + "tags": [], + "label": "runtimeMappings", + "description": [], + "signature": [ + "MappingRuntimeFields", + " | undefined" + ], + "path": "src/platform/plugins/shared/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -13792,7 +13821,7 @@ "tags": [], "label": "getFieldsForIndexPattern", "description": [ - "\nGet field list by providing an index patttern (or spec)." + "\nGet field list by providing an index pattern (or spec)." ], "signature": [ "(indexPattern: ", @@ -13819,7 +13848,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", @@ -13880,7 +13909,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined" + ", \"allowNoIndex\" | \"pattern\"> | undefined" ], "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", "deprecated": false, @@ -15101,7 +15130,9 @@ "signature": [ "(options: { pattern: string | string[]; metaFields?: string[] | undefined; fieldCapsOptions?: { allow_no_indices: boolean; includeUnmapped?: boolean | undefined; } | undefined; type?: string | undefined; rollupIndex?: string | undefined; indexFilter?: ", "QueryDslQueryContainer", - " | undefined; fields?: string[] | undefined; allowHidden?: boolean | undefined; fieldTypes?: string[] | undefined; includeEmptyFields?: boolean | undefined; }) => Promise<{ fields: ", + " | undefined; fields?: string[] | undefined; allowHidden?: boolean | undefined; fieldTypes?: string[] | undefined; includeEmptyFields?: boolean | undefined; abortSignal?: AbortSignal | undefined; runtimeMappings?: ", + "MappingRuntimeFields", + " | undefined; }) => Promise<{ fields: ", { "pluginId": "dataViews", "scope": "server", @@ -15266,6 +15297,35 @@ "path": "src/platform/plugins/shared/data_views/server/fetcher/index_patterns_fetcher.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-server.IndexPatternsFetcher.getFieldsForWildcard.$1.abortSignal", + "type": "Object", + "tags": [], + "label": "abortSignal", + "description": [], + "signature": [ + "AbortSignal | undefined" + ], + "path": "src/platform/plugins/shared/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-server.IndexPatternsFetcher.getFieldsForWildcard.$1.runtimeMappings", + "type": "Object", + "tags": [], + "label": "runtimeMappings", + "description": [], + "signature": [ + "MappingRuntimeFields", + " | undefined" + ], + "path": "src/platform/plugins/shared/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -21203,7 +21263,7 @@ "tags": [], "label": "getFieldsForIndexPattern", "description": [ - "\nGet field list by providing an index patttern (or spec)." + "\nGet field list by providing an index pattern (or spec)." ], "signature": [ "(indexPattern: ", @@ -21230,7 +21290,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", @@ -21291,7 +21351,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined" + ", \"allowNoIndex\" | \"pattern\"> | undefined" ], "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", "deprecated": false, @@ -23880,6 +23940,35 @@ "path": "src/platform/plugins/shared/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-common.GetFieldsOptions.abortSignal", + "type": "Object", + "tags": [], + "label": "abortSignal", + "description": [], + "signature": [ + "AbortSignal | undefined" + ], + "path": "src/platform/plugins/shared/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-common.GetFieldsOptions.runtimeMappings", + "type": "Object", + "tags": [], + "label": "runtimeMappings", + "description": [], + "signature": [ + "MappingRuntimeFields", + " | undefined" + ], + "path": "src/platform/plugins/shared/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -24919,7 +25008,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 5116be2ee841e..0c9e4234bb954 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: 2025-01-15 +date: 2025-01-20 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 | |-------------------|-----------|------------------------|-----------------| -| 3207 | 31 | 2592 | 25 | +| 3213 | 31 | 2598 | 25 | ## Client diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 4c1a9cad0d861..fdd044ce57fb3 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: 2025-01-15 +date: 2025-01-20 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 07cee52766595..2ce715264bd2e 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: 2025-01-15 +date: 2025-01-20 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 | |-------------------|-----------|------------------------|-----------------| -| 3207 | 31 | 2592 | 25 | +| 3213 | 31 | 2598 | 25 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 916412483b8f8..97f6e260f5374 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -29248,7 +29248,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 61ba685d7fd3f..a5c339daf6cff 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: 2025-01-15 +date: 2025-01-20 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 | |-------------------|-----------|------------------------|-----------------| -| 3207 | 31 | 2592 | 25 | +| 3213 | 31 | 2598 | 25 | ## Client diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 70ed838f44186..30c2f568ab617 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index ef844ef069ab2..5a5b37fca19fd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 86e82a3a58e1d..0bcb6594d2458 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 82e2f89eeabdb..a157297cd33d2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index a2c3ef14a9148..c23db31c7e468 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -3915,7 +3915,7 @@ "tags": [], "label": "getFieldsForIndexPattern", "description": [ - "\nGet field list by providing an index patttern (or spec)." + "\nGet field list by providing an index pattern (or spec)." ], "signature": [ "(indexPattern: ", @@ -3942,7 +3942,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", @@ -4003,7 +4003,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined" + ", \"allowNoIndex\" | \"pattern\"> | undefined" ], "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", "deprecated": false, @@ -9747,7 +9747,7 @@ "tags": [], "label": "getFieldsForIndexPattern", "description": [ - "\nGet field list by providing an index patttern (or spec)." + "\nGet field list by providing an index pattern (or spec)." ], "signature": [ "(indexPattern: ", @@ -9774,7 +9774,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", @@ -9835,7 +9835,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined" + ", \"allowNoIndex\" | \"pattern\"> | undefined" ], "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", "deprecated": false, @@ -11056,7 +11056,9 @@ "signature": [ "(options: { pattern: string | string[]; metaFields?: string[] | undefined; fieldCapsOptions?: { allow_no_indices: boolean; includeUnmapped?: boolean | undefined; } | undefined; type?: string | undefined; rollupIndex?: string | undefined; indexFilter?: ", "QueryDslQueryContainer", - " | undefined; fields?: string[] | undefined; allowHidden?: boolean | undefined; fieldTypes?: string[] | undefined; includeEmptyFields?: boolean | undefined; }) => Promise<{ fields: ", + " | undefined; fields?: string[] | undefined; allowHidden?: boolean | undefined; fieldTypes?: string[] | undefined; includeEmptyFields?: boolean | undefined; abortSignal?: AbortSignal | undefined; runtimeMappings?: ", + "MappingRuntimeFields", + " | undefined; }) => Promise<{ fields: ", { "pluginId": "dataViews", "scope": "server", @@ -11221,6 +11223,35 @@ "path": "src/platform/plugins/shared/data_views/server/fetcher/index_patterns_fetcher.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-server.IndexPatternsFetcher.getFieldsForWildcard.$1.abortSignal", + "type": "Object", + "tags": [], + "label": "abortSignal", + "description": [], + "signature": [ + "AbortSignal | undefined" + ], + "path": "src/platform/plugins/shared/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-server.IndexPatternsFetcher.getFieldsForWildcard.$1.runtimeMappings", + "type": "Object", + "tags": [], + "label": "runtimeMappings", + "description": [], + "signature": [ + "MappingRuntimeFields", + " | undefined" + ], + "path": "src/platform/plugins/shared/data_views/server/fetcher/index_patterns_fetcher.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -13818,10 +13849,6 @@ "plugin": "ml", "path": "x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts" }, - { - "plugin": "ml", - "path": "x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts" - }, { "plugin": "ml", "path": "x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx" @@ -19747,7 +19774,7 @@ "tags": [], "label": "getFieldsForIndexPattern", "description": [ - "\nGet field list by providing an index patttern (or spec)." + "\nGet field list by providing an index pattern (or spec)." ], "signature": [ "(indexPattern: ", @@ -19774,7 +19801,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", @@ -19835,7 +19862,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined" + ", \"allowNoIndex\" | \"pattern\"> | undefined" ], "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", "deprecated": false, @@ -23042,7 +23069,7 @@ "section": "def-common.DataViewSpec", "text": "DataViewSpec" }, - ", options?: ", + ", options?: Omit<", { "pluginId": "dataViews", "scope": "common", @@ -23050,7 +23077,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - " | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", @@ -23103,6 +23130,7 @@ "- Options for getting fields" ], "signature": [ + "Omit<", { "pluginId": "dataViews", "scope": "common", @@ -23110,7 +23138,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - " | undefined" + ", \"allowNoIndex\" | \"pattern\"> | undefined" ], "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", "deprecated": false, @@ -24293,6 +24321,35 @@ "path": "src/platform/plugins/shared/data_views/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-common.GetFieldsOptions.abortSignal", + "type": "Object", + "tags": [], + "label": "abortSignal", + "description": [], + "signature": [ + "AbortSignal | undefined" + ], + "path": "src/platform/plugins/shared/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViews", + "id": "def-common.GetFieldsOptions.runtimeMappings", + "type": "Object", + "tags": [], + "label": "runtimeMappings", + "description": [], + "signature": [ + "MappingRuntimeFields", + " | undefined" + ], + "path": "src/platform/plugins/shared/data_views/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -26423,7 +26480,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 540531313be55..80af816c1365d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1225 | 0 | 443 | 4 | +| 1229 | 0 | 447 | 4 | ## Client diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 74fdef60386ac..6a4fa2dd69a41 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 773e5e23bbd45..544a383d8a4b5 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: 2025-01-15 +date: 2025-01-20 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 161af20361cf9..e529945631d77 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -17,11 +17,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Referencing plugin(s) | Remove By | | ---------------|-----------|-----------| | | ml, stackAlerts | - | +| | ml, monitoring, dashboardEnhanced, stackConnectors, apm, infra | - | | | data, @kbn/search-errors, savedObjectsManagement, unifiedSearch, @kbn/unified-field-list, lens, controls, @kbn/lens-embeddable-utils, triggersActionsUi, dataVisualizer, ml, canvas, graph, fleet, transform, @kbn/ml-data-view-utils, upgradeAssistant, securitySolution, timelines, exploratoryView, stackAlerts, maps, visTypeTimeseries, uptime, ux, enterpriseSearch, @kbn/cloud-security-posture-graph, eventAnnotationListing, inputControlVis, visDefaultEditor, dataViewManagement, visTypeTimelion, visTypeVega | - | | | ml, securitySolution | - | -| | actions, ml, savedObjectsTagging, enterpriseSearch | - | -| | unifiedSearch, uiActionsEnhanced, controls, dashboard, ml, discover, imageEmbeddable, securitySolution, links | - | -| | data, esql, visualizations, lens, maps, dashboard, cases, ml, aiops, discover, reporting, discoverEnhanced, dashboardEnhanced, securitySolution, slo, synthetics, inputControlVis | - | +| | actions, ml, savedObjectsTagging | - | +| | unifiedSearch, uiActionsEnhanced, controls, ml, discover, imageEmbeddable, securitySolution, links | - | +| | data, esql, visualizations, lens, maps, cases, ml, aiops, discover, reporting, discoverEnhanced, dashboardEnhanced, securitySolution, slo, synthetics, inputControlVis | - | | | @kbn/core, usageCollection, taskManager, security, monitoringCollection, files, banners, telemetry, securitySolution, @kbn/test-suites-xpack, cloudFullStory, customBranding, enterpriseSearch, interactiveSetup, mockIdpPlugin, spaces, ml | - | | | @kbn/core, visualizations, dataVisualizer, ml, aiops, graph, dashboardEnhanced, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core, savedObjects, visualizations, canvas, graph, ml | - | @@ -43,6 +44,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution, synthetics, cloudDefend | - | | | securitySolution, synthetics, cloudDefend | - | | | cases, securitySolution, security | - | +| | fleet, datasetQuality, securitySolution, synthetics | - | | | @kbn/securitysolution-data-table, securitySolution | - | | | @kbn/securitysolution-data-table, securitySolution | - | | | securitySolution | - | @@ -68,13 +70,16 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | securitySolution | - | | | cloudSecurityPosture, securitySolution | - | -| | alerting, observabilityAIAssistant, transform, upgradeAssistant, fleet, entityManager, synthetics, serverlessSearch, cloudSecurityPosture, security | - | -| | actions, alerting | - | | | monitoring | - | | | monitoring, observabilityShared | - | +| | @kbn/core, home, unifiedSearch, visualizations, fileUpload, transform, dashboardEnhanced, discover, dataVisualizer | - | +| | @kbn/core-saved-objects-browser-mocks, dashboardEnhanced, @kbn/core | - | +| | @kbn/core-saved-objects-browser-mocks, dashboardEnhanced, @kbn/core | - | +| | @kbn/core, savedObjectsManagement, savedObjects, visualizations, savedObjectsTagging, eventAnnotation, lens, maps, graph, streamsApp, dashboard, kibanaUtils, expressions, data, savedObjectsTaggingOss, embeddable, uiActionsEnhanced, controls, canvas, dashboardEnhanced, globalSearchProviders | - | +| | alerting, observabilityAIAssistant, transform, upgradeAssistant, fleet, entityManager, synthetics, serverlessSearch, cloudSecurityPosture, security | - | +| | actions, alerting | - | | | @kbn/core, management, @kbn/core-application-browser-mocks, fleet, security, kibanaOverview | - | | | @kbn/core, observabilityOnboarding, enterpriseSearch, console | - | -| | @kbn/core, home, unifiedSearch, visualizations, fileUpload, transform, dashboardEnhanced, discover, dataVisualizer | - | | | @kbn/core, security | - | | | @kbn/core | - | | | @kbn/core, home, visualizations, lens, visTypeTimeseries, @kbn/core-saved-objects-browser-mocks | - | @@ -82,8 +87,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | home, @kbn/core-saved-objects-browser-mocks, @kbn/core | - | | | @kbn/core, visualizations, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core-saved-objects-browser-mocks, @kbn/core | - | -| | @kbn/core-saved-objects-browser-mocks, dashboardEnhanced, @kbn/core | - | -| | @kbn/core-saved-objects-browser-mocks, dashboardEnhanced, @kbn/core | - | | | @kbn/core-saved-objects-browser-mocks, @kbn/core | - | | | @kbn/core-saved-objects-browser-mocks, discover, @kbn/core | - | | | @kbn/core-saved-objects-browser-mocks, @kbn/core | - | @@ -117,7 +120,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core, lens | - | | | @kbn/core, home, savedObjectsTagging, canvas, savedObjectsTaggingOss, upgradeAssistant, lists, savedObjectsManagement, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core | - | -| | @kbn/core, savedObjectsManagement, savedObjects, visualizations, savedObjectsTagging, eventAnnotation, lens, maps, graph, streamsApp, dashboard, kibanaUtils, expressions, data, savedObjectsTaggingOss, embeddable, uiActionsEnhanced, controls, canvas, dashboardEnhanced, globalSearchProviders | - | | | @kbn/core, spaces, data, dashboard, savedSearch, visualizations, cloudSecurityPosture | - | | | graph, visTypeTimeseries, dataViewManagement, dataViews | - | | | graph, visTypeTimeseries, dataViewManagement, dataViews | - | @@ -197,6 +199,7 @@ Safe to remove. | | alerting | | | alerting | | | cases | +| | dashboard | | | data | | | data | | | data | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index ffc10c85dfb17..ff7c5f937d77a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -360,6 +360,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [goto_dashboard.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/public/components/app/service_dashboards/actions/goto_dashboard.tsx#:~:text=locator) | - | | | [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | | | [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | | | [apm_service_groups.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/apm/server/saved_objects/apm_service_groups.ts#:~:text=migrations) | - | @@ -498,9 +499,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | -| | [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction), [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction), [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction), [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction), [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction), [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction), [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction), [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=registerAction) | - | -| | [index.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts#:~:text=addTriggerAction) | - | +| | [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [types.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference), [types.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference) | - | | | [dashboard_saved_object.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts#:~:text=migrations) | - | | | [dashboard_saved_object.ts](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts#:~:text=schemas) | - | @@ -515,6 +514,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [abstract_dashboard_drilldown.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/abstract_dashboard_drilldown.tsx#:~:text=locator) | - | | | [dashboard_drilldowns_services.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/dashboard_drilldowns_services.ts#:~:text=addTriggerAction), [dashboard_drilldowns_services.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/dashboard_drilldowns_services.ts#:~:text=addTriggerAction) | - | | | [collect_config_container.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/components/collect_config_container.tsx#:~:text=savedObjects), [collect_config_container.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/components/collect_config_container.tsx#:~:text=savedObjects) | - | | | [collect_config_container.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/components/collect_config_container.tsx#:~:text=find) | - | @@ -583,6 +583,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## datasetQuality + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [data_telemetry_service.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/dataset_quality/server/services/data_telemetry/data_telemetry_service.ts#:~:text=getIsOptedIn) | - | + + + ## discover | Deprecated API | Reference location(s) | Remove By | @@ -627,7 +635,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [find_or_create_data_view.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/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/solutions/search/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/solutions/search/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.test.ts#:~:text=title) | - | -| | [check_access.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz) | - | | | [plugin.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/plugin.ts#:~:text=legacy) | - | | | [route_config_helpers.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/lib/route_config_helpers.test.ts#:~:text=authRequired) | - | | | [telemetry.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/search/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes) | - | @@ -729,8 +736,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [use_get_logs_discover_link.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/hooks/use_get_logs_discover_link.tsx#:~:text=indexPatternId) | - | | | [agent_policy_config.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_config.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_watch.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode) | 8.8.0 | | | [agent_policy_config.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_config.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/common/services/agent_policy_config.test.ts#:~:text=mode), [agent_policy_watch.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode), [agent_policy_watch.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/agent_policy_watch.test.ts#:~:text=mode) | 8.8.0 | -| | [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts#:~:text=authc), [transform_api_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts#:~:text=authc), [fleet_server_policies_enrollment_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts#:~:text=authc), [handlers.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.ts#:~:text=authc), [handlers.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [handlers.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [handlers.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts#:~:text=authc), [transform_api_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts#:~:text=authc), [fleet_server_policies_enrollment_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts#:~:text=authc)+ 4 more | - | +| | [transform_api_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts#:~:text=authc), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts#:~:text=authc), [fleet_server_policies_enrollment_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts#:~:text=authc), [handlers.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.ts#:~:text=authc), [handlers.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [handlers.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [handlers.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/routes/setup/handlers.test.ts#:~:text=authc), [transform_api_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts#:~:text=authc), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts#:~:text=authc), [fleet_server_policies_enrollment_keys.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/setup/fleet_server_policies_enrollment_keys.ts#:~:text=authc)+ 4 more | - | | | [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get), [security.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/security/security.ts#:~:text=get)+ 18 more | - | +| | [sender.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/telemetry/sender.ts#:~:text=getIsOptedIn), [sender.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts#:~:text=getIsOptedIn), [sender.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts#:~:text=getIsOptedIn) | - | | | [index.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/public/applications/integrations/index.tsx#:~:text=appBasePath) | - | | | [install.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/kibana/assets/install.ts#:~:text=migrationVersion), [install.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/kibana/assets/install.ts#:~:text=migrationVersion), [install.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/kibana/assets/install.ts#:~:text=migrationVersion), [get.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get.test.ts#:~:text=migrationVersion), [get.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get.test.ts#:~:text=migrationVersion), [get.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get.test.ts#:~:text=migrationVersion), [get.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get.test.ts#:~:text=migrationVersion), [install.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/kibana/assets/install.test.ts#:~:text=migrationVersion), [install.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/kibana/assets/install.ts#:~:text=migrationVersion), [install.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/services/epm/kibana/assets/install.ts#:~:text=migrationVersion)+ 6 more | - | | | [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts#:~:text=migrations), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts#:~:text=migrations) | - | @@ -804,6 +812,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [goto_dashboard_link.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/infra/public/components/asset_details/tabs/dashboards/actions/goto_dashboard_link.tsx#:~:text=locator) | - | | | [saved_object_type.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/infra/server/lib/sources/saved_object_type.ts#:~:text=migrations) | - | @@ -951,7 +960,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [register_ml_alerts.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/alerting/register_ml_alerts.ts#:~:text=registerNavigation) | - | -| | [job_creator.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts#:~:text=title), [categorization_examples_loader.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/common/results_loader/categorization_examples_loader.ts#:~:text=title), [configuration_step_details.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [configuration_step_form.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx#:~:text=title), [configuration_step_form.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx#:~:text=title)+ 9 more | - | +| | [quick_create_job_base.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts#:~:text=locator), [dashboard_service.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/services/dashboard_service.ts#:~:text=locator), [utils.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/components/custom_urls/custom_url_editor/utils.ts#:~:text=locator), [dashboard_service.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/services/dashboard_service.test.ts#:~:text=locator), [dashboard_service.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/services/dashboard_service.test.ts#:~:text=locator) | - | +| | [job_creator.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts#:~:text=title), [categorization_examples_loader.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/jobs/new_job/common/results_loader/categorization_examples_loader.ts#:~:text=title), [configuration_step_details.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [configuration_step_form.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx#:~:text=title), [configuration_step_form.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx#:~:text=title), [configuration_step_form.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx#:~:text=title)+ 8 more | - | | | [plugin.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/public/plugin.ts#:~:text=license%24) | 8.8.0 | | | [plugin.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/server/plugin.ts#:~:text=license%24) | 8.8.0 | | | [annotations.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/ml/server/routes/annotations.ts#:~:text=authc) | - | @@ -977,6 +987,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [ingest_pipeline_modal.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/private/monitoring/public/application/pages/elasticsearch/ingest_pipeline_modal.tsx#:~:text=locator) | - | | | [url_state.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/private/monitoring/public/url_state.ts#:~:text=syncQueryStateWithUrl), [url_state.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/private/monitoring/public/url_state.ts#:~:text=syncQueryStateWithUrl) | - | | | [header_menu_portal.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/private/monitoring/public/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/private/monitoring/public/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint) | - | @@ -1217,6 +1228,7 @@ migrates to using the Kibana Privilege model: /~https://github.com/elastic/kibana/ | | [get_is_alert_suppression_active.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts#:~:text=license%24), [create_threat_signals.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_types/indicator_match/threat_mapping/create_threat_signals.ts#:~:text=license%24), [query.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts#:~:text=license%24), [threshold.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_types/threshold/threshold.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24), [get_is_alert_suppression_active.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.test.ts#:~:text=license%24) | 8.8.0 | | | [route.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts#:~:text=authc) | - | | | [suggest_user_profiles_route.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/users/suggest_user_profiles_route.ts#:~:text=userProfiles), [get_notes.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts#:~:text=userProfiles), [suggest_user_profiles_route.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/users/suggest_user_profiles_route.ts#:~:text=userProfiles), [get_notes.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/timeline/routes/notes/get_notes.ts#:~:text=userProfiles) | - | +| | [sender.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/telemetry/sender.ts#:~:text=getIsOptedIn), [sender_helpers.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/telemetry/sender_helpers.ts#:~:text=getIsOptedIn), [sender.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/lib/telemetry/sender.test.ts#:~:text=getIsOptedIn) | - | | | [index.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps), [index.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedCellValueElementProps) | - | | | [index.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer), [index.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx#:~:text=DeprecatedRowRenderer) | - | | | [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/common/search_strategy/index_fields/index.ts#:~:text=BeatFields), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/server/search_strategy/endpoint_fields/index.ts#:~:text=BeatFields) | - | @@ -1247,7 +1259,7 @@ migrates to using the Kibana Privilege model: /~https://github.com/elastic/kibana/ | | [constants.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/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/solutions/security/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/solutions/security/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_NAME) | - | | | [constants.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/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/solutions/security/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/solutions/security/plugins/security_solution/scripts/endpoint/blocklists/index.ts#:~:text=ENDPOINT_BLOCKLISTS_LIST_DESCRIPTION), [index.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/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/solutions/security/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode), [use_colors.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/resolver/view/use_colors.ts#:~:text=darkMode) | - | -| | [index.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx#:~:text=externalControlColumns) | - | +| | [index.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx#:~:text=externalControlColumns), [all_assets.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx#:~:text=externalControlColumns) | - | @@ -1290,7 +1302,7 @@ migrates to using the Kibana Privilege model: /~https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [on_post_auth_interceptor.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts#:~:text=getKibanaFeatures), [spaces_usage_collector.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=getKibanaFeatures), [on_post_auth_interceptor.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.test.ts#:~:text=getKibanaFeatures) | 8.8.0 | +| | [spaces_usage_collector.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=getKibanaFeatures) | 8.8.0 | | | [spaces_usage_collector.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=license%24), [plugin.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/plugin.ts#:~:text=license%24), [plugin.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/plugin.ts#:~:text=license%24), [spaces_usage_collector.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/usage_collection/spaces_usage_collector.test.ts#:~:text=license%24) | 8.8.0 | | | [capabilities_switcher.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/capabilities/capabilities_switcher.ts#:~:text=authRequired) | - | | | [types.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/public/legacy_urls/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/public/legacy_urls/types.ts#:~:text=ResolvedSimpleSavedObject) | - | @@ -1313,6 +1325,14 @@ migrates to using the Kibana Privilege model: /~https://github.com/elastic/kibana/ +## stackConnectors + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [use_get_dashboard.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/gen_ai/use_get_dashboard.ts#:~:text=locator), [use_get_dashboard.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/gen_ai/use_get_dashboard.ts#:~:text=locator) | - | + + + ## streamsApp | Deprecated API | Reference location(s) | Remove By | @@ -1329,6 +1349,7 @@ migrates to using the Kibana Privilege model: /~https://github.com/elastic/kibana/ | | [synthetics_private_location.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts#:~:text=policy_id) | - | | | [synthetics_private_location.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts#:~:text=policy_id) | - | | | [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc), [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc), [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc), [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc), [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc), [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc), [enablement.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/routes/synthetics_service/enablement.ts#:~:text=authc), [enablement.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/routes/synthetics_service/enablement.ts#:~:text=authc), [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc), [get_api_key.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/get_api_key.ts#:~:text=authc)+ 6 more | - | +| | [sender.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.ts#:~:text=getIsOptedIn), [sender.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts#:~:text=getIsOptedIn), [sender.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts#:~:text=getIsOptedIn) | - | | | [register_ui_actions.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/ui_actions/register_ui_actions.ts#:~:text=addTriggerAction), [register_ui_actions.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/public/apps/embeddables/ui_actions/register_ui_actions.ts#:~:text=addTriggerAction) | - | | | [synthetics_monitor.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/solutions/observability/plugins/synthetics/server/saved_objects/synthetics_monitor.ts#:~:text=migrations) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index bb6da0974a954..05999aedd1b63 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -50,7 +50,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| -| presentationUtil | | [saved_object_save_modal_dashboard.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [saved_object_save_modal_dashboard.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/private/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/private/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | +| presentationUtil | | [saved_object_save_modal_dashboard.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [saved_object_save_modal_dashboard.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/private/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](/~https://github.com/elastic/kibana/tree/main/src/platform/plugins/private/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | @@ -66,7 +66,7 @@ migrates to using the Kibana Privilege model: /~https://github.com/elastic/kibana/ This is relied on by the reporting feature, and should be removed once reporting migrates to using the Kibana Privilege model: /~https://github.com/elastic/kibana/issues/19914 | -| security | | [app_authorization.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures), [on_post_auth_interceptor.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts#:~:text=getKibanaFeatures), [spaces_usage_collector.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=getKibanaFeatures), [on_post_auth_interceptor.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.test.ts#:~:text=getKibanaFeatures), [privileges.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 30 more | 8.8.0 | +| security | | [app_authorization.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures), [spaces_usage_collector.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=getKibanaFeatures), [privileges.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 28 more | 8.8.0 | | security | | [authorization_service.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/authorization/authorization_service.tsx#:~:text=getElasticsearchFeatures), [kibana_privileges.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/packages/private/security/role_management_model/src/__fixtures__/kibana_privileges.ts#:~:text=getElasticsearchFeatures) | 8.8.0 | | security | | [license_service.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/common/licensing/license_service.test.ts#:~:text=mode) | 8.8.0 | | security | | [plugin.tsx](/~https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/public/plugin.tsx#:~:text=license%24) | 8.8.0 | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index e05cdbee96267..0d11e583aa0c4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index ee2bb5e486d8b..090ba6285aba7 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index be51519309573..8342255e6151c 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: 2025-01-15 +date: 2025-01-20 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 7c03def9c7da2..3a2ae7c4cf2cb 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: 2025-01-15 +date: 2025-01-20 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 3fe2e70c3f764..e03f44493ff94 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 24ffb0bb30424..7cc82baf8dc4f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 43622c5d98b66..6b8587bde225f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 3fa634ccc851f..5240cbfbbf911 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index e3869162e0c7c..176ad84beb254 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 1289de789d2d0..2d022929aced4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index c77e0d15a3e66..83249be08d0bb 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 9a2a3111407a4..babc04a6a428a 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 236d8c96acdb9..8e146c0bfea94 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.devdocs.json b/api_docs/esql.devdocs.json index 99ffc6bfa0791..d466577c74fa7 100644 --- a/api_docs/esql.devdocs.json +++ b/api_docs/esql.devdocs.json @@ -431,45 +431,142 @@ } ], "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [], + "start": { + "parentPluginId": "esql", + "id": "def-public.EsqlPluginStart", + "type": "Interface", + "tags": [], + "label": "EsqlPluginStart", + "description": [], + "path": "src/platform/plugins/shared/esql/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "esql", + "id": "def-public.EsqlPluginStart.getJoinIndicesAutocomplete", + "type": "Function", + "tags": [], + "label": "getJoinIndicesAutocomplete", + "description": [], + "signature": [ + "() => Promise<", + { + "pluginId": "esql", + "scope": "common", + "docId": "kibEsqlPluginApi", + "section": "def-common.JoinIndicesAutocompleteResult", + "text": "JoinIndicesAutocompleteResult" + }, + ">" + ], + "path": "src/platform/plugins/shared/esql/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "esql", + "id": "def-common.JoinIndexAutocompleteItem", + "type": "Interface", + "tags": [], + "label": "JoinIndexAutocompleteItem", + "description": [], + "path": "src/platform/plugins/shared/esql/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "esql", + "id": "def-common.JoinIndexAutocompleteItem.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "src/platform/plugins/shared/esql/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "esql", + "id": "def-common.JoinIndexAutocompleteItem.mode", + "type": "string", + "tags": [], + "label": "mode", + "description": [], + "path": "src/platform/plugins/shared/esql/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "esql", + "id": "def-common.JoinIndexAutocompleteItem.aliases", + "type": "Array", + "tags": [], + "label": "aliases", + "description": [], + "signature": [ + "string[]" + ], + "path": "src/platform/plugins/shared/esql/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false }, { "parentPluginId": "esql", - "id": "def-public.EsqlPluginStart", + "id": "def-common.JoinIndicesAutocompleteResult", "type": "Interface", "tags": [], - "label": "EsqlPluginStart", + "label": "JoinIndicesAutocompleteResult", "description": [], - "path": "src/platform/plugins/shared/esql/public/types.ts", + "path": "src/platform/plugins/shared/esql/common/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "esql", - "id": "def-public.EsqlPluginStart.Editor", - "type": "CompoundType", + "id": "def-common.JoinIndicesAutocompleteResult.indices", + "type": "Array", "tags": [], - "label": "Editor", + "label": "indices", "description": [], "signature": [ - "React.ComponentClass<", - { - "pluginId": "@kbn/esql-editor", - "scope": "public", - "docId": "kibKbnEsqlEditorPluginApi", - "section": "def-public.ESQLEditorProps", - "text": "ESQLEditorProps" - }, - ", any> | React.FunctionComponent<", { - "pluginId": "@kbn/esql-editor", - "scope": "public", - "docId": "kibKbnEsqlEditorPluginApi", - "section": "def-public.ESQLEditorProps", - "text": "ESQLEditorProps" + "pluginId": "esql", + "scope": "common", + "docId": "kibEsqlPluginApi", + "section": "def-common.JoinIndexAutocompleteItem", + "text": "JoinIndexAutocompleteItem" }, - ">" + "[]" ], - "path": "src/platform/plugins/shared/esql/public/types.ts", + "path": "src/platform/plugins/shared/esql/common/types.ts", "deprecated": false, "trackAdoption": false } @@ -480,21 +577,5 @@ "enums": [], "misc": [], "objects": [] - }, - "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] } } \ No newline at end of file diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 01cebdc397978..0a383c1454493 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; @@ -21,13 +21,21 @@ Contact [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 26 | 0 | 9 | 0 | +| 32 | 0 | 15 | 0 | ## Client +### Start + + ### Functions ### Interfaces +## Common + +### Interfaces + + diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 546013ed9c095..9e8dc16a7ccde 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: 2025-01-15 +date: 2025-01-20 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 4b37c97d96f1b..5f1f8c6befb7c 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: 2025-01-15 +date: 2025-01-20 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 97012974c61a0..83991106139c0 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: 2025-01-15 +date: 2025-01-20 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 1c5ba5a274135..d6a989a3122b1 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: 2025-01-15 +date: 2025-01-20 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 fb2ba243f0ec0..f16bffdfc586f 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: 2025-01-15 +date: 2025-01-20 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 8f98bee809393..f1592d1746af3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index fcdc98a1c666d..acb24f303e2e6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.devdocs.json b/api_docs/expression_heatmap.devdocs.json index a110a3e8bef3a..345ec0f9aa2e3 100644 --- a/api_docs/expression_heatmap.devdocs.json +++ b/api_docs/expression_heatmap.devdocs.json @@ -1353,6 +1353,44 @@ } ] }, + { + "parentPluginId": "expressionHeatmap", + "id": "def-common.heatmapGridConfig.args.xAxisLabelRotation", + "type": "Object", + "tags": [], + "label": "xAxisLabelRotation", + "description": [], + "path": "src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "expressionHeatmap", + "id": "def-common.heatmapGridConfig.args.xAxisLabelRotation.types", + "type": "Array", + "tags": [], + "label": "types", + "description": [], + "signature": [ + "\"number\"[]" + ], + "path": "src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "expressionHeatmap", + "id": "def-common.heatmapGridConfig.args.xAxisLabelRotation.help", + "type": "string", + "tags": [], + "label": "help", + "description": [], + "path": "src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "expressionHeatmap", "id": "def-common.heatmapGridConfig.args.isXAxisTitleVisible", @@ -1455,7 +1493,7 @@ "signature": [ "(input: null, args: ", "HeatmapGridConfig", - ") => { strokeWidth?: number | undefined; strokeColor?: string | undefined; isCellLabelVisible: boolean; isYAxisLabelVisible: boolean; isYAxisTitleVisible: boolean; yTitle?: string | undefined; isXAxisLabelVisible: boolean; isXAxisTitleVisible: boolean; xTitle?: string | undefined; type: \"heatmap_grid\"; }" + ") => { strokeWidth?: number | undefined; strokeColor?: string | undefined; isCellLabelVisible: boolean; isYAxisLabelVisible: boolean; isYAxisTitleVisible: boolean; yTitle?: string | undefined; isXAxisLabelVisible: boolean; xAxisLabelRotation?: number | undefined; isXAxisTitleVisible: boolean; xTitle?: string | undefined; type: \"heatmap_grid\"; }" ], "path": "src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts", "deprecated": false, diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index ee7c62afb7bfe..1d9076ee0f962 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.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 | |-------------------|-----------|------------------------|-----------------| -| 112 | 0 | 108 | 2 | +| 115 | 0 | 111 | 2 | ## Common diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 3d58b4a56905e..0e63185e362f9 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 0c40b8b38476d..c2a68bc856eb4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index bd146ec27a08a..0c046a3700968 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index efd463e10f0c4..0234730fc6c94 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 8ce6aff531480..dd5c108f7583d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index d8df9055fc316..c3f613711b42d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index a34df88ce3d9f..e96444e60204c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index e117d73054a0d..39da2a80b1526 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index be3354b8068d9..642cf1b5884d9 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index f397a90379ed0..d9e98503f8378 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index bd58b88ef2f7c..5376d768e66b3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.devdocs.json b/api_docs/features.devdocs.json index 37a21e4a533ce..5fadfe4afec88 100644 --- a/api_docs/features.devdocs.json +++ b/api_docs/features.devdocs.json @@ -72,7 +72,7 @@ "section": "def-common.KibanaFeatureScope", "text": "KibanaFeatureScope" }, - "[] | undefined; readonly deprecated?: Readonly<{ readonly notice: string; }> | undefined; }>" + "[] | undefined; readonly deprecated?: Readonly<{ readonly notice: string; readonly replacedBy?: readonly string[] | undefined; }> | undefined; }>" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -101,7 +101,7 @@ "label": "deprecated", "description": [], "signature": [ - "Readonly<{ readonly notice: string; }> | undefined" + "Readonly<{ readonly notice: string; readonly replacedBy?: readonly string[] | undefined; }> | undefined" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -958,7 +958,7 @@ "\nIf defined, the feature is considered deprecated and won't be available to users when configuring roles or Spaces." ], "signature": [ - "Readonly<{ notice: string; }> | undefined" + "Readonly<{ notice: string; replacedBy?: readonly string[] | undefined; }> | undefined" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -1500,7 +1500,7 @@ "section": "def-common.KibanaFeatureScope", "text": "KibanaFeatureScope" }, - "[] | undefined; readonly deprecated?: Readonly<{ readonly notice: string; }> | undefined; }>" + "[] | undefined; readonly deprecated?: Readonly<{ readonly notice: string; readonly replacedBy?: readonly string[] | undefined; }> | undefined; }>" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -1529,7 +1529,7 @@ "label": "deprecated", "description": [], "signature": [ - "Readonly<{ readonly notice: string; }> | undefined" + "Readonly<{ readonly notice: string; readonly replacedBy?: readonly string[] | undefined; }> | undefined" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -2353,10 +2353,6 @@ "removeBy": "8.8.0", "trackAdoption": false, "references": [ - { - "plugin": "spaces", - "path": "x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts" - }, { "plugin": "spaces", "path": "x-pack/platform/plugins/shared/spaces/server/usage_collection/spaces_usage_collector.ts" @@ -2516,10 +2512,6 @@ { "plugin": "@kbn/security-authorization-core", "path": "x-pack/platform/packages/private/security/authorization_core/src/privileges/privileges.test.ts" - }, - { - "plugin": "spaces", - "path": "x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.test.ts" } ], "children": [], @@ -2783,9 +2775,19 @@ "type": "Function", "tags": [], "label": "getKibanaFeatures", - "description": [], + "description": [ + "\nReturns all registered Kibana features." + ], "signature": [ - "() => ", + "(params?: ", + { + "pluginId": "features", + "scope": "server", + "docId": "kibFeaturesPluginApi", + "section": "def-server.GetKibanaFeaturesParams", + "text": "GetKibanaFeaturesParams" + }, + " | undefined) => ", { "pluginId": "features", "scope": "common", @@ -2798,12 +2800,66 @@ "path": "x-pack/platform/plugins/shared/features/server/plugin.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "features", + "id": "def-server.FeaturesPluginStart.getKibanaFeatures.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "Optional parameters to filter features." + ], + "signature": [ + { + "pluginId": "features", + "scope": "server", + "docId": "kibFeaturesPluginApi", + "section": "def-server.GetKibanaFeaturesParams", + "text": "GetKibanaFeaturesParams" + }, + " | undefined" + ], + "path": "x-pack/platform/plugins/shared/features/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], "returnComment": [] } ], "initialIsOpen": false }, + { + "parentPluginId": "features", + "id": "def-server.GetKibanaFeaturesParams", + "type": "Interface", + "tags": [], + "label": "GetKibanaFeaturesParams", + "description": [ + "\nDescribes parameters used to retrieve all Kibana features (for public consumers)." + ], + "path": "x-pack/platform/plugins/shared/features/server/feature_registry.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "features", + "id": "def-server.GetKibanaFeaturesParams.omitDeprecated", + "type": "boolean", + "tags": [], + "label": "omitDeprecated", + "description": [ + "\nIf true, deprecated features will be omitted. For backward compatibility reasons, deprecated features are included\nin the result by default." + ], + "path": "x-pack/platform/plugins/shared/features/server/feature_registry.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "features", "id": "def-server.KibanaFeatureConfig", @@ -3148,7 +3204,7 @@ "\nIf defined, the feature is considered deprecated and won't be available to users when configuring roles or Spaces." ], "signature": [ - "Readonly<{ notice: string; }> | undefined" + "Readonly<{ notice: string; replacedBy?: readonly string[] | undefined; }> | undefined" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -3524,7 +3580,7 @@ "section": "def-common.KibanaFeatureScope", "text": "KibanaFeatureScope" }, - "[] | undefined; readonly deprecated?: Readonly<{ readonly notice: string; }> | undefined; }>" + "[] | undefined; readonly deprecated?: Readonly<{ readonly notice: string; readonly replacedBy?: readonly string[] | undefined; }> | undefined; }>" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -3553,7 +3609,7 @@ "label": "deprecated", "description": [], "signature": [ - "Readonly<{ readonly notice: string; }> | undefined" + "Readonly<{ readonly notice: string; readonly replacedBy?: readonly string[] | undefined; }> | undefined" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, @@ -4767,7 +4823,7 @@ "\nIf defined, the feature is considered deprecated and won't be available to users when configuring roles or Spaces." ], "signature": [ - "Readonly<{ notice: string; }> | undefined" + "Readonly<{ notice: string; replacedBy?: readonly string[] | undefined; }> | undefined" ], "path": "x-pack/platform/plugins/shared/features/common/kibana_feature.ts", "deprecated": false, diff --git a/api_docs/features.mdx b/api_docs/features.mdx index a710702cbb824..0477b4853c644 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.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 | |-------------------|-----------|------------------------|-----------------| -| 270 | 0 | 110 | 3 | +| 273 | 0 | 109 | 3 | ## Client diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 17db58218b8c7..d78f69a0c31f9 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: 2025-01-15 +date: 2025-01-20 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 77dca87c6a9b6..2b1d30dcb0182 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: 2025-01-15 +date: 2025-01-20 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 5226ee6822edf..47ab216ea71f9 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 12b608178294e..741384a1d7317 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 8fa5bc8d5c0c5..3e4a53beee39d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index 69b7bdf50042f..d5bbab3d26c13 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -26161,6 +26161,21 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "fleet", + "id": "def-common.NewAgentPolicy.agentless", + "type": "Object", + "tags": [], + "label": "agentless", + "description": [], + "signature": [ + "AgentlessPolicy", + " | undefined" + ], + "path": "x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "fleet", "id": "def-common.NewAgentPolicy.monitoring_pprof_enabled", @@ -26202,6 +26217,21 @@ "path": "x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.NewAgentPolicy.required_versions", + "type": "CompoundType", + "tags": [], + "label": "required_versions", + "description": [], + "signature": [ + "AgentTargetVersion", + "[] | null | undefined" + ], + "path": "x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index f66a236206cec..1bed0bf7a0717 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](/~https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1446 | 5 | 1319 | 82 | +| 1448 | 5 | 1321 | 84 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index b88b3316a7a8c..2d6456c364c32 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index d2ae69fe5814b..de3d1bd92f98f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index b644fa63d0a8c..872f61a6d81d1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index ca35cb4134dea..69980e0a40796 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 749e80a62a1d8..fef01b90f97c2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.devdocs.json b/api_docs/inference.devdocs.json index b194e1447bfe7..1716fd4a0d903 100644 --- a/api_docs/inference.devdocs.json +++ b/api_docs/inference.devdocs.json @@ -117,7 +117,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; temperature?: number | undefined; functionCalling?: ", + "[]; temperature?: number | undefined; modelName?: string | undefined; functionCalling?: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -335,7 +335,7 @@ "label": "options", "description": [], "signature": [ - "{ [P in \"temperature\" | \"abortSignal\" | \"system\" | \"stream\" | \"messages\" | Exclude]: ", + "{ [P in \"abortSignal\" | \"temperature\" | \"system\" | \"stream\" | \"messages\" | \"modelName\" | Exclude]: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -396,7 +396,7 @@ "label": "options", "description": [], "signature": [ - "{ id: TId; input: string; schema?: TOutputSchema | undefined; retry?: { onValidationError?: number | boolean | undefined; } | undefined; abortSignal?: AbortSignal | undefined; system?: string | undefined; stream?: TStream | undefined; previousMessages?: ", + "{ id: TId; abortSignal?: AbortSignal | undefined; input: string; schema?: TOutputSchema | undefined; retry?: { onValidationError?: number | boolean | undefined; } | undefined; system?: string | undefined; stream?: TStream | undefined; modelName?: string | undefined; previousMessages?: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -535,7 +535,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; temperature?: number | undefined; functionCalling?: ", + "[]; temperature?: number | undefined; modelName?: string | undefined; functionCalling?: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -855,7 +855,7 @@ "section": "def-common.ChatCompleteAPI", "text": "ChatCompleteAPI" }, - ") => ({ id, connectorId, input, schema, system, previousMessages, functionCalling, stream, abortSignal, retry, }: DefaultOutputOptions) => Promise<", + ") => ({ id, connectorId, input, schema, system, previousMessages, modelName, functionCalling, stream, abortSignal, retry, }: DefaultOutputOptions) => Promise<", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -1006,7 +1006,7 @@ "label": "ChatCompleteRequestBody", "description": [], "signature": [ - "{ connectorId: string; stream?: boolean | undefined; system?: string | undefined; temperature?: number | undefined; messages: ", + "{ connectorId: string; stream?: boolean | undefined; system?: string | undefined; temperature?: number | undefined; modelName?: string | undefined; messages: ", { "pluginId": "@kbn/inference-common", "scope": "common", diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index f01d540851092..393dda548f20d 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 772efd46d93f9..9ebf48fc590a9 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: 2025-01-15 +date: 2025-01-20 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 ad56ccf72f105..1e0c3ffc50bf5 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: 2025-01-15 +date: 2025-01-20 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 3ff7ca7a818e4..0fab8c8f84591 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 501ba366e5b7c..36227de3ab755 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 53adddc46fe5d..3d19732b1fe5c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index c7f87fef9215f..e10be4cf87f02 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 048102c32e5c5..256268961e018 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 78cd31b209c7e..82e0b7001cbf4 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index b493fd88b9cd5..582ab965c0400 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.devdocs.json b/api_docs/kbn_ai_assistant.devdocs.json index e98de9df3b0c2..6d83eab7e710a 100644 --- a/api_docs/kbn_ai_assistant.devdocs.json +++ b/api_docs/kbn_ai_assistant.devdocs.json @@ -1161,11 +1161,11 @@ "signature": [ "State<{ errorMessage?: string | undefined; ready: boolean; enabled: boolean; endpoint?: Partial<", "InferenceInferenceEndpointInfo", - "> | undefined; model_stats?: { deployment_state: ", + "> | undefined; model_stats?: { deployment_state?: ", "MlDeploymentAssignmentState", - " | undefined; allocation_state: ", + " | undefined; allocation_state?: ", "MlDeploymentAllocationState", - " | undefined; } | undefined; }> & { refresh: () => void; }" + " | undefined; allocation_count?: number | undefined; } | undefined; }> & { refresh: () => void; }" ], "path": "x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_knowledge_base.tsx", "deprecated": false, diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index aff0aa7e4f8a8..6e9db1f188ead 100644 --- a/api_docs/kbn_ai_assistant.mdx +++ b/api_docs/kbn_ai_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant title: "@kbn/ai-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant'] --- import kbnAiAssistantObj from './kbn_ai_assistant.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_common.mdx b/api_docs/kbn_ai_assistant_common.mdx index f244a41b5f092..a2791bb44d03f 100644 --- a/api_docs/kbn_ai_assistant_common.mdx +++ b/api_docs/kbn_ai_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-common title: "@kbn/ai-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-common plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_icon.mdx b/api_docs/kbn_ai_assistant_icon.mdx index 49090560eda12..61cfdb086270f 100644 --- a/api_docs/kbn_ai_assistant_icon.mdx +++ b/api_docs/kbn_ai_assistant_icon.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-icon title: "@kbn/ai-assistant-icon" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-icon plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-icon'] --- import kbnAiAssistantIconObj from './kbn_ai_assistant_icon.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 416a445d70c55..58bbd55aa5d1d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index d89ff3bc03b56..f887ab1abc281 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 97a7bfde31e27..685235b4c0c5b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index d803a5801eec4..b87f329bed2a2 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: 2025-01-15 +date: 2025-01-20 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 f076ad1c6841c..6a53c3c714786 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: 2025-01-15 +date: 2025-01-20 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 e82a1b4a49c3e..13cadc44d32cd 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: 2025-01-15 +date: 2025-01-20 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 51b473c090a6c..78e58c51c879a 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: 2025-01-15 +date: 2025-01-20 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 425925122ef9e..15cb0b9e51413 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 49a41bc081dc1..9f845231d3124 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index 106c5c1a04411..0f237797e43cd 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -4538,7 +4538,7 @@ "section": "def-common.GetFieldsOptions", "text": "GetFieldsOptions" }, - ", \"allowNoIndex\"> | undefined) => Promise<", + ", \"allowNoIndex\" | \"pattern\"> | undefined) => Promise<", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index afe859e8ef2ce..14d492b55107d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index bdc851743616f..d1a192b10814e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 38cf3a0dd50d7..d756d5afdb800 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 2a150b7a09a8f..aed7e1dce41dc 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 82dd4365a7f30..8ca83939fe5d2 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: 2025-01-15 +date: 2025-01-20 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 94adc76385d0d..2ec6bdfdad08c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 5c377ac66f94a..5bc771a4af943 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.devdocs.json b/api_docs/kbn_apm_types.devdocs.json index d251eb6019773..f01890f349f3b 100644 --- a/api_docs/kbn_apm_types.devdocs.json +++ b/api_docs/kbn_apm_types.devdocs.json @@ -2590,6 +2590,9 @@ "tags": [], "label": "original", "description": [], + "signature": [ + "string | undefined" + ], "path": "x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts", "deprecated": false, "trackAdoption": false diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 0c24de51a08ec..8bde14cd5f322 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 6dc416a586899..a9873cf019d91 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 7cf52b3603a3f..362c10fc16c7a 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 4b2781a0fc7e4..44c53f0754a35 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index ed616da29e93c..4c00dd8cf53e7 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: 2025-01-15 +date: 2025-01-20 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 9b7e8e1b037d8..e82cd78e6a01f 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: 2025-01-15 +date: 2025-01-20 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 1cc92bb127d48..cddb6cd52fc36 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 5fdaf17c7870f..38f47e6f70cb4 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 4ad15ac45a9c5..ca913a236e8a0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 35f6a55b25c34..12164a9bc0e8c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 70d6542de6d70..be3951b376b55 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_charts_theme.mdx b/api_docs/kbn_charts_theme.mdx index 16a2be7416c54..6cfcb4a470074 100644 --- a/api_docs/kbn_charts_theme.mdx +++ b/api_docs/kbn_charts_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-charts-theme title: "@kbn/charts-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/charts-theme plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/charts-theme'] --- import kbnChartsThemeObj from './kbn_charts_theme.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 1e8aa813e85e6..c0cf31384b97d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 09b72e625dadf..f4efb0af6c464 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 443ef96ae31c0..e786f42d55365 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 211b32452a7a7..a05126c551837 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 3d980920a6921..b0c1db9f356ee 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index f91f79e6b658d..b20a10bfc0aa2 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 409cdb494d3d2..d0f5ee08ffcd0 100644 --- a/api_docs/kbn_cloud_security_posture_graph.mdx +++ b/api_docs/kbn_cloud_security_posture_graph.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-graph title: "@kbn/cloud-security-posture-graph" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-graph plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 17143da6983e2..eec631d26133c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index b2048ebb7e6bc..a7e0747404d79 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: 2025-01-15 +date: 2025-01-20 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 1607877070d1f..d103626deb39d 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: 2025-01-15 +date: 2025-01-20 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 2f76c0ba54e22..372a95a251f7a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index d67004ce1e76b..458f5d87a40bd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index c8c704ee61e2d..c42a9e3d36989 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 7068742efeec2..84432a973af3c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 314e608ef6afc..a37b6987525d9 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 3db32a33095cb..9e79c5c2af26e 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index bd0e716f09737..d16144819d3ae 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_common.mdx b/api_docs/kbn_content_management_favorites_common.mdx index 3cef859dbabf4..9728ba8dd1552 100644 --- a/api_docs/kbn_content_management_favorites_common.mdx +++ b/api_docs/kbn_content_management_favorites_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-common title: "@kbn/content-management-favorites-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-common plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-common'] --- import kbnContentManagementFavoritesCommonObj from './kbn_content_management_favorites_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 67a35c156ebf4..9af68a4d80b82 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 9a59e14650a95..831c72bb6e0ff 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index d3fdd314909fd..94fa9baa4e901 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: 2025-01-15 +date: 2025-01-20 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 2aa6c698c40e4..ed2c91ffef07b 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: 2025-01-15 +date: 2025-01-20 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 8fac5120e1bd5..aa4e723c9c269 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: 2025-01-15 +date: 2025-01-20 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 64863ceef2805..cf3bf2f2fcf55 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 950ed260fafb1..557a6a0c93aa2 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 93eabab726b73..2175c9bbf516b 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: 2025-01-15 +date: 2025-01-20 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 805cd0959cd53..8a5c4d95d726f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 916406a106145..0954b54ab469e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 29aee591398e2..45f306dadd1fd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 37f592249e178..228935eb52b5a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index e75cc337a8e07..ce61e393621e6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 02f7715de0c02..2462efb49768c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 90110952a15b2..8bc2ba1249a11 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index d39ab70d9fb45..4772ae07f0fde 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index cb9018204c29e..1f5a406257269 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 3dc50c845a156..0461ad7270c12 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 9f7c81efa0fb4..7534220a8b91c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 5ebc02f60f801..9bb33c126c10a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 39b2c64fbe80d..86b5fbc34b5bc 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 5fb7ff4366025..508161812c1e2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 2c5fc94e4cfca..d3ca5372d7b23 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index f085481766474..2e40ef052d09a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 929320d934d4a..b47dad8339274 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 1b91fdc9c1841..7bcb8d8acdc92 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 8ffd9d36948f5..3a724cf347bf4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 4226f22fb5930..d9f7703eb41b5 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index e9e394c5ffa5b..b1d8d7b8390aa 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index 24a1b23334e1d..73e86aa6b85a3 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3181,7 +3181,7 @@ "label": "AppDeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"inventory\" | \"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:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"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:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"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:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"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:siem_migrations-rules\" | \"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:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"inventory\" | \"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:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"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:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"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:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"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:siem_migrations-rules\" | \"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:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "src/core/packages/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 d08e358b3240f..3699eb10ff369 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index df0aecfa39f0b..f4823bc835bd5 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 891603005d99a..1f7451a49924a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index bbacbffd61ecd..133530bd12733 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 2eb72010c179f..b8501c5691f9c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index d4ff550512756..630fed1c95bc4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 943961be50784..8b085daf5e3ca 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index bf3435b333733..d72c11fab7c0d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 3e50bee390c22..ae0c5f25e13c6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index bee817cf4c6aa..e9cbdc779be97 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 80a6e939b11cd..73d593070c548 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index 0fc771bbdd2f3..edb42179933e4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 81371e2ee6b0f..ef9b2b8096c56 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 6a7411308fa2f..ede3bceac5cec 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 58b71e404e5c3..bd2fb782ddb32 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index fc3f63cd55b98..ac0b6ad4340f0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index f5696f84058ba..c51c9262b521f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index aa81ce5ce1b89..c96e3ade246f8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index 8efa8eb85dbb6..7563c11a0f066 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 5a9d1ed6c9156..1cb64914b43cf 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index d8a5195cb9055..26d60a95b00cd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index 1a6c485359984..7fdf05c8521ae 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index f6e1357d6d7b6..722e3e4f3453f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index d2148fbd27314..0347877357f78 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 608365ea64bf2..8992e773e9482 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index b110163e7772d..19a88605fb597 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 9610ed6824979..e4c4036924a6c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index bac608d172e90..c0ff63b7bbd86 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 76705fd18f2f2..dc36435629311 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index a7bede0027e2b..024761c7ea5f3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 6e8a164e8905c..8ea017d6b71ad 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index dbad4f540261f..3ac61d1f2ba48 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 3bd6032398724..78e719d51ce37 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index a15924a17b303..855d8c4795188 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 452a92bcf55cc..4323827a5c30e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 16dc4c84b5a12..d3504aab01994 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index d5a756345383f..83bfae57cdb38 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index 782b416cbb9b4..e1e7e3b6c6320 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 62a926f239038..5fa6f7ec385b3 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index 65c8afe1cb7f2..7b472520442be 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index 31b1eee042a6f..2b4ace3d53ce6 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index 2215af7e7753c..82c628f9e1c88 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index ce0468f1a5ec4..9890b085b4a70 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index a7c9aefff05ac..9179b07741146 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index ff904067f7684..06159c5ead3ec 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index cb5d42b4d34c9..53fd54b30cda7 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 5af1f83a978ed..7f80101004bce 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 80dfb8cdc9ee9..d58df6340e037 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index ea447b149173b..8e1a47001a493 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index c9c88ff2c0658..11709d4d6bead 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index ae8ecaf6708ac..378c97f30d754 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 36a38e7f3429c..30e63ad5c07f8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.devdocs.json b/api_docs/kbn_core_http_router_server_internal.devdocs.json index 2503a4a34110e..f30f0747890c0 100644 --- a/api_docs/kbn_core_http_router_server_internal.devdocs.json +++ b/api_docs/kbn_core_http_router_server_internal.devdocs.json @@ -65,7 +65,7 @@ "label": "from", "description": [], "signature": [ - "({ router, defaultHandlerResolutionStrategy, isDev, useVersionResolutionStrategyForInternalPaths, }: ", + "({ router, log, defaultHandlerResolutionStrategy, isDev, useVersionResolutionStrategyForInternalPaths, }: ", "VersionedRouterArgs", ") => ", "CoreVersionedRouter" @@ -79,7 +79,7 @@ "id": "def-server.CoreVersionedRouter.from.$1", "type": "Object", "tags": [], - "label": "{\n router,\n defaultHandlerResolutionStrategy,\n isDev,\n useVersionResolutionStrategyForInternalPaths,\n }", + "label": "{\n router,\n log,\n defaultHandlerResolutionStrategy,\n isDev,\n useVersionResolutionStrategyForInternalPaths,\n }", "description": [], "signature": [ "VersionedRouterArgs" diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 778625f3c8c4f..723dbba646a53 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 823db01c5bedf..083d3536b1e92 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 6d8c7b7c351d6..669c4c259d40f 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4304,22 +4304,6 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/server-internal/src/http_server.test.ts" }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, { "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts" @@ -6332,10 +6316,6 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/router.test.ts" }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/router.test.ts" - }, { "plugin": "@kbn/core", "path": "src/core/packages/http/server-internal/src/http_server.test.ts" @@ -6388,38 +6368,6 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/server-internal/src/http_server.test.ts" }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, { "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts" @@ -7428,10 +7376,6 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/server-internal/src/http_server.test.ts" }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" - }, { "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts" @@ -11814,9 +11758,6 @@ "tags": [], "label": "isVersioned", "description": [], - "signature": [ - "false" - ], "path": "src/core/packages/http/server/src/router/router.ts", "deprecated": false, "trackAdoption": false @@ -14095,10 +14036,6 @@ "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/api/stop.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/api/retry.ts" - }, { "plugin": "metricsDataAccess", "path": "x-pack/solutions/observability/plugins/metrics_data_access/server/lib/adapters/framework/kibana_framework_adapter.ts" @@ -14374,6 +14311,10 @@ "plugin": "telemetry", "path": "src/platform/plugins/shared/telemetry/server/routes/telemetry_usage_stats.ts" }, + { + "plugin": "telemetry", + "path": "src/platform/plugins/shared/telemetry/server/local_shipper/initialize_local_shipper.ts" + }, { "plugin": "transform", "path": "x-pack/platform/plugins/private/transform/server/routes/api/field_histograms/register_route.ts" @@ -15096,7 +15037,7 @@ }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/api/install_translated.ts" + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/enablement.ts" }, { "plugin": "securitySolution", @@ -15210,6 +15151,10 @@ "plugin": "telemetry", "path": "src/platform/plugins/shared/telemetry/server/routes/telemetry_usage_stats.test.ts" }, + { + "plugin": "@kbn/core", + "path": "src/core/packages/http/router-server-internal/src/router.test.ts" + }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_router.ts" @@ -15246,6 +15191,14 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" }, + { + "plugin": "@kbn/core", + "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, + { + "plugin": "@kbn/core", + "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_router.test.ts" @@ -15600,6 +15553,10 @@ "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/delete.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/delete.ts" + }, { "plugin": "metricsDataAccess", "path": "x-pack/solutions/observability/plugins/metrics_data_access/server/lib/adapters/framework/kibana_framework_adapter.ts" @@ -15808,13 +15765,7 @@ "label": "handlers", "description": [], "signature": [ - "{ fn: ", - "RequestHandler", - "; options: ", + "{ fn: Function; options: ", "AddVersionOpts", "; }[]" ], @@ -15975,6 +15926,24 @@ } ], "misc": [ + { + "parentPluginId": "@kbn/core-http-server", + "id": "def-server.AnyKibanaRequest", + "type": "Type", + "tags": [], + "label": "AnyKibanaRequest", + "description": [], + "signature": [ + "KibanaRequest", + "" + ], + "path": "src/core/packages/http/server/src/router/request.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-http-server", "id": "def-server.ApiVersion", diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 50da01e3dae9b..8f4730f000aed 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_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 | |-------------------|-----------|------------------------|-----------------| -| 567 | 2 | 242 | 0 | +| 568 | 2 | 243 | 0 | ## Server diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 0805275f2d175..c79dc180c4cde 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index e69f529386991..247c7947579cd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_utils.mdx b/api_docs/kbn_core_http_server_utils.mdx index 4ba62811c0b68..31598c055f7ac 100644 --- a/api_docs/kbn_core_http_server_utils.mdx +++ b/api_docs/kbn_core_http_server_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-utils title: "@kbn/core-http-server-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-utils plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-utils'] --- import kbnCoreHttpServerUtilsObj from './kbn_core_http_server_utils.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index ca45f1e69b173..6c5dd2db1fac6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index c1076e1b79697..b890ee9bbbb65 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index f7fae118e8091..3918978f14118 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index b89d78bcde467..7a9b1446685af 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index 9d643f7eb35f4..baf77173d4c02 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index dfc09bbb353f3..243ca76104535 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 0fc8d1f70e569..739d8940d8efa 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index c59180a13971a..36edf3a58ab18 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index bc0524e9c6660..3f12640926d44 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index bcbac1212063a..8389875699e50 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index c2426c3ae5584..77f2bd449a633 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index d1728642acf6d..f50d3563d08cc 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index d0a94dd2b668b..aaa1eabc61d6c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index eeee37faaf2e5..0efa5ee3d50e9 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index d405564c1dc73..23011828a0751 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 3850c3f06081e..5be1e1c8dfcbd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 8d3b0e7826f5b..0c686eee0bc8c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index c59382e982bd5..482e79ca2098f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 5de82b872be2f..7d00d29ebf7b0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 190c67e04c780..2e575c13c584e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 2499b91740c53..213f7aab77eb8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index 058a2dc58706b..0ce581177e8c2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 5e0ea970bf577..c33d1adc65f69 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index a3223a8c87cc3..cf6f7c796a8f5 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 16aaf264a6bea..4b107db9b49c1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 5b909f54c25b2..541a1d503d702 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 5d3f4b8be4bff..16695a72c5ea1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 9546dfb79abfe..d142726bf2b86 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 3c85ccf677471..40795657c4224 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 676cb2ebde626..cd2df10b4aba0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index 2fec49b2ff62f..74140a0887c63 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 456d8861ccd4c..b3f4d1a0e37ac 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 721f6238f9ae6..848a7c967f0bd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index bd9c209350e09..7dd6e37f41998 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index 7f47826de7ad3..5671c6635a5cc 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: 2025-01-15 +date: 2025-01-20 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 410aed3ec38bb..761ee70dcbfab 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: 2025-01-15 +date: 2025-01-20 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 1c435bd9c5f8b..dbaed9ccb2c32 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 5aec48be79b0d..956dbe4422dd1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 7709bbe10faf8..0301add004bb6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 7544c589decff..ff27c55c996e7 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser.mdx b/api_docs/kbn_core_rendering_browser.mdx index 7e104d648c798..a3ccc40c10ad0 100644 --- a/api_docs/kbn_core_rendering_browser.mdx +++ b/api_docs/kbn_core_rendering_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser title: "@kbn/core-rendering-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser'] --- import kbnCoreRenderingBrowserObj from './kbn_core_rendering_browser.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index f7ba2ab005769..093cf66f4bbf8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 2569ec25c205d..010903b6331b1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 78c5c9dfa6433..c75fbee62f418 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 0cde5e89fbe7f..f581917bd34ed 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 7f829a8cfcb3c..8ce56f7410205 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 8e2b429a68d0c..d7e0548c28ffe 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 0a244d46a51c0..1711b06e0f24c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 04413d90e8da0..cd79a56351f6a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index c292e43fd4c28..78f2d2835bdbb 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 0930a166f5062..53a20b04a4bc1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 792a6ddbe295b..d08bab119aea5 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 17a670397b75c..7f1274c012914 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index e61a0871037fc..1546c7efc4ef6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index ad2fe00edc8ea..12a9a4d7b7f2a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index fcabbf94598be..619c082fa6453 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 46187a629f178..7ca460eb69cb7 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 93d4cd419f28f..a4c37207030ae 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 52c6fc58cc5fa..a77a6aa8683fe 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index b966f21bd02a8..dc0ae1945c4ce 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index cfdb8b8056b37..4687b30e94388 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index 9c15e5ad11aae..84b1c197a9039 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index d42ab9ed7ff63..9f80901dd9d96 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: 2025-01-15 +date: 2025-01-20 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 9baf7f340f65a..76be522922f59 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: 2025-01-15 +date: 2025-01-20 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 58d7eec7a2af5..0bafc381b48a4 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: 2025-01-15 +date: 2025-01-20 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 32dfb50d8fb05..f3ea8cfd62cb4 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: 2025-01-15 +date: 2025-01-20 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 88f8127c60e6f..dabab9027e473 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: 2025-01-15 +date: 2025-01-20 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 4cea99a90ae95..23b4233b6080c 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: 2025-01-15 +date: 2025-01-20 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 08ece82170b3e..ca94dd785a8a3 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: 2025-01-15 +date: 2025-01-20 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 5e0ecdac1fabf..ed3a8aa60da76 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 450ea9bab25fd..8d3a9fa78a7e0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 75c2c3b24ee2c..5906dc6dad034 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 17836e2b33605..89868e6b96041 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 8e2fe5c62ad40..111c1ba01e2d6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 418cf46d12945..dce30e704e62d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index c2634671e911a..25505915567b6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 47446e5734c7e..f5ab6da3c296a 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: 2025-01-15 +date: 2025-01-20 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 4e0413fd1282f..f796db62e50e0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 00f24081c258a..e9f4384296f4e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 14dd084c493e7..7700593fa1c66 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 04ecad67dfc89..5d723ab6d7bd4 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index def3c18a73d3c..e1fdfc6a43295 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index a332e620d6150..7808fd267e707 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 1e0c806633d2a..b8a23f602b759 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 8b2a04e483e03..42677115f76b6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 48b4378986ad6..a1f1637ad71e7 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index ce7437b152464..7a6ac413537f0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 5b146adec42e3..018c49b8f0caa 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index f3c16a32d474a..e9ca4849b4d96 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 7e659f32c85a4..3fe59b4227f5f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 1366acdcd5716..c5406c8910f83 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 00dcfaee126df..dd38c7e031473 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index c2de79d33cd39..d21780c5752f8 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: 2025-01-15 +date: 2025-01-20 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 14a87ea0a8086..50e66b5372ea1 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: 2025-01-15 +date: 2025-01-20 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 4d8bbe4410d79..ddd6b8da4284d 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: 2025-01-15 +date: 2025-01-20 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 8acac6afba9e5..1183e15e007bc 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: 2025-01-15 +date: 2025-01-20 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 5f5a7c15ae90b..f52785c4bc271 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: 2025-01-15 +date: 2025-01-20 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 f1dda810767b0..acf9576dd5faf 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: 2025-01-15 +date: 2025-01-20 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 5eab0e3a53818..b74c3f84b7bcf 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: 2025-01-15 +date: 2025-01-20 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 94808d9b7ee09..dc10c1a04c879 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: 2025-01-15 +date: 2025-01-20 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 1a9c24b33bb0f..ffb0801dbd7bc 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: 2025-01-15 +date: 2025-01-20 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 8c69b02792ed9..4a07ffb84b69a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 784398457bafa..bf41b2d5fd73d 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: 2025-01-15 +date: 2025-01-20 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 696123ba7fa58..f9fa64493f2d5 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: 2025-01-15 +date: 2025-01-20 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 562647b4020b9..9ed2438f808e1 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: 2025-01-15 +date: 2025-01-20 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 ea42e80fe1940..f567e2fa87610 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: 2025-01-15 +date: 2025-01-20 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 a40dcfc67e49f..d0ffe47eeb33d 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: 2025-01-15 +date: 2025-01-20 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 31016479eadf7..794508f8c76a4 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: 2025-01-15 +date: 2025-01-20 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 ad41f3837776c..fc5f35bb8f1b3 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: 2025-01-15 +date: 2025-01-20 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 45e1a573fd0dc..55ad19de2515b 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: 2025-01-15 +date: 2025-01-20 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 c3981e360aa61..0687e4ab7fb93 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: 2025-01-15 +date: 2025-01-20 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 a8dccfd9d2f30..a4d712fe446ab 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: 2025-01-15 +date: 2025-01-20 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 0dd5f6b7d1abb..6f6f9f9677c11 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: 2025-01-15 +date: 2025-01-20 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 9e41d4fb3fb60..7aaf1294e9743 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: 2025-01-15 +date: 2025-01-20 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 802dfeded9064..4b235c1555e46 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: 2025-01-15 +date: 2025-01-20 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 c424f8033934d..6020cd4e84f94 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: 2025-01-15 +date: 2025-01-20 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 0f8bb96fcd0c7..bbac9cf5270fb 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: 2025-01-15 +date: 2025-01-20 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 39bb9a840bf1e..933f1d29bd771 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": [ - "\"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\"" + "\"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\"" ], "path": "src/platform/packages/shared/deeplinks/search/deep_links.ts", "deprecated": false, @@ -202,6 +202,36 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/deeplinks-search", + "id": "def-common.SEARCH_INDICES", + "type": "string", + "tags": [], + "label": "SEARCH_INDICES", + "description": [], + "signature": [ + "\"elasticsearchIndices\"" + ], + "path": "src/platform/packages/shared/deeplinks/search/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-search", + "id": "def-common.SEARCH_INDICES_START", + "type": "string", + "tags": [], + "label": "SEARCH_INDICES_START", + "description": [], + "signature": [ + "\"elasticsearchStart\"" + ], + "path": "src/platform/packages/shared/deeplinks/search/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/deeplinks-search", "id": "def-common.SEARCH_SEMANTIC_SEARCH", diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index dcbc774f5d42b..3a3670d1e23fe 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: 2025-01-15 +date: 2025-01-20 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 | |-------------------|-----------|------------------------|-----------------| -| 17 | 0 | 17 | 0 | +| 19 | 0 | 19 | 0 | ## Common diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index ee4b3fb9cb5ae..4a8937c1e5e34 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: 2025-01-15 +date: 2025-01-20 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 0d5e26e23ce7d..978ee3fd1fe74 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: 2025-01-15 +date: 2025-01-20 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 3cf5731bcd910..ea3aedd59764e 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: 2025-01-15 +date: 2025-01-20 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 b46e7a443dcee..4ad5a2bdda73d 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: 2025-01-15 +date: 2025-01-20 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 aa265053eea00..b54f16c5979c0 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: 2025-01-15 +date: 2025-01-20 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 0e27695ab00b4..c219dfd653ccf 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: 2025-01-15 +date: 2025-01-20 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 bdf37e6d72772..a92bfebd764b2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index c626638db05ac..b22ea8fcc5028 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index ef7c398710e65..3f9ad830a4652 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index f9b9b1cb5476f..e5f7c8957f0f4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_contextual_components.mdx b/api_docs/kbn_discover_contextual_components.mdx index e9fa16b111153..030bfafe5d367 100644 --- a/api_docs/kbn_discover_contextual_components.mdx +++ b/api_docs/kbn_discover_contextual_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-contextual-components title: "@kbn/discover-contextual-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-contextual-components plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-contextual-components'] --- import kbnDiscoverContextualComponentsObj from './kbn_discover_contextual_components.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 054896df12696..98542ce7c9715 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: 2025-01-15 +date: 2025-01-20 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 e784001abb78a..e90798e1f6646 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 083b691f425ca..f7039488fe47d 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: 2025-01-15 +date: 2025-01-20 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 665e07a8bb7ae..0e89767742f33 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: 2025-01-15 +date: 2025-01-20 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 a66ad42e19ba9..55cd2cc13ce68 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: 2025-01-15 +date: 2025-01-20 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 e9ea62ba34a40..d2ccad9b3114d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index da83fd5d1e31f..c17a0ac01c0a4 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: 2025-01-15 +date: 2025-01-20 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 8ea3cc1802f62..924b6b441e1ee 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: 2025-01-15 +date: 2025-01-20 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 90ed621129037..ecc439e774df1 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: 2025-01-15 +date: 2025-01-20 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 a59174f09f4f1..c5acf8adc99e7 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: 2025-01-15 +date: 2025-01-20 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 dd792b15a3578..92a19383b9831 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index a73946fc216f2..9cb11ef84807c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 8245211b6c4be..b743d6a0c200e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.devdocs.json b/api_docs/kbn_es_query.devdocs.json index 2156065788810..4340a4c216a29 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -1781,7 +1781,7 @@ "section": "def-common.RangeFilter", "text": "RangeFilter" }, - ") => { from: moment.Moment; to: moment.Moment; }" + ") => { from: string | moment.Moment; to: string | moment.Moment; }" ], "path": "src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.ts", "deprecated": false, diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index bbce4a3a2a9df..462670087c06c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index d0bfa548de583..2cb6442e34d91 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 3aa0ae4f91c03..0f5b267426a49 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index a0e8158ca2668..c5dbac16f1afb 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -2852,6 +2852,344 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isBinaryExpression", + "type": "Function", + "tags": [], + "label": "isBinaryExpression", + "description": [ + "\nReturns true if the given node is a binary expression, i.e. an operator\nsurrounded by two operands:\n\n```\n1 + 1\ncolumn LIKE \"foo\"\nfoo = \"bar\"\n```\n" + ], + "signature": [ + "(node: unknown) => node is ", + "ESQLBinaryExpression" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isBinaryExpression.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [ + "Any ES|QL AST node." + ], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isColumn", + "type": "Function", + "tags": [], + "label": "isColumn", + "description": [], + "signature": [ + "(node: unknown) => node is ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + } + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isColumn.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isDoubleLiteral", + "type": "Function", + "tags": [], + "label": "isDoubleLiteral", + "description": [], + "signature": [ + "(node: unknown) => node is ", + "ESQLIntegerLiteral" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isDoubleLiteral.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isFunctionExpression", + "type": "Function", + "tags": [], + "label": "isFunctionExpression", + "description": [], + "signature": [ + "(node: unknown) => node is ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" + }, + "<", + "FunctionSubtype", + ", string>" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isFunctionExpression.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isIdentifier", + "type": "Function", + "tags": [], + "label": "isIdentifier", + "description": [], + "signature": [ + "(node: unknown) => node is ", + "ESQLIdentifier" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isIdentifier.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isIntegerLiteral", + "type": "Function", + "tags": [], + "label": "isIntegerLiteral", + "description": [], + "signature": [ + "(node: unknown) => node is ", + "ESQLIntegerLiteral" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isIntegerLiteral.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isLiteral", + "type": "Function", + "tags": [], + "label": "isLiteral", + "description": [], + "signature": [ + "(node: unknown) => node is ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + } + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isLiteral.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isParamLiteral", + "type": "Function", + "tags": [], + "label": "isParamLiteral", + "description": [], + "signature": [ + "(node: unknown) => node is ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLParamLiteral", + "text": "ESQLParamLiteral" + }, + "" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isParamLiteral.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isProperNode", + "type": "Function", + "tags": [], + "label": "isProperNode", + "description": [], + "signature": [ + "(node: unknown) => node is ", + "ESQLProperNode" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.isProperNode.$1", + "type": "Unknown", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "unknown" + ], + "path": "src/platform/packages/shared/kbn-esql-ast/src/ast/helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.parse", diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 9895a747714f9..305fd7b8a9d6d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 287 | 1 | 225 | 25 | +| 305 | 1 | 241 | 26 | ## Common diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index d786d21fbfea4..f774ae5beab8a 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.devdocs.json b/api_docs/kbn_esql_utils.devdocs.json index fff79b29ef847..97fea7b6fbde9 100644 --- a/api_docs/kbn_esql_utils.devdocs.json +++ b/api_docs/kbn_esql_utils.devdocs.json @@ -1093,7 +1093,15 @@ "section": "def-common.DataView", "text": "DataView" }, - ") => string" + ", query: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | undefined) => string" ], "path": "src/platform/packages/shared/kbn-esql-utils/src/utils/get_initial_esql_query.ts", "deprecated": false, @@ -1119,6 +1127,28 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-utils", + "id": "def-common.getInitialESQLQuery.$2", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | undefined" + ], + "path": "src/platform/packages/shared/kbn-esql-utils/src/utils/get_initial_esql_query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index d040a3d44a768..06fc8051765b3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 85 | 0 | 76 | 0 | +| 86 | 0 | 77 | 0 | ## Common diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 89ae6fb7fa913..e1f60442d56c3 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -3115,6 +3115,24 @@ "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-validation-autocomplete", + "id": "def-common.ESQLCallbacks.getJoinIndices", + "type": "Function", + "tags": [], + "label": "getJoinIndices", + "description": [], + "signature": [ + "(() => Promise<{ indices: ", + "JoinIndexAutocompleteItem", + "[]; }>) | undefined" + ], + "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false @@ -4187,6 +4205,20 @@ "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-validation-autocomplete", + "id": "def-common.ValidationErrors.invalidJoinIndex", + "type": "Object", + "tags": [], + "label": "invalidJoinIndex", + "description": [], + "signature": [ + "{ message: string; type: { identifier: string; }; }" + ], + "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/validation/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 9f3c5e92737d8..f4c9b4762dc90 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 205 | 0 | 193 | 12 | +| 207 | 0 | 195 | 13 | ## Common diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 06e9d4e464b1f..0d696f63976db 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: 2025-01-15 +date: 2025-01-20 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 fd923d7613a11..4af01680339bc 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: 2025-01-15 +date: 2025-01-20 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 962a64aed7722..16d238f91a131 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: 2025-01-15 +date: 2025-01-20 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 bd8224f966d24..8928dff4ddab5 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: 2025-01-15 +date: 2025-01-20 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 afe1b9dc9af9d..1ecadfdc5a140 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: 2025-01-15 +date: 2025-01-20 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 18628da1a85c8..d45b08c53a2ab 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.devdocs.json b/api_docs/kbn_ftr_common_functional_services.devdocs.json index d7fea06c3d9c2..3f9be53dbd010 100644 --- a/api_docs/kbn_ftr_common_functional_services.devdocs.json +++ b/api_docs/kbn_ftr_common_functional_services.devdocs.json @@ -1185,6 +1185,68 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.retryForSuccess", + "type": "Function", + "tags": [], + "label": "retryForSuccess", + "description": [], + "signature": [ + "(log: ", + { + "pluginId": "@kbn/tooling-log", + "scope": "common", + "docId": "kibKbnToolingLogPluginApi", + "section": "def-common.ToolingLog", + "text": "ToolingLog" + }, + ", options: Options) => Promise" + ], + "path": "packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.retryForSuccess.$1", + "type": "Object", + "tags": [], + "label": "log", + "description": [], + "signature": [ + { + "pluginId": "@kbn/tooling-log", + "scope": "common", + "docId": "kibKbnToolingLogPluginApi", + "section": "def-common.ToolingLog", + "text": "ToolingLog" + } + ], + "path": "packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.retryForSuccess.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "Options" + ], + "path": "packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ftr-common-functional-services", "id": "def-common.runSavedObjInfoSvc", diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 6609bf2063620..1ba586070b1bd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 111 | 2 | 86 | 1 | +| 114 | 2 | 89 | 1 | ## Common diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 5c1655a4a9bc9..7a9eccdc16d84 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: 2025-01-15 +date: 2025-01-20 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_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx index 4038ca7d85ade..d4f3b1e272653 100644 --- a/api_docs/kbn_gen_ai_functional_testing.mdx +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-gen-ai-functional-testing title: "@kbn/gen-ai-functional-testing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/gen-ai-functional-testing plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] --- import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 58ee71f31a686..179a15a319062 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: 2025-01-15 +date: 2025-01-20 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 87fb6a2c58e3a..0408a0656ac4e 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: 2025-01-15 +date: 2025-01-20 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 52d42474cab9a..dfb33236908c1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.devdocs.json b/api_docs/kbn_grid_layout.devdocs.json index ecb0af149f3d0..c4379365420f3 100644 --- a/api_docs/kbn_grid_layout.devdocs.json +++ b/api_docs/kbn_grid_layout.devdocs.json @@ -15,7 +15,7 @@ "GridLayoutProps", ") => React.JSX.Element" ], - "path": "packages/kbn-grid-layout/grid/grid_layout.tsx", + "path": "src/platform/packages/private/kbn-grid-layout/grid/grid_layout.tsx", "deprecated": false, "trackAdoption": false, "children": [ @@ -29,7 +29,7 @@ "signature": [ "GridLayoutProps" ], - "path": "packages/kbn-grid-layout/grid/grid_layout.tsx", + "path": "src/platform/packages/private/kbn-grid-layout/grid/grid_layout.tsx", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -64,7 +64,7 @@ }, ") => boolean" ], - "path": "packages/kbn-grid-layout/grid/utils/equality_checks.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/utils/equality_checks.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -84,7 +84,7 @@ "text": "GridLayoutData" } ], - "path": "packages/kbn-grid-layout/grid/utils/equality_checks.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/utils/equality_checks.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -105,7 +105,7 @@ "text": "GridLayoutData" } ], - "path": "packages/kbn-grid-layout/grid/utils/equality_checks.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/utils/equality_checks.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -134,7 +134,7 @@ " extends ", "GridRect" ], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -145,7 +145,7 @@ "tags": [], "label": "id", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false } @@ -159,7 +159,7 @@ "tags": [], "label": "GridRowData", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -170,7 +170,7 @@ "tags": [], "label": "title", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false }, @@ -181,7 +181,7 @@ "tags": [], "label": "isCollapsed", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false }, @@ -203,7 +203,7 @@ }, "; }" ], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false } @@ -217,7 +217,7 @@ "tags": [], "label": "GridSettings", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -228,7 +228,7 @@ "tags": [], "label": "gutterSize", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false }, @@ -239,7 +239,7 @@ "tags": [], "label": "rowHeight", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false }, @@ -250,7 +250,7 @@ "tags": [], "label": "columnCount", "description": [], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false } @@ -270,7 +270,7 @@ "signature": [ "\"VIEW\" | \"EDIT\"" ], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -292,7 +292,7 @@ }, "[]" ], - "path": "packages/kbn-grid-layout/grid/types.ts", + "path": "src/platform/packages/private/kbn-grid-layout/grid/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 048aef298deaa..1b7a3184ac949 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 78576b6e18293..5cdca1cb4741e 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: 2025-01-15 +date: 2025-01-20 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 58e5a3ee52a2f..240af3f7fcb1d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index ce892c8af5ac3..442d2a4047b1b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 01cad05fe3d74..db0cd0c218343 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index ae172ea6fa483..4359a9d6cf4e2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index c8890b33ce549..f26b34e69de7a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index c2e6c1280d6b8..b9502e9aa4a8d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 66a60b6544fed..e20da2f7a205d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 1e96135160d7e..2bd70f4e4eaca 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 089df68cc124d..55dc4f09880e6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_adapter.mdx b/api_docs/kbn_index_adapter.mdx index 7815b259f94ff..a37561c9ba77f 100644 --- a/api_docs/kbn_index_adapter.mdx +++ b/api_docs/kbn_index_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-adapter title: "@kbn/index-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-adapter plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-adapter'] --- import kbnIndexAdapterObj from './kbn_index_adapter.devdocs.json'; diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index 487f3a89a3cab..1e0cc5427e447 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.mdx +++ b/api_docs/kbn_index_lifecycle_management_common_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-lifecycle-management-common-shared title: "@kbn/index-lifecycle-management-common-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-lifecycle-management-common-shared plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-lifecycle-management-common-shared'] --- import kbnIndexLifecycleManagementCommonSharedObj from './kbn_index_lifecycle_management_common_shared.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index eee004fe03279..b0af49acbb3a1 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_common.devdocs.json b/api_docs/kbn_inference_common.devdocs.json index 687f3728f769c..7527566d08638 100644 --- a/api_docs/kbn_inference_common.devdocs.json +++ b/api_docs/kbn_inference_common.devdocs.json @@ -1579,6 +1579,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/inference-common", + "id": "def-common.OutputOptions.modelName", + "type": "string", + "tags": [], + "label": "modelName", + "description": [ + "\nThe model name identifier to use. Can be defined to use another model than the\ndefault one, when using connectors / providers exposing multiple models.\n\nDefaults to the default model as defined by the used connector." + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/platform/packages/shared/ai-infra/inference-common/src/output/api.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/inference-common", "id": "def-common.OutputOptions.functionCalling", @@ -2162,7 +2178,7 @@ "label": "options", "description": [], "signature": [ - "{ [P in \"temperature\" | \"abortSignal\" | \"system\" | \"stream\" | \"messages\" | Exclude]: ", + "{ [P in \"abortSignal\" | \"temperature\" | \"system\" | \"stream\" | \"messages\" | \"modelName\" | Exclude]: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -2257,7 +2273,7 @@ "label": "options", "description": [], "signature": [ - "{ id: TId; input: string; schema?: TOutputSchema | undefined; retry?: { onValidationError?: number | boolean | undefined; } | undefined; abortSignal?: AbortSignal | undefined; system?: string | undefined; stream?: TStream | undefined; previousMessages?: ", + "{ id: TId; abortSignal?: AbortSignal | undefined; input: string; schema?: TOutputSchema | undefined; retry?: { onValidationError?: number | boolean | undefined; } | undefined; system?: string | undefined; stream?: TStream | undefined; modelName?: string | undefined; previousMessages?: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -2364,7 +2380,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; temperature?: number | undefined; functionCalling?: ", + "[]; temperature?: number | undefined; modelName?: string | undefined; functionCalling?: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -2432,7 +2448,7 @@ "section": "def-common.Message", "text": "Message" }, - "[]; temperature?: number | undefined; functionCalling?: ", + "[]; temperature?: number | undefined; modelName?: string | undefined; functionCalling?: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -3455,7 +3471,7 @@ "\nOptions used to call the {@link BoundChatCompleteAPI}" ], "signature": [ - "{ [P in \"temperature\" | \"abortSignal\" | \"system\" | \"stream\" | \"messages\" | Exclude]: ", + "{ [P in \"abortSignal\" | \"temperature\" | \"system\" | \"stream\" | \"messages\" | \"modelName\" | Exclude]: ", { "pluginId": "@kbn/inference-common", "scope": "common", @@ -3480,7 +3496,7 @@ "\nOptions used to call the {@link BoundOutputAPI}" ], "signature": [ - "{ id: TId; input: string; schema?: TOutputSchema | undefined; retry?: { onValidationError?: number | boolean | undefined; } | undefined; abortSignal?: AbortSignal | undefined; system?: string | undefined; stream?: TStream | undefined; previousMessages?: ", + "{ id: TId; abortSignal?: AbortSignal | undefined; input: string; schema?: TOutputSchema | undefined; retry?: { onValidationError?: number | boolean | undefined; } | undefined; system?: string | undefined; stream?: TStream | undefined; modelName?: string | undefined; previousMessages?: ", { "pluginId": "@kbn/inference-common", "scope": "common", diff --git a/api_docs/kbn_inference_common.mdx b/api_docs/kbn_inference_common.mdx index e13b79c9aa686..1489482dd6d9f 100644 --- a/api_docs/kbn_inference_common.mdx +++ b/api_docs/kbn_inference_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-common title: "@kbn/inference-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-common plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 160 | 0 | 55 | 4 | +| 161 | 0 | 55 | 4 | ## Common diff --git a/api_docs/kbn_inference_endpoint_ui_common.mdx b/api_docs/kbn_inference_endpoint_ui_common.mdx index b8de384821437..40a554dc6eb90 100644 --- a/api_docs/kbn_inference_endpoint_ui_common.mdx +++ b/api_docs/kbn_inference_endpoint_ui_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-endpoint-ui-common title: "@kbn/inference-endpoint-ui-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-endpoint-ui-common plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-endpoint-ui-common'] --- import kbnInferenceEndpointUiCommonObj from './kbn_inference_endpoint_ui_common.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index b56ccdb7bf3d9..d91a8181a83cc 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: 2025-01-15 +date: 2025-01-20 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 e8129a49b8129..9a6f8e311033b 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: 2025-01-15 +date: 2025-01-20 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 be195ac588e4a..4c35146cbe333 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 7af9af5a728e8..b002aa253e78b 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 4164dacdd7683..1b6b4c5fc5bfb 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 5c4a59c1c18a9..08b5f06f1e366 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_item_buffer.mdx b/api_docs/kbn_item_buffer.mdx index 3fbd8a77784f1..d2f6a42b60ee4 100644 --- a/api_docs/kbn_item_buffer.mdx +++ b/api_docs/kbn_item_buffer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-item-buffer title: "@kbn/item-buffer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/item-buffer plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/item-buffer'] --- import kbnItemBufferObj from './kbn_item_buffer.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 4d1388158fbc1..bb136af6a35f1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 676eaf49fc190..bd4584e3cfed6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index cd639661d2191..7385be2124cb0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 8ad96e0a59272..ea15a50a0ddd7 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index ce3d1f7c6838d..0572d8c268d08 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index 0f0c018a794a7..29e234bd0c242 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index ba047d80a3897..e268348f497cd 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: 2025-01-15 +date: 2025-01-20 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 7d317b6708380..026e1a49f53a6 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: 2025-01-15 +date: 2025-01-20 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 4b6a40e9105bf..f0c823da56311 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 00256a3d8442f..c93c3facf21a5 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: 2025-01-15 +date: 2025-01-20 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 a6b32b997d9c3..f10ce1f8c1833 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: 2025-01-15 +date: 2025-01-20 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 0661a7935e4d2..a95264337f13b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index c46a6798c0ee4..d40dd9598d193 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: 2025-01-15 +date: 2025-01-20 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 90e0747e07231..6e0570aaf95d8 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: 2025-01-15 +date: 2025-01-20 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 f9dbabe7d52df..0893afd1762c8 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: 2025-01-15 +date: 2025-01-20 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 e36bf06a45690..a535115998b01 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: 2025-01-15 +date: 2025-01-20 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 b58679eddc5ee..e125791c28e92 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: 2025-01-15 +date: 2025-01-20 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 cb129322b2139..9c95ffe2f2f9b 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: 2025-01-15 +date: 2025-01-20 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 e60132d1f7eac..427f65d1521de 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: 2025-01-15 +date: 2025-01-20 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 b24b7d0e5a41b..26f740348fddd 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: 2025-01-15 +date: 2025-01-20 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 e0687bf6b3dbd..a20e3e7cdf578 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: 2025-01-15 +date: 2025-01-20 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 bdca10d706b6f..4ffa62cd500bc 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: 2025-01-15 +date: 2025-01-20 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 801100b0467e7..a78847da2b7fb 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: 2025-01-15 +date: 2025-01-20 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 4c062a5c4c312..74fd5d1719273 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_manifest.mdx b/api_docs/kbn_manifest.mdx index 0262fe3c5e813..edcf8f0cb264a 100644 --- a/api_docs/kbn_manifest.mdx +++ b/api_docs/kbn_manifest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-manifest title: "@kbn/manifest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/manifest plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/manifest'] --- import kbnManifestObj from './kbn_manifest.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 577cbc070984a..93f05da4580db 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: 2025-01-15 +date: 2025-01-20 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 c8c7640eb52cd..1d9e61048477c 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: 2025-01-15 +date: 2025-01-20 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 984ae6759b234..0c3345fd85356 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index ea13c7bd26d1f..0b4c5b5a782e9 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: 2025-01-15 +date: 2025-01-20 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 370009dd35d32..23941bcaff8b6 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: 2025-01-15 +date: 2025-01-20 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 dc757c6ea5a54..921d0c57e7092 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: 2025-01-15 +date: 2025-01-20 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 324a35014f1a4..3ebc150b575b9 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: 2025-01-15 +date: 2025-01-20 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 009a55908f3ff..6fd3ab259beb4 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: 2025-01-15 +date: 2025-01-20 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.devdocs.json b/api_docs/kbn_ml_data_grid.devdocs.json index 61e8ebbfb3f60..987514350cd99 100644 --- a/api_docs/kbn_ml_data_grid.devdocs.json +++ b/api_docs/kbn_ml_data_grid.devdocs.json @@ -497,6 +497,74 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/ml-data-grid", + "id": "def-common.getPopulatedFieldsFromKibanaDataView", + "type": "Function", + "tags": [], + "label": "getPopulatedFieldsFromKibanaDataView", + "description": [ + "\nRetrieves just the populated fields from a Kibana data view." + ], + "signature": [ + "(dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + ", populatedFields?: string[] | undefined) => string[]" + ], + "path": "x-pack/platform/packages/private/ml/data_grid/lib/common.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-data-grid", + "id": "def-common.getPopulatedFieldsFromKibanaDataView.$1", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [ + "- The Kibana data view." + ], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "x-pack/platform/packages/private/ml/data_grid/lib/common.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ml-data-grid", + "id": "def-common.getPopulatedFieldsFromKibanaDataView.$2", + "type": "Array", + "tags": [], + "label": "populatedFields", + "description": [ + "- The populated fields.\nreturns {string[]} - The array of populated fields from the data view." + ], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/platform/packages/private/ml/data_grid/lib/common.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ml-data-grid", "id": "def-common.getProcessedFields", diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index a2a35d4fc5e52..85eeb504fd2b3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.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 | |-------------------|-----------|------------------------|-----------------| -| 141 | 0 | 6 | 0 | +| 144 | 0 | 6 | 0 | ## Common diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index ce4785e67df13..ac5f70047029e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index baa0b9f30d99f..30b744fbe3fd6 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: 2025-01-15 +date: 2025-01-20 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 e80ac7e58ce51..3d01a2962a6ed 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index d1c2fcdd2cb8f..552cad011c63e 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 3277b24c82c2c..bd16ca87cd1e6 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: 2025-01-15 +date: 2025-01-20 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 07c63a4262441..a376716017ce3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index 56db0f5394fce..8fc97a9f00ed6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 7307919933ecf..211378b5c8cbf 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 3874ff63d3ef0..b65dba44bee9f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index 831dd94727ace..589e508830a0f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index 17c58828bbe47..1d0b05c89f96a 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 8547c4463fbbf..dab466ec6f42e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 19b399c5f115d..6f49c7e17b71b 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: 2025-01-15 +date: 2025-01-20 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 93224d6d46bf8..a118b909ee168 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: 2025-01-15 +date: 2025-01-20 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 3120c2b7045a3..07a7b96bd5a52 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: 2025-01-15 +date: 2025-01-20 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 b332cf1a80e87..7eb8ea28a8872 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 8a467d053f554..515d1563f2eda 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: 2025-01-15 +date: 2025-01-20 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 9d662df7f4465..a399ae294d8bc 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: 2025-01-15 +date: 2025-01-20 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 3c44ccf8b1b61..ee6b1f400d15f 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: 2025-01-15 +date: 2025-01-20 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 f3db4117236ce..adca61bce1172 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 6db0a952fdca0..b35eb8b7d08fe 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 7afdedee8a124..46bc0089b2718 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: 2025-01-15 +date: 2025-01-20 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.devdocs.json b/api_docs/kbn_monaco.devdocs.json index e021609d0fb51..6ff4a500f4b27 100644 --- a/api_docs/kbn_monaco.devdocs.json +++ b/api_docs/kbn_monaco.devdocs.json @@ -611,6 +611,24 @@ "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.ESQLCallbacks.getJoinIndices", + "type": "Function", + "tags": [], + "label": "getJoinIndices", + "description": [], + "signature": [ + "(() => Promise<{ indices: ", + "JoinIndexAutocompleteItem", + "[]; }>) | undefined" + ], + "path": "src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index d0b39658dd518..ade1df8abfda1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 134 | 0 | 134 | 3 | +| 135 | 0 | 135 | 3 | ## Common diff --git a/api_docs/kbn_object_utils.mdx b/api_docs/kbn_object_utils.mdx index 9d45d4f188c37..442021c880e08 100644 --- a/api_docs/kbn_object_utils.mdx +++ b/api_docs/kbn_object_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-utils title: "@kbn/object-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-utils plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-utils'] --- import kbnObjectUtilsObj from './kbn_object_utils.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index e28e3b8cf207e..46f3fffa99595 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 18ad2b378b26a..8610e242fbef8 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 771b19affbd61..06338ff86eae0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 4ff2e05bb0f36..19d8c77c10dbc 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 9b9ee6e5e2cd4..8fc22d254f80d 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: 2025-01-15 +date: 2025-01-20 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 8b51e2fc168ce..cb49469adf0ea 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: 2025-01-15 +date: 2025-01-20 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_observability_logs_overview.mdx b/api_docs/kbn_observability_logs_overview.mdx index 53cb6b515abac..88da4aed301b4 100644 --- a/api_docs/kbn_observability_logs_overview.mdx +++ b/api_docs/kbn_observability_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-logs-overview title: "@kbn/observability-logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-logs-overview plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-logs-overview'] --- import kbnObservabilityLogsOverviewObj from './kbn_observability_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index 4338ea57e80e6..355250f235512 100644 --- a/api_docs/kbn_observability_synthetics_test_data.mdx +++ b/api_docs/kbn_observability_synthetics_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-synthetics-test-data title: "@kbn/observability-synthetics-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-synthetics-test-data plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-synthetics-test-data'] --- import kbnObservabilitySyntheticsTestDataObj from './kbn_observability_synthetics_test_data.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index ff5935c3312f3..f4773135466ca 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: 2025-01-15 +date: 2025-01-20 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 1713e7c027fea..0b839bf23f6f0 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: 2025-01-15 +date: 2025-01-20 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 c48e6afaf6ffd..13cf36a3cbfa0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 31233915049b5..fc5979113781d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 2b2ce1c73f7f1..e34bea0aaad6b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_palettes.mdx b/api_docs/kbn_palettes.mdx index e23bf5f8ded23..3a2143a231152 100644 --- a/api_docs/kbn_palettes.mdx +++ b/api_docs/kbn_palettes.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-palettes title: "@kbn/palettes" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/palettes plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/palettes'] --- import kbnPalettesObj from './kbn_palettes.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index ba2303f9c53f2..5f48e8e3af9e5 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: 2025-01-15 +date: 2025-01-20 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 56c8853388cbe..a4af9240f300d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index abfe1de0349d0..a7604a4c38fe6 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: 2025-01-15 +date: 2025-01-20 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 a99b1152bc4a1..5c6ec8a7cb4b3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 0cc5eb14aeeda..928596cf844e4 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: 2025-01-15 +date: 2025-01-20 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 702e27f7a62fb..f5914b3e25583 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: 2025-01-15 +date: 2025-01-20 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 3c1c7361bc834..62b0b4136805f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_product_doc_artifact_builder.mdx b/api_docs/kbn_product_doc_artifact_builder.mdx index 402fa279f88d6..90d5b99bccac1 100644 --- a/api_docs/kbn_product_doc_artifact_builder.mdx +++ b/api_docs/kbn_product_doc_artifact_builder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-artifact-builder title: "@kbn/product-doc-artifact-builder" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-artifact-builder plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-artifact-builder'] --- import kbnProductDocArtifactBuilderObj from './kbn_product_doc_artifact_builder.devdocs.json'; diff --git a/api_docs/kbn_product_doc_common.mdx b/api_docs/kbn_product_doc_common.mdx index ed67728d91770..94043b7056ffc 100644 --- a/api_docs/kbn_product_doc_common.mdx +++ b/api_docs/kbn_product_doc_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-common title: "@kbn/product-doc-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-common plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-common'] --- import kbnProductDocCommonObj from './kbn_product_doc_common.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 9402b18b3d520..e26c3784de23c 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: 2025-01-15 +date: 2025-01-20 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 a40cef3b843af..56c30cad26fec 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.devdocs.json b/api_docs/kbn_react_field.devdocs.json index 3e95b8ee4b828..abb55efb0d304 100644 --- a/api_docs/kbn_react_field.devdocs.json +++ b/api_docs/kbn_react_field.devdocs.json @@ -363,10 +363,13 @@ { "parentPluginId": "@kbn/react-field", "id": "def-common.FieldIconProps.type", - "type": "string", + "type": "CompoundType", "tags": [], "label": "type", "description": [], + "signature": [ + "\"string\" | \"number\" | \"boolean\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"binary\" | \"keyword\" | \"text\" | \"date\" | \"version\" | \"murmur3\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"half_float\" | \"scaled_float\" | \"double\" | \"date_range\" | \"ip_range\" | \"rank_feature\" | \"rank_features\" | \"flattened\" | \"shape\" | \"histogram\" | \"dense_vector\" | \"semantic_text\" | \"sparse_vector\" | \"match_only_text\" | \"conflict\" | \"point\" | \"unsigned_long\" | \"_source\" | (string & {}) | \"gauge\" | \"counter\" | \"number_range\"" + ], "path": "src/platform/packages/shared/kbn-react-field/src/field_icon/field_icon.tsx", "deprecated": false, "trackAdoption": false diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index f1d385029a68e..15468394ddaa5 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: 2025-01-15 +date: 2025-01-20 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 f487bffa10ed9..87eb94420707e 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: 2025-01-15 +date: 2025-01-20 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 dbe08969a42be..ec91e4d064b2f 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: 2025-01-15 +date: 2025-01-20 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 18d186ecc0667..523123e5fdb93 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: 2025-01-15 +date: 2025-01-20 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 c7a3465fbeb1d..278405deebcd7 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: 2025-01-15 +date: 2025-01-20 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 04b317c045006..d9a509df08faf 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: 2025-01-15 +date: 2025-01-20 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 3649a3bf12a03..cf4c7e915770f 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: 2025-01-15 +date: 2025-01-20 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 803904caa2284..b62dfad56e543 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_react_mute_legacy_root_warning.mdx b/api_docs/kbn_react_mute_legacy_root_warning.mdx index 3575fa870b0bc..0c31222f9020e 100644 --- a/api_docs/kbn_react_mute_legacy_root_warning.mdx +++ b/api_docs/kbn_react_mute_legacy_root_warning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-mute-legacy-root-warning title: "@kbn/react-mute-legacy-root-warning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-mute-legacy-root-warning plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-mute-legacy-root-warning'] --- import kbnReactMuteLegacyRootWarningObj from './kbn_react_mute_legacy_root_warning.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index a8022012afd36..e5bdf3bc1140b 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_relocate.mdx b/api_docs/kbn_relocate.mdx index fd21011b68701..bfa66d3e3437c 100644 --- a/api_docs/kbn_relocate.mdx +++ b/api_docs/kbn_relocate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-relocate title: "@kbn/relocate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/relocate plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/relocate'] --- import kbnRelocateObj from './kbn_relocate.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 48d7c31e00089..56669bee95248 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index b703aa3cacd7d..c2ebb3fbe3a60 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index ed39572ebbdc1..690397c996779 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index faf96b09b5afa..360b772fd5636 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 99495b8324aaf..49cb8fcb6987c 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: 2025-01-15 +date: 2025-01-20 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 44b3ee09910b6..da47a3611434a 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: 2025-01-15 +date: 2025-01-20 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 c1504219d7f9d..2f1b9f073f527 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: 2025-01-15 +date: 2025-01-20 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 3492f282ba6ac..21a99bd19398a 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: 2025-01-15 +date: 2025-01-20 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 26f52c6114ed5..d3ae1ec26a5c7 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: 2025-01-15 +date: 2025-01-20 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 cf0373120e960..86a4e7bd9f67e 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: 2025-01-15 +date: 2025-01-20 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 f650e1cee5138..5ec6e96e630a0 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: 2025-01-15 +date: 2025-01-20 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 300fbcaee5749..76bb25dbc919c 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: 2025-01-15 +date: 2025-01-20 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 3d17c5314141d..c9a1f2f9b5bf1 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: 2025-01-15 +date: 2025-01-20 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 69e6f50f19328..79b004bcb33a5 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: 2025-01-15 +date: 2025-01-20 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 c0e7a8f6f2ec0..b58f6f1f52af0 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: 2025-01-15 +date: 2025-01-20 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 abb2a9db78c01..4019d773a4449 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 8a8eb5d19bc79..0430ae5840ce0 100644 --- a/api_docs/kbn_response_ops_rule_form.mdx +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-form title: "@kbn/response-ops-rule-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-form plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] --- import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index d719906f0c347..45a2e537a29a6 100644 --- a/api_docs/kbn_response_ops_rule_params.mdx +++ b/api_docs/kbn_response_ops_rule_params.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-params title: "@kbn/response-ops-rule-params" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-params plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-params'] --- import kbnResponseOpsRuleParamsObj from './kbn_response_ops_rule_params.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 5b027bdc10946..07d7060b077db 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 614ed8297fd0d..fb547dde62213 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 96f06871040c0..6801a40f201fb 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: 2025-01-15 +date: 2025-01-20 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 6c09d7ad05198..b5af511207437 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: 2025-01-15 +date: 2025-01-20 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 4f62ca814b25c..74fc75db368f3 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: 2025-01-15 +date: 2025-01-20 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 a94219d69e911..682187aeb0070 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 1355a8c8b717b..725bdfd376b8d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_saved_search_component.mdx b/api_docs/kbn_saved_search_component.mdx index 9adcf81c0e387..5d2b73a51eca6 100644 --- a/api_docs/kbn_saved_search_component.mdx +++ b/api_docs/kbn_saved_search_component.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-search-component title: "@kbn/saved-search-component" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-search-component plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-search-component'] --- import kbnSavedSearchComponentObj from './kbn_saved_search_component.devdocs.json'; diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index 91b92c8d47153..7753fc130cdda 100644 --- a/api_docs/kbn_scout.mdx +++ b/api_docs/kbn_scout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout title: "@kbn/scout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_scout_info.mdx b/api_docs/kbn_scout_info.mdx index 676a924f427a9..c253f606a8cd6 100644 --- a/api_docs/kbn_scout_info.mdx +++ b/api_docs/kbn_scout_info.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-info title: "@kbn/scout-info" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-info plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-info'] --- import kbnScoutInfoObj from './kbn_scout_info.devdocs.json'; diff --git a/api_docs/kbn_scout_reporting.devdocs.json b/api_docs/kbn_scout_reporting.devdocs.json index 38f8bc7834e02..c9f987b8a9907 100644 --- a/api_docs/kbn_scout_reporting.devdocs.json +++ b/api_docs/kbn_scout_reporting.devdocs.json @@ -20,62 +20,31 @@ "classes": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport", + "id": "def-common.ScoutEventsReport", "type": "Class", "tags": [], - "label": "ScoutReport", + "label": "ScoutEventsReport", "description": [ "\n" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "signature": [ + { + "pluginId": "@kbn/scout-reporting", + "scope": "common", + "docId": "kibKbnScoutReportingPluginApi", + "section": "def-common.ScoutEventsReport", + "text": "ScoutEventsReport" + }, + " extends ", + "ScoutReport" + ], + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.log", - "type": "Object", - "tags": [], - "label": "log", - "description": [], - "signature": [ - { - "pluginId": "@kbn/tooling-log", - "scope": "common", - "docId": "kibKbnToolingLogPluginApi", - "section": "def-common.ToolingLog", - "text": "ToolingLog" - } - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.workDir", - "type": "string", - "tags": [], - "label": "workDir", - "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.concluded", - "type": "boolean", - "tags": [], - "label": "concluded", - "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.Unnamed", + "id": "def-common.ScoutEventsReport.Unnamed", "type": "Function", "tags": [], "label": "Constructor", @@ -83,13 +52,13 @@ "signature": [ "any" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.Unnamed.$1", + "id": "def-common.ScoutEventsReport.Unnamed.$1", "type": "Object", "tags": [], "label": "log", @@ -104,7 +73,7 @@ }, " | undefined" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -114,18 +83,18 @@ }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.eventLogPath", + "id": "def-common.ScoutEventsReport.eventLogPath", "type": "string", "tags": [], "label": "eventLogPath", "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.logEvent", + "id": "def-common.ScoutEventsReport.logEvent", "type": "Function", "tags": [], "label": "logEvent", @@ -134,22 +103,16 @@ ], "signature": [ "(event: ", - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReportEvent", - "text": "ScoutReportEvent" - }, + "ScoutReportEvent", ") => void" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.logEvent.$1", + "id": "def-common.ScoutEventsReport.logEvent.$1", "type": "Object", "tags": [], "label": "event", @@ -157,15 +120,9 @@ "- Event to record" ], "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReportEvent", - "text": "ScoutReportEvent" - } + "ScoutReportEvent" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -175,7 +132,7 @@ }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.save", + "id": "def-common.ScoutEventsReport.save", "type": "Function", "tags": [], "label": "save", @@ -185,13 +142,13 @@ "signature": [ "(destination: string) => void" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.save.$1", + "id": "def-common.ScoutEventsReport.save.$1", "type": "string", "tags": [], "label": "destination", @@ -201,49 +158,42 @@ "signature": [ "string" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/report.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], "returnComment": [] - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReport.conclude", - "type": "Function", - "tags": [], - "label": "conclude", - "description": [ - "\nCall this when you're done adding information to this report.\n\n⚠️**This will delete all the contents of the report's working directory**" - ], - "signature": [ - "() => void" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] } ], "initialIsOpen": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream", + "id": "def-common.ScoutFailureReport", "type": "Class", "tags": [], - "label": "ScoutReportDataStream", + "label": "ScoutFailureReport", "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "signature": [ + { + "pluginId": "@kbn/scout-reporting", + "scope": "common", + "docId": "kibKbnScoutReportingPluginApi", + "section": "def-common.ScoutFailureReport", + "text": "ScoutFailureReport" + }, + " extends ", + "ScoutReport" + ], + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.Unnamed", + "id": "def-common.ScoutFailureReport.Unnamed", "type": "Function", "tags": [], "label": "Constructor", @@ -251,28 +201,13 @@ "signature": [ "any" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.Unnamed.$1", - "type": "Object", - "tags": [], - "label": "es", - "description": [], - "signature": [ - "default" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.Unnamed.$2", + "id": "def-common.ScoutFailureReport.Unnamed.$1", "type": "Object", "tags": [], "label": "log", @@ -287,7 +222,7 @@ }, " | undefined" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -297,107 +232,58 @@ }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.exists", - "type": "Function", - "tags": [], - "label": "exists", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.initialize", - "type": "Function", - "tags": [], - "label": "initialize", - "description": [], - "signature": [ - "() => Promise" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.setupComponentTemplates", - "type": "Function", + "id": "def-common.ScoutFailureReport.testFailuresPath", + "type": "string", "tags": [], - "label": "setupComponentTemplates", + "label": "testFailuresPath", "description": [], - "signature": [ - "() => Promise" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.setupIndexTemplate", + "id": "def-common.ScoutFailureReport.logEvent", "type": "Function", "tags": [], - "label": "setupIndexTemplate", - "description": [], - "signature": [ - "() => Promise" + "label": "logEvent", + "description": [ + "\nLogs a failure to be processed by this reporter\n" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.addEvent", - "type": "Function", - "tags": [], - "label": "addEvent", - "description": [], "signature": [ - "(event: ", + "(failure: ", { "pluginId": "@kbn/scout-reporting", "scope": "common", "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReportEvent", - "text": "ScoutReportEvent" + "section": "def-common.TestFailure", + "text": "TestFailure" }, - ") => Promise" + ") => void" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.addEvent.$1", + "id": "def-common.ScoutFailureReport.logEvent.$1", "type": "Object", "tags": [], - "label": "event", - "description": [], + "label": "failure", + "description": [ + "- test failure to record" + ], "signature": [ { "pluginId": "@kbn/scout-reporting", "scope": "common", "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReportEvent", - "text": "ScoutReportEvent" + "section": "def-common.TestFailure", + "text": "TestFailure" } ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -407,29 +293,33 @@ }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.addEventsFromFile", + "id": "def-common.ScoutFailureReport.save", "type": "Function", "tags": [], - "label": "addEventsFromFile", - "description": [], + "label": "save", + "description": [ + "\nSave the report to a non-ephemeral location\n" + ], "signature": [ - "(eventLogPath: string) => Promise" + "(destination: string) => void" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportDataStream.addEventsFromFile.$1", + "id": "def-common.ScoutFailureReport.save.$1", "type": "string", "tags": [], - "label": "eventLogPath", - "description": [], + "label": "destination", + "description": [ + "- Full path to the save location. Must not exist." + ], "signature": [ "string" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -439,31 +329,6 @@ } ], "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportError", - "type": "Class", - "tags": [], - "label": "ScoutReportError", - "description": [ - "\nGeneric error raised by a Scout report" - ], - "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReportError", - "text": "ScoutReportError" - }, - " extends Error" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "initialIsOpen": false } ], "functions": [ @@ -477,7 +342,7 @@ "signature": [ "() => string" ], - "path": "packages/kbn-scout-reporting/src/reporting/index.ts", + "path": "packages/kbn-scout-reporting/src/helpers/test_id_generator.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -494,7 +359,7 @@ "signature": [ "(title: string) => string" ], - "path": "packages/kbn-scout-reporting/src/reporting/index.ts", + "path": "packages/kbn-scout-reporting/src/helpers/test_id_generator.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -508,7 +373,7 @@ "signature": [ "string" ], - "path": "packages/kbn-scout-reporting/src/reporting/index.ts", + "path": "packages/kbn-scout-reporting/src/helpers/test_id_generator.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -519,10 +384,10 @@ }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.scoutPlaywrightReporter", + "id": "def-common.scoutFailedTestsReporter", "type": "Function", "tags": [], - "label": "scoutPlaywrightReporter", + "label": "scoutFailedTestsReporter", "description": [], "signature": [ "(options?: ", @@ -536,7 +401,7 @@ "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.scoutPlaywrightReporter.$1", + "id": "def-common.scoutFailedTestsReporter.$1", "type": "Object", "tags": [], "label": "options", @@ -553,561 +418,201 @@ ], "returnComment": [], "initialIsOpen": false - } - ], - "interfaces": [ - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutFileInfo", - "type": "Interface", - "tags": [], - "label": "ScoutFileInfo", - "description": [ - "\nScout file info" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutFileInfo.path", - "type": "string", - "tags": [], - "label": "path", - "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutFileInfo.owner", - "type": "CompoundType", - "tags": [], - "label": "owner", - "description": [], - "signature": [ - "string | string[]" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReporterInfo", - "type": "Interface", - "tags": [], - "label": "ScoutReporterInfo", - "description": [ - "\nScout reporter info" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReporterInfo.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReporterInfo.type", - "type": "CompoundType", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "\"jest\" | \"playwright\" | \"ftr\"" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent", - "type": "Interface", + "id": "def-common.scoutPlaywrightReporter", + "type": "Function", "tags": [], - "label": "ScoutReportEvent", - "description": [ - "\nDocument that records an event to be logged by the Scout reporter" + "label": "scoutPlaywrightReporter", + "description": [], + "signature": [ + "(options?: ", + "ScoutPlaywrightReporterOptions", + " | undefined) => ", + "ReporterDescription" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/index.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.timestamp", - "type": "Object", - "tags": [], - "label": "'@timestamp'", - "description": [], - "signature": [ - "Date | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.buildkite", - "type": "Object", - "tags": [], - "label": "buildkite", - "description": [], - "signature": [ - "BuildkiteMetadata", - " | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.host", - "type": "Object", - "tags": [], - "label": "host", - "description": [], - "signature": [ - "HostMetadata", - " | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.event", - "type": "Object", - "tags": [], - "label": "event", - "description": [], - "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReportEventInfo", - "text": "ScoutReportEventInfo" - } - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.file", - "type": "Object", - "tags": [], - "label": "file", - "description": [], - "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutFileInfo", - "text": "ScoutFileInfo" - }, - " | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.labels", - "type": "Object", - "tags": [], - "label": "labels", - "description": [], - "signature": [ - "{ [id: string]: string; } | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.reporter", - "type": "Object", - "tags": [], - "label": "reporter", - "description": [], - "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReporterInfo", - "text": "ScoutReporterInfo" - } - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.test_run", - "type": "Object", - "tags": [], - "label": "test_run", - "description": [], - "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutTestRunInfo", - "text": "ScoutTestRunInfo" - } - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.suite", - "type": "Object", - "tags": [], - "label": "suite", - "description": [], - "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutSuiteInfo", - "text": "ScoutSuiteInfo" - }, - " | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEvent.test", + "id": "def-common.scoutPlaywrightReporter.$1", "type": "Object", "tags": [], - "label": "test", + "label": "options", "description": [], "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutTestInfo", - "text": "ScoutTestInfo" - }, + "ScoutPlaywrightReporterOptions", " | undefined" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/index.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": false } ], + "returnComment": [], "initialIsOpen": false - }, + } + ], + "interfaces": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEventInfo", + "id": "def-common.TestFailure", "type": "Interface", "tags": [], - "label": "ScoutReportEventInfo", - "description": [ - "\nScout report event info" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "label": "TestFailure", + "description": [], + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEventInfo.action", - "type": "Enum", + "id": "def-common.TestFailure.id", + "type": "string", "tags": [], - "label": "action", + "label": "id", "description": [], - "signature": [ - { - "pluginId": "@kbn/scout-reporting", - "scope": "common", - "docId": "kibKbnScoutReportingPluginApi", - "section": "def-common.ScoutReportEventAction", - "text": "ScoutReportEventAction" - } - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEventInfo.outcome", - "type": "CompoundType", + "id": "def-common.TestFailure.suite", + "type": "string", "tags": [], - "label": "outcome", + "label": "suite", "description": [], - "signature": [ - "\"unknown\" | \"success\" | \"failure\" | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutReportEventInfo.error", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "{ message?: string | undefined; id?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; type?: string | undefined; } | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutSuiteInfo", - "type": "Interface", - "tags": [], - "label": "ScoutSuiteInfo", - "description": [ - "\nScout suite info" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutSuiteInfo.title", + "id": "def-common.TestFailure.title", "type": "string", "tags": [], "label": "title", "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutSuiteInfo.type", + "id": "def-common.TestFailure.target", "type": "string", "tags": [], - "label": "type", + "label": "target", "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo", - "type": "Interface", - "tags": [], - "label": "ScoutTestInfo", - "description": [ - "\nScout test info" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.id", + "id": "def-common.TestFailure.command", "type": "string", "tags": [], - "label": "id", + "label": "command", "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.title", + "id": "def-common.TestFailure.location", "type": "string", "tags": [], - "label": "title", + "label": "location", "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.tags", + "id": "def-common.TestFailure.owner", "type": "Array", "tags": [], - "label": "tags", + "label": "owner", "description": [], "signature": [ "string[]" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.annotations", - "type": "Array", - "tags": [], - "label": "annotations", - "description": [], - "signature": [ - "{ type: string; description?: string | undefined; }[] | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.expected_status", - "type": "string", + "id": "def-common.TestFailure.plugin", + "type": "Object", "tags": [], - "label": "expected_status", + "label": "plugin", "description": [], "signature": [ - "string | undefined" + "{ id: string; visibility: string; group: string; } | undefined" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.duration", + "id": "def-common.TestFailure.duration", "type": "number", "tags": [], "label": "duration", "description": [], - "signature": [ - "number | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.status", - "type": "string", - "tags": [], - "label": "status", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestInfo.step", + "id": "def-common.TestFailure.error", "type": "Object", "tags": [], - "label": "step", + "label": "error", "description": [], "signature": [ - "{ title: string; category?: string | undefined; duration?: number | undefined; } | undefined" + "{ message?: string | undefined; stack_trace?: string | undefined; }" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestRunInfo", - "type": "Interface", - "tags": [], - "label": "ScoutTestRunInfo", - "description": [ - "\nScout test run info" - ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestRunInfo.id", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestRunInfo.status", + "id": "def-common.TestFailure.stdout", "type": "string", "tags": [], - "label": "status", + "label": "stdout", "description": [], "signature": [ "string | undefined" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/scout-reporting", - "id": "def-common.ScoutTestRunInfo.duration", - "type": "number", + "id": "def-common.TestFailure.attachments", + "type": "Array", "tags": [], - "label": "duration", + "label": "attachments", "description": [], "signature": [ - "number | undefined" + "{ name: string; path?: string | undefined; contentType: string; }[]" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts", "deprecated": false, "trackAdoption": false } @@ -1125,7 +630,7 @@ "description": [ "\nScout reporter event type" ], - "path": "packages/kbn-scout-reporting/src/reporting/report/event.ts", + "path": "packages/kbn-scout-reporting/src/reporting/report/events/event.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_scout_reporting.mdx b/api_docs/kbn_scout_reporting.mdx index 4cb2fb3e7f0ce..a90f546afe599 100644 --- a/api_docs/kbn_scout_reporting.mdx +++ b/api_docs/kbn_scout_reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-reporting title: "@kbn/scout-reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-reporting plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-reporting'] --- import kbnScoutReportingObj from './kbn_scout_reporting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-qa](/~https://github.com/orgs/elastic/teams/appex-qa) for | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 68 | 0 | 53 | 3 | +| 37 | 0 | 27 | 3 | ## Common diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 849b4a66a7a22..089216bdb30f0 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_components.mdx b/api_docs/kbn_search_api_keys_components.mdx index 1fa3426525f17..247522c97542c 100644 --- a/api_docs/kbn_search_api_keys_components.mdx +++ b/api_docs/kbn_search_api_keys_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-components title: "@kbn/search-api-keys-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-components plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-components'] --- import kbnSearchApiKeysComponentsObj from './kbn_search_api_keys_components.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_server.mdx b/api_docs/kbn_search_api_keys_server.mdx index 4a176c536915d..a1b2a58b07a1e 100644 --- a/api_docs/kbn_search_api_keys_server.mdx +++ b/api_docs/kbn_search_api_keys_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-server title: "@kbn/search-api-keys-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-server plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-server'] --- import kbnSearchApiKeysServerObj from './kbn_search_api_keys_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 0282f83ecfdb0..abca47eccc603 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: 2025-01-15 +date: 2025-01-20 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.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index a04a1f458bd24..58f3cc4f18a4d 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -893,7 +893,7 @@ "signature": [ "(client: ", "ElasticsearchClient", - ", indexNames?: string[] | undefined, fetchOnlyCrawlers?: boolean | undefined, searchQuery?: string | undefined) => Promise<", + ", indexNames?: string[] | undefined, fetchOnlyCrawlers?: boolean | undefined, searchQuery?: string | undefined, includeDeleted?: boolean | undefined) => Promise<", { "pluginId": "@kbn/search-connectors", "scope": "common", @@ -966,6 +966,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.fetchConnectors.$5", + "type": "CompoundType", + "tags": [], + "label": "includeDeleted", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/platform/packages/shared/kbn-search-connectors/lib/fetch_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], @@ -3051,6 +3066,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.Connector.deleted", + "type": "CompoundType", + "tags": [], + "label": "deleted", + "description": [], + "signature": [ + "boolean | null" + ], + "path": "src/platform/packages/shared/kbn-search-connectors/types/connectors.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/search-connectors", "id": "def-common.Connector.language", @@ -6587,7 +6616,7 @@ "section": "def-common.ConnectorConfiguration", "text": "ConnectorConfiguration" }, - "; index_name: string | null; api_key_id: string | null; api_key_secret_id: string | null; custom_scheduling: ", + "; index_name: string | null; deleted: boolean | null; api_key_id: string | null; api_key_secret_id: string | null; custom_scheduling: ", { "pluginId": "@kbn/search-connectors", "scope": "common", diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 877255de50c3d..5be033f5e0a9b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.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 | |-------------------|-----------|------------------------|-----------------| -| 3954 | 0 | 3954 | 0 | +| 3956 | 0 | 3956 | 0 | ## Common diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index b5f75f772be06..49cca5cedf42a 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: 2025-01-15 +date: 2025-01-20 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 85528034cf781..5531c8535d43f 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: 2025-01-15 +date: 2025-01-20 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 300ac10ef2e23..8626775e5ce8d 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: 2025-01-15 +date: 2025-01-20 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_shared_ui.mdx b/api_docs/kbn_search_shared_ui.mdx index a91b9bb051e20..b2fa536e19340 100644 --- a/api_docs/kbn_search_shared_ui.mdx +++ b/api_docs/kbn_search_shared_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-shared-ui title: "@kbn/search-shared-ui" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-shared-ui plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-shared-ui'] --- import kbnSearchSharedUiObj from './kbn_search_shared_ui.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 6cc8cefe8e2b2..a3ed26cfb103b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index b0134b605c34a..33b345e364134 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 80399117ed525..6b2e4422700aa 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core_common.mdx b/api_docs/kbn_security_authorization_core_common.mdx index 35fdf9a88287a..9053eac7207b7 100644 --- a/api_docs/kbn_security_authorization_core_common.mdx +++ b/api_docs/kbn_security_authorization_core_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core-common title: "@kbn/security-authorization-core-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core-common plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core-common'] --- import kbnSecurityAuthorizationCoreCommonObj from './kbn_security_authorization_core_common.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index ea22a0b97a5e0..f196e2524eb46 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index febe08be61834..544baf97be164 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: 2025-01-15 +date: 2025-01-20 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 28b2086d65f72..82cc546b74227 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 7cd334e4a35c2..ece4e1c54e8c6 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: 2025-01-15 +date: 2025-01-20 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 e043568cdf693..92fdc462cdd57 100644 --- a/api_docs/kbn_security_plugin_types_server.devdocs.json +++ b/api_docs/kbn_security_plugin_types_server.devdocs.json @@ -4403,11 +4403,11 @@ }, { "plugin": "fleet", - "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts" + "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts" }, { "plugin": "fleet", - "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts" + "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts" }, { "plugin": "fleet", diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index df8828f6cdefd..583c1c054e479 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 082879a13e54c..0206b599f5dab 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 1a690c631c8ad..187bd7c1a7b35 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.devdocs.json b/api_docs/kbn_security_solution_features.devdocs.json index 5fbfcd72090a6..3d33ad5de26f0 100644 --- a/api_docs/kbn_security_solution_features.devdocs.json +++ b/api_docs/kbn_security_solution_features.devdocs.json @@ -61,7 +61,7 @@ "AlertingKibanaPrivilege", " | undefined; cases?: readonly string[] | undefined; hidden?: boolean | undefined; description?: string | undefined; category: ", "AppCategory", - "; management?: { [sectionId: string]: readonly string[]; } | undefined; app: readonly string[]; readonly deprecated?: Readonly<{ notice: string; }> | undefined; privileges: { all: ", + "; management?: { [sectionId: string]: readonly string[]; } | undefined; app: readonly string[]; readonly deprecated?: Readonly<{ notice: string; replacedBy?: readonly string[] | undefined; }> | undefined; privileges: { all: ", { "pluginId": "features", "scope": "common", @@ -170,7 +170,7 @@ "AlertingKibanaPrivilege", " | undefined; cases?: readonly string[] | undefined; hidden?: boolean | undefined; description?: string | undefined; category: ", "AppCategory", - "; management?: { [sectionId: string]: readonly string[]; } | undefined; app: readonly string[]; readonly deprecated?: Readonly<{ notice: string; }> | undefined; privileges: { all: ", + "; management?: { [sectionId: string]: readonly string[]; } | undefined; app: readonly string[]; readonly deprecated?: Readonly<{ notice: string; replacedBy?: readonly string[] | undefined; }> | undefined; privileges: { all: ", { "pluginId": "features", "scope": "common", diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index c4766901ad3dd..73b4e9545fba4 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: 2025-01-15 +date: 2025-01-20 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 beb04c8820451..7fd3bc014187b 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: 2025-01-15 +date: 2025-01-20 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 984d8d6e03e04..fc9f9d537a9b3 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: 2025-01-15 +date: 2025-01-20 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 b7ff3e42a7376..f5ad97da54831 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index ad42edc9a1961..b8c1ed17c3b13 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index bc4133f9cec9a..46f0d709dfa43 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: 2025-01-15 +date: 2025-01-20 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 998a7468bc9d1..188eb9c975ade 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: 2025-01-15 +date: 2025-01-20 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 aa91d4ae91b48..7cf99a8030709 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 71345ca9468d0..ee567c0e48363 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 6025583ddfb44..e86c4a19aec3d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index bac81f8549f1a..0d7cc8f053fcb 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 0b99ffef2a2a5..224077e3150c7 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index d576ee5dfbb53..87589ed1f787e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index b980e30c68a01..88cd9283a8d2f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 556a85a28bfb3..0b6d1c85fdca1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 1d85ebef24172..013ba7924d835 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index b88305e3510d0..bbc4280a43d30 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 3dcdb1565b9b2..7b2003b520a4e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 30bee6c0a4ebc..268dd779dfaa0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 86e99c58330c9..e45fbf2ba3b6c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 81a898a4e02ca..95bbe1dc83b86 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 19d382ded4e63..343bccd96a90d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index a617a559be28b..d875ba065897e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index 634b4ccf0f430..2384a8f2e913d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index bb26785649aed..fa33a09ffe067 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 7fdaf0f60825d..d625f4d9da4e5 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 4ba1f50c26dc2..6222a358f6ca6 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: 2025-01-15 +date: 2025-01-20 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 1275c995904c0..ebf2286510318 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: 2025-01-15 +date: 2025-01-20 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 a511f94004d8e..9d425ac85b07e 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: 2025-01-15 +date: 2025-01-20 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 c049182eccea5..d28d81e1320db 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: 2025-01-15 +date: 2025-01-20 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 21f0c4d8fa335..5ebb38b6694e0 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: 2025-01-15 +date: 2025-01-20 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 53fd29a667f39..147448715fef1 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: 2025-01-15 +date: 2025-01-20 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 9b60385693cd5..36f090151f472 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 4adcb84d9a706..36f281da0de6d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index fe2931587d338..ab30e63ea9057 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 7021b34f5aee1..cddabff04c202 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 03c58c6923bf3..d0789a7b85b91 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 5aabe9c037632..265aedcfa2fcd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 9af8ab3f75295..3c4eab6eee65d 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: 2025-01-15 +date: 2025-01-20 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.devdocs.json b/api_docs/kbn_shared_ux_error_boundary.devdocs.json index 86f284adf335b..8848e27a0671a 100644 --- a/api_docs/kbn_shared_ux_error_boundary.devdocs.json +++ b/api_docs/kbn_shared_ux_error_boundary.devdocs.json @@ -29,7 +29,7 @@ "\nImplementation of Kibana Error Boundary" ], "signature": [ - "(props: ErrorBoundaryProps) => React.JSX.Element" + "(props: { children?: React.ReactNode; }) => React.JSX.Element" ], "path": "src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.tsx", "deprecated": false, @@ -45,7 +45,7 @@ "- ErrorBoundaryProps" ], "signature": [ - "ErrorBoundaryProps" + "{ children?: React.ReactNode; }" ], "path": "src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.tsx", "deprecated": false, @@ -95,6 +95,41 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/shared-ux-error-boundary", + "id": "def-common.KibanaSectionErrorBoundary", + "type": "Function", + "tags": [], + "label": "KibanaSectionErrorBoundary", + "description": [ + "\n`KibanaSectionErrorBoundary` is designed to capture errors at a granular level.\n\nIn general, it's best to use `KibanaErrorBoundary` and block the whole page.\nUsers will see an error state on the page and think that there are instabilities in the system.\nThey will be / should be wary about making any changes in a UI showing an error, since it risks\nfurther instability.\n\nIf it is acceptable to assume the risk of allowing users to interact with a UI that\nhas an error state, then using `KibanaSectionErrorBoundary` may be an acceptable alternative,\nbut this must be judged on a case-by-case basis." + ], + "signature": [ + "(props: React.PropsWithChildren) => React.JSX.Element" + ], + "path": "src/platform/packages/shared/shared-ux/error_boundary/src/ui/section_error_boundary.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-error-boundary", + "id": "def-common.KibanaSectionErrorBoundary.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "React.PropsWithChildren" + ], + "path": "src/platform/packages/shared/shared-ux/error_boundary/src/ui/section_error_boundary.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/shared-ux-error-boundary", "id": "def-common.ThrowIfError", diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index dbb3899a9d6e6..612da4d095fa8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 6 | 0 | 2 | 1 | +| 8 | 0 | 3 | 1 | ## Common diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index eff325592b3b2..bbfc20ea34011 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 041e973885925..a7999c5172795 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 1de9117dbf600..3ffcf6ec35d87 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index dd7f8f47705b1..12774810fff9d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 07613af8cb606..7a1276583c853 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index ec899a3d2da75..c8c409e255b19 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: 2025-01-15 +date: 2025-01-20 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 c19655360535b..3929aace41a95 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 9101e8ba1d45e..ffb1df6fd7802 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index b37380867c921..e58c8bd14466f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 099dc7f5d5a3b..2886e151ab7aa 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index e25f0cd9ae16a..0cc9b9fefea68 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index f1ab6bdc883be..ff5ef9cbc31c5 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index dd465cbf42b4d..6d7323ed3d4af 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 0347684bbc374..12fe8a73fe468 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index c5ba0f113c217..b719f3d387aa4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 5ec481844750e..b58e7cd153fac 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index cca47bfe2491b..0283e4fb3168e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 6be2f6a000ef2..1f75ba5747988 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 443b7abbb2a11..b81807669cd88 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 69485a1cf7065..f2b530b935a0c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 27a659056d3bd..e1dd394b80cd1 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 289570f2cc506..d8f109b0278c8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 2a347a154240f..30222c58808aa 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 9e010da7d6025..561a9d10e1488 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index f8b67f6aab32c..c9f9752553c8f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 18014f1465c12..c7929c257ad2e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index e9c77ef6d18f7..e1f11d24a7678 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 99b4d302ee6c8..fbd82f8fd4f9c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 1b78b90658998..47dc019e8590c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index fe82794231327..de8358403a7e4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 330e952cec80b..a9b80edf29e13 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 06a85eafd266e..09f55b51d7b6a 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index ddbec11a5583f..79d7032fa9bf3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 07453dcfa170b..122ecb473528e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 350e774b1b7d0..0226c776f075a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index c95496fcba9d3..9b92ccb1c2f25 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index beaed8b4c6174..ad09fadd5bf09 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index e01a383481ad3..9e519c2798ddd 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index fbb2723672471..5ecddb8e2bf81 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index e22ef38a7a466..f684f4c578153 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index b77922c37df6c..91a7760920734 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 2d901724dc2df..e76700319cd86 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_streams_schema.devdocs.json b/api_docs/kbn_streams_schema.devdocs.json index d0c41e39f1f72..9f978df93dd85 100644 --- a/api_docs/kbn_streams_schema.devdocs.json +++ b/api_docs/kbn_streams_schema.devdocs.json @@ -19,6 +19,54 @@ "common": { "classes": [], "functions": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.assertsSchema", + "type": "Function", + "tags": [], + "label": "assertsSchema", + "description": [], + "signature": [ + "(schema: TSchema, subject: any) => void" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.assertsSchema.$1", + "type": "Uncategorized", + "tags": [], + "label": "schema", + "description": [], + "signature": [ + "TSchema" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.assertsSchema.$2", + "type": "Any", + "tags": [], + "label": "subject", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/helpers/type_guards.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/streams-schema", "id": "def-common.getAncestors", @@ -1910,7 +1958,7 @@ "label": "ingestReadStreamDefinitonSchema", "description": [], "signature": [ - "Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1990,7 +2038,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1998,7 +2046,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2006,7 +2054,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2022,7 +2070,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2030,7 +2078,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2038,7 +2086,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodDefault; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2054,7 +2102,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2062,7 +2110,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2070,7 +2118,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; }>" + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/ingest_read_stream.ts", "deprecated": false, @@ -2085,7 +2133,7 @@ "label": "ingestStreamConfigDefinitonSchema", "description": [], "signature": [ - "Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2165,7 +2213,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2173,7 +2221,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2181,7 +2229,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2197,7 +2245,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2205,7 +2253,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2213,7 +2261,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>" + "; }[]; }; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/ingest_stream_config.ts", "deprecated": false, @@ -2228,7 +2276,7 @@ "label": "ingestStreamDefinitonSchema", "description": [], "signature": [ - "Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2308,7 +2356,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2316,7 +2364,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2324,7 +2372,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2340,7 +2388,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2348,7 +2396,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2356,7 +2404,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2372,7 +2420,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2380,7 +2428,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2388,7 +2436,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/ingest_stream.ts", "deprecated": false, @@ -2433,7 +2481,7 @@ "label": "listStreamsResponseSchema", "description": [], "signature": [ - "Zod.ZodObject<{ streams: Zod.ZodArray; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2513,7 +2561,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2521,7 +2569,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2529,7 +2577,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2545,7 +2593,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2553,7 +2601,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2561,7 +2609,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2577,7 +2625,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2585,7 +2633,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2593,7 +2641,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2673,7 +2721,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2681,7 +2729,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2689,7 +2737,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2705,7 +2753,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2713,7 +2761,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2721,7 +2769,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2737,7 +2785,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2745,7 +2793,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2753,7 +2801,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2785,7 +2833,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, { streams: ({ name: string; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2793,7 +2841,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2801,7 +2849,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2809,7 +2857,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2817,7 +2865,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }>" + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/apis/list_streams_response.ts", "deprecated": false, @@ -2894,7 +2942,7 @@ "label": "readStreamDefinitonSchema", "description": [], "signature": [ - "Zod.ZodUnion<[Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2974,7 +3022,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2982,7 +3030,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -2990,7 +3038,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3006,7 +3054,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3014,7 +3062,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3022,7 +3070,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodDefault; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3038,7 +3086,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3046,7 +3094,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3054,7 +3102,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; }>, Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3134,7 +3182,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3142,7 +3190,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3150,7 +3198,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3166,7 +3214,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3174,7 +3222,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3182,7 +3230,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodDefault; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3198,7 +3246,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3206,7 +3254,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3214,7 +3262,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; }>]>" + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/read_stream.ts", "deprecated": false, @@ -3229,7 +3277,7 @@ "label": "readStreamResponseSchema", "description": [], "signature": [ - "Zod.ZodObject<{ streams: Zod.ZodArray; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3309,7 +3357,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3317,7 +3365,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3325,7 +3373,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3341,7 +3389,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3349,7 +3397,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3357,7 +3405,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodDefault; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3373,7 +3421,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3381,7 +3429,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3389,7 +3437,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; }>, Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3469,7 +3517,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3477,7 +3525,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3485,7 +3533,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3501,7 +3549,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3509,7 +3557,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3517,7 +3565,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodDefault; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3533,7 +3581,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3541,7 +3589,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3549,7 +3597,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { streams: ({ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { streams: ({ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3581,7 +3629,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, { streams: ({ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, { streams: ({ name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3589,7 +3637,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3597,7 +3645,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3605,7 +3653,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3613,7 +3661,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; })[]; }>" + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/apis/read_streams_response.ts", "deprecated": false, @@ -3675,7 +3723,7 @@ "label": "streamConfigDefinitionSchema", "description": [], "signature": [ - "Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3755,7 +3803,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3763,7 +3811,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3771,7 +3819,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3787,7 +3835,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3795,7 +3843,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3803,7 +3851,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; }; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3883,7 +3931,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3891,7 +3939,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3899,7 +3947,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3915,7 +3963,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3923,7 +3971,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -3931,7 +3979,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>]>" + "; }[]; }; }>]>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/stream_config.ts", "deprecated": false, @@ -3946,7 +3994,7 @@ "label": "streamDefinitionSchema", "description": [], "signature": [ - "Zod.ZodUnion<[Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4026,7 +4074,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4034,7 +4082,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4042,7 +4090,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4058,7 +4106,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4066,7 +4114,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4074,7 +4122,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4090,7 +4138,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4098,7 +4146,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4106,7 +4154,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4186,7 +4234,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4194,7 +4242,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4202,7 +4250,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4218,7 +4266,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4226,7 +4274,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4234,7 +4282,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4250,7 +4298,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4258,7 +4306,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4266,7 +4314,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>" + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>]>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/stream.ts", "deprecated": false, @@ -4296,7 +4344,7 @@ "label": "wiredReadStreamDefinitonSchema", "description": [], "signature": [ - "Zod.ZodObject; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4376,7 +4424,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4384,7 +4432,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4392,7 +4440,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4408,7 +4456,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4416,7 +4464,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4424,7 +4472,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodDefault; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, { inherited_fields: Zod.ZodRecord; format: Zod.ZodOptional; }, { from: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; from: string; format?: string | undefined; }>>; lifecycle: Zod.ZodDiscriminatedUnion<\"type\", [Zod.ZodObject<{ type: Zod.ZodLiteral<\"dlm\">; data_retention: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"dlm\"; data_retention?: string | undefined; }, { type: \"dlm\"; data_retention?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"ilm\">; policy: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: \"ilm\"; policy: string; }, { type: \"ilm\"; policy: string; }>]>; }>, \"strict\", Zod.ZodTypeAny, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4440,7 +4488,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4448,7 +4496,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4456,7 +4504,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; inherited_fields?: Record | undefined; }>" + "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/read_streams/wired_read_stream.ts", "deprecated": false, @@ -4471,7 +4519,7 @@ "label": "wiredStreamConfigDefinitonSchema", "description": [], "signature": [ - "Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4551,7 +4599,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4559,7 +4607,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4567,7 +4615,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4583,7 +4631,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4591,7 +4639,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4599,7 +4647,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>" + "; }[]; wired: { fields: Record; }; }; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/stream_config/wired_stream_config.ts", "deprecated": false, @@ -4614,7 +4662,7 @@ "label": "wiredStreamDefinitonSchema", "description": [], "signature": [ - "Zod.ZodObject<{ name: Zod.ZodString; elasticsearch_assets: Zod.ZodOptional; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }, { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }>, \"many\">>; stream: Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4694,7 +4742,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4702,7 +4750,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4710,7 +4758,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4726,7 +4774,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4734,7 +4782,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4742,7 +4790,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }>; dashboards: Zod.ZodOptional>; }, \"strict\", Zod.ZodTypeAny, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4758,7 +4806,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4766,7 +4814,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -4774,7 +4822,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" + "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }>" ], "path": "x-pack/solutions/observability/packages/kbn-streams-schema/src/models/streams/wired_stream.ts", "deprecated": false, diff --git a/api_docs/kbn_streams_schema.mdx b/api_docs/kbn_streams_schema.mdx index 4cc03ab458cf4..6ff6aeb4a3086 100644 --- a/api_docs/kbn_streams_schema.mdx +++ b/api_docs/kbn_streams_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-streams-schema title: "@kbn/streams-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/streams-schema plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/streams-schema'] --- import kbnStreamsSchemaObj from './kbn_streams_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/streams-program-team](/~https://github.com/orgs/elastic/teams/st | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 106 | 13 | 106 | 0 | +| 109 | 14 | 109 | 0 | ## Common diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 33886831f2d5d..67bc6a073035d 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index ad5d95a841cf9..b56e85577e0db 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index d681810e794ec..6289fc933b10f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index abd2af12ddb77..c1e96fb4cc1db 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: 2025-01-15 +date: 2025-01-20 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 bcd1c458cc42d..bef40000ee2e2 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: 2025-01-15 +date: 2025-01-20 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 7388ccaa035b0..6c49bedf7eb79 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index ab90b20e7b474..10055cff9e8f8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 8b3e4373e166d..d4419cf592606 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: 2025-01-15 +date: 2025-01-20 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 483ebeb6c9f66..fb615be274ae5 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index 37b0a78ce653a..57e6d425bf4d4 100644 --- a/api_docs/kbn_transpose_utils.mdx +++ b/api_docs/kbn_transpose_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-transpose-utils title: "@kbn/transpose-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/transpose-utils plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/transpose-utils'] --- import kbnTransposeUtilsObj from './kbn_transpose_utils.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 661585e49844f..fac731245ed8c 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: 2025-01-15 +date: 2025-01-20 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 151c9e5de8c39..7e792d3f66b90 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: 2025-01-15 +date: 2025-01-20 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 20dc7c6bbfc0d..cb0d49a62dd37 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 80dcae78187cd..7abf4b0cc5b7e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 58522669ac705..a95151b24af7a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 7f541d5017b29..fa51d942cb935 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 7de8a58dc2c8e..e46cb0175a0dd 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: 2025-01-15 +date: 2025-01-20 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.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index ec9a3ec77fc8e..56298d9f1de92 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -2307,6 +2307,10 @@ { "plugin": "securitySolution", "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx" + }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx" } ] }, diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index d9ba606f6bbb8..0b0444fdda0df 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: 2025-01-15 +date: 2025-01-20 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 dc900f390cbd3..60a9fd60bea78 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: 2025-01-15 +date: 2025-01-20 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 6a823db725393..302c1e550445a 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: 2025-01-15 +date: 2025-01-20 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 1db96fa0dab4c..84db4446eef01 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: 2025-01-15 +date: 2025-01-20 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 f3ef3b9a56a1b..e6d450fe846ef 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: 2025-01-15 +date: 2025-01-20 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 4644454ff0ad4..fd851ba5a351d 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: 2025-01-15 +date: 2025-01-20 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 4653783c9a08c..67e4df92e2f1c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 1e86524810ccb..31053cc646d27 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index d560f548b09c4..dd860129e598d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index f27c106f3ffea..f1d825c49920c 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: 2025-01-15 +date: 2025-01-20 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 3edfbeeb4d45d..9f630dec54ecb 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: 2025-01-15 +date: 2025-01-20 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 85658141f6bf1..2415180b31a6d 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: 2025-01-15 +date: 2025-01-20 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 9d3573ea9f8e3..3a7c0f558da8b 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: 2025-01-15 +date: 2025-01-20 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 b1898329d0d97..3e96ab1365f87 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 5664cceb35770..fe3f2f8658b3d 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 414b804efea2e..ca670af8d5bde 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: 2025-01-15 +date: 2025-01-20 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 a16bae997736b..a55b18b5050c3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index e48cdc3f03dee..897eeeedb8350 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index d47ed0739f803..bcb1a85f32135 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 82f3a7ce80f0d..dd7afb4c614cc 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 2c94432382280..ea32f25f1331a 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 3078768f2eb53..7e76ca9af2574 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 8a8b97725f2a3..1cf84ed64a634 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index a69bb5b9ebe98..db336454adadd 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: 2025-01-15 +date: 2025-01-20 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 868230b7bcbd6..15521014eb968 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: 2025-01-15 +date: 2025-01-20 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 e5d27bea42778..3cb4cd6d36bfe 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/llm_tasks.devdocs.json b/api_docs/llm_tasks.devdocs.json index 39638b49a1e87..eedd2bc9614d7 100644 --- a/api_docs/llm_tasks.devdocs.json +++ b/api_docs/llm_tasks.devdocs.json @@ -11,9 +11,333 @@ "server": { "classes": [], "functions": [], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams", + "type": "Interface", + "tags": [], + "label": "RetrieveDocumentationParams", + "description": [ + "\nParameters for {@link RetrieveDocumentationAPI}" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.searchTerm", + "type": "string", + "tags": [], + "label": "searchTerm", + "description": [ + "\nThe search term to perform semantic text with.\nE.g. \"What is Kibana Lens?\"" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.max", + "type": "number", + "tags": [], + "label": "max", + "description": [ + "\nMaximum number of documents to return.\nDefaults to 3." + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.products", + "type": "Array", + "tags": [], + "label": "products", + "description": [ + "\nOptional list of products to restrict the search to." + ], + "signature": [ + "(\"security\" | \"kibana\" | \"observability\" | \"elasticsearch\")[] | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.maxDocumentTokens", + "type": "number", + "tags": [], + "label": "maxDocumentTokens", + "description": [ + "\nThe maximum number of tokens to return *per document*.\nDocuments exceeding this limit will go through token reduction.\n\nDefaults to `1000`." + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.tokenReductionStrategy", + "type": "CompoundType", + "tags": [], + "label": "tokenReductionStrategy", + "description": [ + "\nThe token reduction strategy to apply for documents exceeding max token count.\n- \"highlight\": Use Elasticsearch semantic highlighter to build a summary (concatenating highlights)\n- \"truncate\": Will keep the N first tokens\n- \"summarize\": Will call the LLM asking to generate a contextualized summary of the document\n\nOverall, `summarize` is more efficient, but significantly slower, given that an additional\nLLM call will be performed.\n\nDefaults to `highlight`" + ], + "signature": [ + "\"highlight\" | \"truncate\" | \"summarize\" | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.request", + "type": "Object", + "tags": [], + "label": "request", + "description": [ + "\nThe request that initiated the task." + ], + "signature": [ + "KibanaRequest", + "" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.connectorId", + "type": "string", + "tags": [], + "label": "connectorId", + "description": [ + "\nId of the LLM connector to use for the task." + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationParams.functionCalling", + "type": "CompoundType", + "tags": [], + "label": "functionCalling", + "description": [ + "\nOptional functionCalling parameter to pass down to the inference APIs." + ], + "signature": [ + { + "pluginId": "@kbn/inference-common", + "scope": "common", + "docId": "kibKbnInferenceCommonPluginApi", + "section": "def-common.FunctionCallingMode", + "text": "FunctionCallingMode" + }, + " | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResult", + "type": "Interface", + "tags": [], + "label": "RetrieveDocumentationResult", + "description": [ + "\nResponse type for {@link RetrieveDocumentationAPI}" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResult.success", + "type": "boolean", + "tags": [], + "label": "success", + "description": [ + "whether the call was successful or not" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResult.documents", + "type": "Array", + "tags": [], + "label": "documents", + "description": [ + "List of results for this search" + ], + "signature": [ + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.RetrieveDocumentationResultDoc", + "text": "RetrieveDocumentationResultDoc" + }, + "[]" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResultDoc", + "type": "Interface", + "tags": [], + "label": "RetrieveDocumentationResultDoc", + "description": [ + "\nIndividual result item in a {@link RetrieveDocumentationResult}" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResultDoc.title", + "type": "string", + "tags": [], + "label": "title", + "description": [ + "title of the document" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResultDoc.url", + "type": "string", + "tags": [], + "label": "url", + "description": [ + "full url to the online documentation" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResultDoc.content", + "type": "string", + "tags": [], + "label": "content", + "description": [ + "full content of the doc article" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationResultDoc.summarized", + "type": "boolean", + "tags": [], + "label": "summarized", + "description": [ + "true if content exceeded max token length and had to go through token reduction" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationAPI", + "type": "Type", + "tags": [], + "label": "RetrieveDocumentationAPI", + "description": [ + "\nRetrieve documentation API" + ], + "signature": [ + "(options: ", + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.RetrieveDocumentationParams", + "text": "RetrieveDocumentationParams" + }, + ") => Promise<", + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.RetrieveDocumentationResult", + "text": "RetrieveDocumentationResult" + }, + ">" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "llmTasks", + "id": "def-server.RetrieveDocumentationAPI.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.RetrieveDocumentationParams", + "text": "RetrieveDocumentationParams" + } + ], + "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "objects": [], "setup": { "parentPluginId": "llmTasks", @@ -75,9 +399,21 @@ ], "signature": [ "(options: ", - "RetrieveDocumentationParams", + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.RetrieveDocumentationParams", + "text": "RetrieveDocumentationParams" + }, ") => Promise<", - "RetrieveDocumentationResult", + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.RetrieveDocumentationResult", + "text": "RetrieveDocumentationResult" + }, ">" ], "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/types.ts", @@ -93,7 +429,13 @@ "label": "options", "description": [], "signature": [ - "RetrieveDocumentationParams" + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.RetrieveDocumentationParams", + "text": "RetrieveDocumentationParams" + } ], "path": "x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts", "deprecated": false, diff --git a/api_docs/llm_tasks.mdx b/api_docs/llm_tasks.mdx index c1416918ccc53..b63a5f89520e1 100644 --- a/api_docs/llm_tasks.mdx +++ b/api_docs/llm_tasks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/llmTasks title: "llmTasks" image: https://source.unsplash.com/400x175/?github description: API docs for the llmTasks plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'llmTasks'] --- import llmTasksObj from './llm_tasks.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 5 | 0 | 1 | 2 | +| 24 | 0 | 2 | 0 | ## Server @@ -31,3 +31,9 @@ Contact [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai ### Start +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 299b764785769..afffc612e606d 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: 2025-01-15 +date: 2025-01-20 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 96b51392648e9..0dad1a550d0a1 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: 2025-01-15 +date: 2025-01-20 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 ee212b7118019..8b92634b7932b 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: 2025-01-15 +date: 2025-01-20 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 130b44d47ebb4..d83136f447c79 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 9eee6ed6076b6..000bbe7efca9c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index c0a57cdd7d245..26a1e514245a6 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: 2025-01-15 +date: 2025-01-20 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 2a079977f0794..cb2000b01622b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index ee6083e21ab0a..c011f51e1c9c0 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index e4974c898bfde..ebc68c8ef0192 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: 2025-01-15 +date: 2025-01-20 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 95b3c25f81b6d..73b1a6e1f39fc 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index 0ad1982a652d8..4357f5cc4298f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 715a4268b23b2..fb923ea224374 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index c64e502bdf1a4..998821a570732 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: 2025-01-15 +date: 2025-01-20 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 5427e26238d64..6d5601bd546b5 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: 2025-01-15 +date: 2025-01-20 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 e44a3047773ba..50035eeeb9043 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 896fff147f413..d0f7980f1a9c7 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: 2025-01-15 +date: 2025-01-20 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 d74510180665d..4df8301201138 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -2429,11 +2429,11 @@ "ObservabilityAIAssistantRouteHandlerResources", ", { errorMessage?: string | undefined; ready: boolean; enabled: boolean; endpoint?: Partial<", "InferenceInferenceEndpointInfo", - "> | undefined; model_stats?: { deployment_state: ", + "> | undefined; model_stats?: { deployment_state?: ", "MlDeploymentAssignmentState", - " | undefined; allocation_state: ", + " | undefined; allocation_state?: ", "MlDeploymentAllocationState", - " | undefined; } | undefined; }, ", + " | undefined; allocation_count?: number | undefined; } | undefined; }, ", "ObservabilityAIAssistantRouteCreateOptions", ">; \"POST /internal/observability_ai_assistant/kb/reset\": ", { @@ -3401,11 +3401,11 @@ "ObservabilityAIAssistantRouteHandlerResources", ", { errorMessage?: string | undefined; ready: boolean; enabled: boolean; endpoint?: Partial<", "InferenceInferenceEndpointInfo", - "> | undefined; model_stats?: { deployment_state: ", + "> | undefined; model_stats?: { deployment_state?: ", "MlDeploymentAssignmentState", - " | undefined; allocation_state: ", + " | undefined; allocation_state?: ", "MlDeploymentAllocationState", - " | undefined; } | undefined; }, ", + " | undefined; allocation_count?: number | undefined; } | undefined; }, ", "ObservabilityAIAssistantRouteCreateOptions", ">; \"POST /internal/observability_ai_assistant/kb/reset\": ", { @@ -5098,11 +5098,11 @@ "ObservabilityAIAssistantRouteHandlerResources", ", { errorMessage?: string | undefined; ready: boolean; enabled: boolean; endpoint?: Partial<", "InferenceInferenceEndpointInfo", - "> | undefined; model_stats?: { deployment_state: ", + "> | undefined; model_stats?: { deployment_state?: ", "MlDeploymentAssignmentState", - " | undefined; allocation_state: ", + " | undefined; allocation_state?: ", "MlDeploymentAllocationState", - " | undefined; } | undefined; }, ", + " | undefined; allocation_count?: number | undefined; } | undefined; }, ", "ObservabilityAIAssistantRouteCreateOptions", ">; \"POST /internal/observability_ai_assistant/kb/reset\": ", { @@ -6291,11 +6291,11 @@ "ObservabilityAIAssistantRouteHandlerResources", ", { errorMessage?: string | undefined; ready: boolean; enabled: boolean; endpoint?: Partial<", "InferenceInferenceEndpointInfo", - "> | undefined; model_stats?: { deployment_state: ", + "> | undefined; model_stats?: { deployment_state?: ", "MlDeploymentAssignmentState", - " | undefined; allocation_state: ", + " | undefined; allocation_state?: ", "MlDeploymentAllocationState", - " | undefined; } | undefined; }, ", + " | undefined; allocation_count?: number | undefined; } | undefined; }, ", "ObservabilityAIAssistantRouteCreateOptions", ">; \"POST /internal/observability_ai_assistant/kb/reset\": ", { @@ -8308,7 +8308,7 @@ "label": "chat", "description": [], "signature": [ - "(name: string, { messages, connectorId, functions, functionCall, signal, simulateFunctionCalling, tracer, }: { messages: ", + "(name: string, { messages, connectorId, functions, functionCall, signal, simulateFunctionCalling, tracer, stream, }: { messages: ", { "pluginId": "observabilityAIAssistant", "scope": "common", @@ -8326,7 +8326,7 @@ }, " | undefined; }[] | undefined; functionCall?: string | undefined; signal: AbortSignal; simulateFunctionCalling?: boolean | undefined; tracer: ", "LangTracer", - "; }) => ", + "; stream: TStream; }) => TStream extends true ? ", "Observable", "<", { @@ -8352,7 +8352,23 @@ "section": "def-common.TokenCountEvent", "text": "TokenCountEvent" }, - ">" + "> : Promise<", + { + "pluginId": "@kbn/inference-common", + "scope": "common", + "docId": "kibKbnInferenceCommonPluginApi", + "section": "def-common.ChatCompleteResponse", + "text": "ChatCompleteResponse" + }, + "<", + { + "pluginId": "@kbn/inference-common", + "scope": "common", + "docId": "kibKbnInferenceCommonPluginApi", + "section": "def-common.ToolOptions", + "text": "ToolOptions" + }, + ">>" ], "path": "x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts", "deprecated": false, @@ -8378,7 +8394,7 @@ "id": "def-server.ObservabilityAIAssistantClient.chat.$2", "type": "Object", "tags": [], - "label": "{\n messages,\n connectorId,\n functions,\n functionCall,\n signal,\n simulateFunctionCalling,\n tracer,\n }", + "label": "{\n messages,\n connectorId,\n functions,\n functionCall,\n signal,\n simulateFunctionCalling,\n tracer,\n stream,\n }", "description": [], "path": "x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts", "deprecated": false, @@ -8493,6 +8509,20 @@ "path": "x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-server.ObservabilityAIAssistantClient.chat.$2.stream", + "type": "Uncategorized", + "tags": [], + "label": "stream", + "description": [], + "signature": [ + "TStream" + ], + "path": "x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -9623,11 +9653,11 @@ "ObservabilityAIAssistantRouteHandlerResources", ", { errorMessage?: string | undefined; ready: boolean; enabled: boolean; endpoint?: Partial<", "InferenceInferenceEndpointInfo", - "> | undefined; model_stats?: { deployment_state: ", + "> | undefined; model_stats?: { deployment_state?: ", "MlDeploymentAssignmentState", - " | undefined; allocation_state: ", + " | undefined; allocation_state?: ", "MlDeploymentAllocationState", - " | undefined; } | undefined; }, ", + " | undefined; allocation_count?: number | undefined; } | undefined; }, ", "ObservabilityAIAssistantRouteCreateOptions", ">; \"POST /internal/observability_ai_assistant/kb/reset\": ", { diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index d16181b44ed78..1c1b458897f12 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: 2025-01-15 +date: 2025-01-20 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 | |-------------------|-----------|------------------------|-----------------| -| 379 | 1 | 377 | 29 | +| 380 | 1 | 378 | 29 | ## Client diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index e96731425a1fe..5256d8fd32dda 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: 2025-01-15 +date: 2025-01-20 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 f7ff07238dfa0..4bef46210c4db 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: 2025-01-15 +date: 2025-01-20 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 06b91090c58b9..bcbb1efb27e29 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: 2025-01-15 +date: 2025-01-20 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 de45cd710b9af..a3e7f10e3d845 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 307d461301502..112be12a244c5 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: 2025-01-15 +date: 2025-01-20 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 3b3ec804e5bbc..346c081e4a345 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: 2025-01-15 +date: 2025-01-20 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 8e6044d04b41c..a0b2f0e6276af 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: 2025-01-15 +date: 2025-01-20 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 adef91b4ea33b..41ab23201be5b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 54958 | 254 | 41319 | 2701 | +| 55023 | 255 | 41344 | 2706 | ## Plugin Directory @@ -52,15 +52,15 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | crossClusterReplication | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@elastic/fleet](/~https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | -| | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 113 | 0 | 109 | 12 | +| | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 110 | 0 | 106 | 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. | 3207 | 31 | 2592 | 25 | +| | [@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. | 3213 | 31 | 2598 | 25 | | | [@elastic/obs-ux-logs-team](/~https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 6 | 0 | 6 | 0 | | | [@elastic/obs-ai-assistant](/~https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 9 | 0 | 9 | 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 | 1 | | | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | -| | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1225 | 0 | 443 | 4 | +| | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1229 | 0 | 447 | 4 | | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 4 | | | [@elastic/obs-ux-logs-team](/~https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of data set quality, where users can easily get an overview on the data sets they have. | 14 | 0 | 14 | 8 | | | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 15 | 0 | 9 | 2 | @@ -77,7 +77,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-entities](/~https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 45 | 0 | 45 | 4 | | entityManagerApp | [@elastic/obs-entities](/~https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 99 | 3 | 97 | 3 | -| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 26 | 0 | 9 | 0 | +| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 32 | 0 | 15 | 0 | | | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 201 | 0 | 201 | 6 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | The listing page for event annotations. | 15 | 0 | 15 | 0 | @@ -85,7 +85,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-management-team](/~https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 127 | 0 | 127 | 12 | | | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'error' renderer to expressions | 17 | 0 | 15 | 2 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Gauge plugin adds a `gauge` renderer and function to the expression plugin. The renderer will display the `gauge` chart. | 59 | 0 | 58 | 2 | -| | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Heatmap plugin adds a `heatmap` renderer and function to the expression plugin. The renderer will display the `heatmap` chart. | 112 | 0 | 108 | 2 | +| | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Heatmap plugin adds a `heatmap` renderer and function to the expression plugin. The renderer will display the `heatmap` chart. | 115 | 0 | 111 | 2 | | | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'image' function and renderer to expressions | 26 | 0 | 26 | 0 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds a `metric` renderer and function to the expression plugin. The renderer will display the `legacy metric` chart. | 51 | 0 | 51 | 2 | | | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'metric' function and renderer to expressions | 32 | 0 | 27 | 0 | @@ -97,13 +97,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart. | 6 | 0 | 6 | 2 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 182 | 0 | 171 | 13 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds expression runtime to Kibana | 2241 | 17 | 1769 | 6 | -| | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 270 | 0 | 110 | 3 | +| | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 273 | 0 | 109 | 3 | | | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | Index pattern fields and ambiguous values formatters | 293 | 5 | 254 | 3 | | | [@elastic/obs-ux-logs-team](/~https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes services for async usage and search of fields metadata. | 45 | 0 | 45 | 9 | | | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 89 | 0 | 89 | 8 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 3 | 0 | 3 | 0 | -| | [@elastic/fleet](/~https://github.com/orgs/elastic/teams/fleet) | - | 1446 | 5 | 1319 | 82 | +| | [@elastic/fleet](/~https://github.com/orgs/elastic/teams/fleet) | - | 1448 | 5 | 1321 | 84 | | ftrApis | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -136,7 +136,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 119 | 0 | 42 | 10 | | | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | A dashboard panel for creating links to dashboards or external links. | 5 | 0 | 5 | 0 | | | [@elastic/security-detection-engine](/~https://github.com/orgs/elastic/teams/security-detection-engine) | - | 227 | 0 | 98 | 52 | -| | [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 5 | 0 | 1 | 2 | +| | [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 24 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](/~https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 15 | 0 | 13 | 7 | | | [@elastic/obs-ux-logs-team](/~https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 119 | 4 | 119 | 22 | | | [@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. | 256 | 0 | 230 | 33 | @@ -154,7 +154,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) | - | 697 | 2 | 689 | 23 | -| | [@elastic/obs-ai-assistant](/~https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 379 | 1 | 377 | 29 | +| | [@elastic/obs-ai-assistant](/~https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 380 | 1 | 378 | 29 | | | [@elastic/obs-ai-assistant](/~https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 8 | 0 | 7 | 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. | 3 | 0 | 3 | 0 | @@ -164,7 +164,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 9 | 0 | 9 | 4 | | | [@elastic/kibana-presentation](/~https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 126 | 2 | 102 | 8 | -| | [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 10 | 0 | 10 | 4 | +| | [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 23 | 0 | 9 | 2 | | | [@elastic/obs-ux-infra_services-team](/~https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 16 | 1 | 16 | 0 | | | [@elastic/obs-ux-infra_services-team](/~https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 22 | 0 | 22 | 7 | | | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 23 | 0 | @@ -191,7 +191,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 5 | 0 | 5 | 0 | | searchprofiler | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-security](/~https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 461 | 0 | 238 | 0 | -| | [@elastic/security-solution](/~https://github.com/orgs/elastic/teams/security-solution) | - | 191 | 0 | 123 | 34 | +| | [@elastic/security-solution](/~https://github.com/orgs/elastic/teams/security-solution) | - | 192 | 0 | 124 | 35 | | | [@elastic/security-solution](/~https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](/~https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 25 | 0 | 24 | 0 | @@ -204,11 +204,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](/~https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 269 | 0 | 73 | 1 | | | [@elastic/response-ops](/~https://github.com/orgs/elastic/teams/response-ops) | - | 25 | 0 | 25 | 3 | | | [@elastic/response-ops](/~https://github.com/orgs/elastic/teams/response-ops) | - | 10 | 0 | 10 | 0 | -| | [@elastic/streams-program-team](/~https://github.com/orgs/elastic/teams/streams-program-team) | A manager for Streams | 13 | 0 | 13 | 9 | +| | [@elastic/streams-program-team](/~https://github.com/orgs/elastic/teams/streams-program-team) | A manager for Streams | 13 | 0 | 13 | 13 | | | [@elastic/streams-program-team](/~https://github.com/orgs/elastic/teams/streams-program-team) | - | 8 | 0 | 8 | 0 | | synthetics | [@elastic/obs-ux-management-team](/~https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 0 | | | [@elastic/response-ops](/~https://github.com/orgs/elastic/teams/response-ops) | - | 104 | 0 | 61 | 7 | -| | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 45 | 0 | 1 | 0 | +| | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 47 | 0 | 1 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 31 | 0 | 26 | 6 | | telemetryCollectionXpack | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 0 | 0 | @@ -381,7 +381,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 54 | 7 | 54 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 15 | 0 | 15 | 1 | -| | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 567 | 2 | 242 | 0 | +| | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 568 | 2 | 243 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 96 | 0 | 83 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 46 | 0 | 45 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 2 | 0 | @@ -502,7 +502,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-management-team](/~https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 43 | 0 | 42 | 0 | -| | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 17 | 0 | 17 | 0 | +| | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 19 | 0 | 19 | 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 | @@ -530,17 +530,17 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 271 | 1 | 210 | 14 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 30 | 0 | 30 | 1 | | | [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 287 | 1 | 225 | 25 | +| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 305 | 1 | 241 | 26 | | | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 30 | 0 | 12 | 0 | -| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 85 | 0 | 76 | 0 | -| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 205 | 0 | 193 | 12 | +| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 86 | 0 | 77 | 0 | +| | [@elastic/kibana-esql](/~https://github.com/orgs/elastic/teams/kibana-esql) | - | 207 | 0 | 195 | 13 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | | | [@elastic/kibana-visualizations](/~https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | | | [@elastic/security-threat-hunting-investigations](/~https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 43 | 0 | 15 | 2 | | | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 18 | 0 | | | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 51 | 0 | 42 | 2 | | | [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | -| | [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kibana-operations) | - | 111 | 2 | 86 | 1 | +| | [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kibana-operations) | - | 114 | 2 | 89 | 1 | | | [@elastic/appex-qa](/~https://github.com/orgs/elastic/teams/appex-qa) | - | 564 | 6 | 524 | 7 | | | [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 10 | 0 | 8 | 0 | | | [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | @@ -560,7 +560,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting](/~https://github.com/orgs/elastic/teams/security-threat-hunting) | - | 85 | 0 | 80 | 2 | | | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 78 | 0 | 76 | 0 | | | [@elastic/kibana-management](/~https://github.com/orgs/elastic/teams/kibana-management) | - | 126 | 3 | 126 | 0 | -| | [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 160 | 0 | 55 | 4 | +| | [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 161 | 0 | 55 | 4 | | | [@elastic/response-ops](/~https://github.com/orgs/elastic/teams/response-ops) | - | 88 | 0 | 88 | 0 | | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](/~https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | @@ -602,7 +602,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 37 | 0 | 0 | 0 | | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 12 | 0 | 0 | 0 | | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 152 | 1 | 0 | 0 | -| | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 141 | 0 | 6 | 0 | +| | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 144 | 0 | 6 | 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) | - | 11 | 0 | 0 | 0 | | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 36 | 4 | 8 | 0 | @@ -625,7 +625,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 42 | 1 | 35 | 1 | | | [@elastic/ml-ui](/~https://github.com/orgs/elastic/teams/ml-ui) | - | 32 | 0 | 0 | 0 | | | [@elastic/kibana-security](/~https://github.com/orgs/elastic/teams/kibana-security) | - | 22 | 0 | 16 | 0 | -| | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 134 | 0 | 134 | 3 | +| | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 135 | 0 | 135 | 3 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 55 | 1 | 50 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | @@ -691,12 +691,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](/~https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 15 | 0 | 14 | 0 | | | [@elastic/appex-qa](/~https://github.com/orgs/elastic/teams/appex-qa) | - | 121 | 0 | 86 | 8 | | | [@elastic/appex-qa](/~https://github.com/orgs/elastic/teams/appex-qa) | - | 6 | 0 | 6 | 0 | -| | [@elastic/appex-qa](/~https://github.com/orgs/elastic/teams/appex-qa) | - | 68 | 0 | 53 | 3 | +| | [@elastic/appex-qa](/~https://github.com/orgs/elastic/teams/appex-qa) | - | 37 | 0 | 27 | 3 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 35 | 0 | 34 | 0 | | | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 8 | 0 | 8 | 1 | | | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 3 | 0 | 3 | 0 | | | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 76 | 0 | 76 | 0 | -| | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 3954 | 0 | 3954 | 0 | +| | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 3956 | 0 | 3956 | 0 | | | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 1 | 17 | 1 | | | [@elastic/search-kibana](/~https://github.com/orgs/elastic/teams/search-kibana) | - | 36 | 0 | 34 | 3 | | | [@elastic/kibana-data-discovery](/~https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 18 | 1 | @@ -751,7 +751,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 28 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 38 | 0 | 29 | 2 | -| | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 2 | 1 | +| | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 3 | 1 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 5 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 2 | 0 | | | [@elastic/appex-sharedux](/~https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | @@ -794,7 +794,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 108 | 2 | 70 | 1 | | | [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | | | [@elastic/kibana-operations](/~https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 21 | 0 | -| | [@elastic/streams-program-team](/~https://github.com/orgs/elastic/teams/streams-program-team) | - | 106 | 13 | 106 | 0 | +| | [@elastic/streams-program-team](/~https://github.com/orgs/elastic/teams/streams-program-team) | - | 109 | 14 | 109 | 0 | | | [@elastic/obs-ux-management-team](/~https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-ux-management-team](/~https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-core](/~https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index bb7a695ad1b61..8477d4b17e1b0 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: 2025-01-15 +date: 2025-01-20 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 c976ba0f4bb56..1373c73dbee45 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/product_doc_base.devdocs.json b/api_docs/product_doc_base.devdocs.json index 71ded441b875c..4ad874b496ff7 100644 --- a/api_docs/product_doc_base.devdocs.json +++ b/api_docs/product_doc_base.devdocs.json @@ -54,7 +54,211 @@ "server": { "classes": [], "functions": [], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchOptions", + "type": "Interface", + "tags": [], + "label": "DocSearchOptions", + "description": [ + "\nOptions for the Product documentation {@link SearchApi}" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchOptions.query", + "type": "string", + "tags": [], + "label": "query", + "description": [ + "plain text search query" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchOptions.max", + "type": "number", + "tags": [], + "label": "max", + "description": [ + "max number of hits. Defaults to 3" + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchOptions.highlights", + "type": "number", + "tags": [], + "label": "highlights", + "description": [ + "number of content highlights per hit. Defaults to 3" + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchOptions.products", + "type": "Array", + "tags": [], + "label": "products", + "description": [ + "optional list of products to filter search" + ], + "signature": [ + "(\"security\" | \"kibana\" | \"observability\" | \"elasticsearch\")[] | undefined" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResponse", + "type": "Interface", + "tags": [], + "label": "DocSearchResponse", + "description": [ + "\nResponse for the {@link SearchApi}" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResponse.results", + "type": "Array", + "tags": [], + "label": "results", + "description": [ + "List of results for this search" + ], + "signature": [ + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.DocSearchResult", + "text": "DocSearchResult" + }, + "[]" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResult", + "type": "Interface", + "tags": [], + "label": "DocSearchResult", + "description": [ + "\nIndividual result returned in a {@link DocSearchResponse} by the {@link SearchApi}" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResult.title", + "type": "string", + "tags": [], + "label": "title", + "description": [ + "title of the doc article page" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResult.url", + "type": "string", + "tags": [], + "label": "url", + "description": [ + "full url to the online documentation" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResult.productName", + "type": "CompoundType", + "tags": [], + "label": "productName", + "description": [ + "product name this document is associated to" + ], + "signature": [ + "\"security\" | \"kibana\" | \"observability\" | \"elasticsearch\"" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResult.content", + "type": "string", + "tags": [], + "label": "content", + "description": [ + "full content of the doc article" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "productDocBase", + "id": "def-server.DocSearchResult.highlights", + "type": "Array", + "tags": [], + "label": "highlights", + "description": [ + "content highlights based on the query" + ], + "signature": [ + "string[]" + ], + "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [], "misc": [ { @@ -63,12 +267,26 @@ "type": "Type", "tags": [], "label": "SearchApi", - "description": [], + "description": [ + "\nSearch API to be used to retrieve product documentation." + ], "signature": [ "(options: ", - "DocSearchOptions", + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.DocSearchOptions", + "text": "DocSearchOptions" + }, ") => Promise<", - "DocSearchResponse", + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.DocSearchResponse", + "text": "DocSearchResponse" + }, ">" ], "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", @@ -84,7 +302,13 @@ "label": "options", "description": [], "signature": [ - "DocSearchOptions" + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.DocSearchOptions", + "text": "DocSearchOptions" + } ], "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", "deprecated": false, @@ -129,9 +353,21 @@ "description": [], "signature": [ "(options: ", - "DocSearchOptions", + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.DocSearchOptions", + "text": "DocSearchOptions" + }, ") => Promise<", - "DocSearchResponse", + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.DocSearchResponse", + "text": "DocSearchResponse" + }, ">" ], "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/types.ts", @@ -147,7 +383,13 @@ "label": "options", "description": [], "signature": [ - "DocSearchOptions" + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.DocSearchOptions", + "text": "DocSearchOptions" + } ], "path": "x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts", "deprecated": false, diff --git a/api_docs/product_doc_base.mdx b/api_docs/product_doc_base.mdx index db83c2157536a..ef8401c0833b5 100644 --- a/api_docs/product_doc_base.mdx +++ b/api_docs/product_doc_base.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/productDocBase title: "productDocBase" image: https://source.unsplash.com/400x175/?github description: API docs for the productDocBase plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'productDocBase'] --- import productDocBaseObj from './product_doc_base.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 10 | 0 | 10 | 4 | +| 23 | 0 | 9 | 2 | ## Client @@ -39,6 +39,9 @@ Contact [@elastic/appex-ai-infra](/~https://github.com/orgs/elastic/teams/appex-ai ### Start +### Interfaces + + ### Consts, variables and types diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index e16a600af1c68..e23e6b75ab311 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: 2025-01-15 +date: 2025-01-20 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 f8f6fc17ca5a1..eeb681d14ff10 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: 2025-01-15 +date: 2025-01-20 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 de3a5a60e4bdf..7d405cd8dc7c6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index a34758d80f51b..711b5737e15a6 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 4215222887d2e..d66d157e478b3 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 9d49d7c7cb0dd..4dfad9c2fb4bf 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 9948dd779a6fe..b8676d1475e8c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.devdocs.json b/api_docs/saved_objects.devdocs.json index 831ec392a6742..4c8d911cfed69 100644 --- a/api_docs/saved_objects.devdocs.json +++ b/api_docs/saved_objects.devdocs.json @@ -60,19 +60,19 @@ }, { "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx" + "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx" }, { "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx" + "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx" }, { "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx" + "path": "src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx" }, { "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx" + "path": "src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx" }, { "plugin": "discover", diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 846060e77bcc9..91b20a11c14d2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 76981f0ca0c38..b767d8a8d1e12 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index ad5744ab8570c..3924f16e87098 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 9c52ace3cb8fd..ca11b78cefe5e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 0897a86b704a7..94b45bb933dcd 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 9aff70af6ee4b..97cc0501d26ef 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index e5606ca688221..83f6793b1f95b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index ab6b91ecddd95..002e7d1605824 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 141139ecb5fd6..71d4e0f9e252a 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 6ab354dd4334a..a38852049b25d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 7c451e3ef4e3f..c0f6494ca9a12 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.devdocs.json b/api_docs/search_indices.devdocs.json index 3417958790f89..e77e68e9e2d36 100644 --- a/api_docs/search_indices.devdocs.json +++ b/api_docs/search_indices.devdocs.json @@ -85,7 +85,7 @@ "label": "startAppId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"inventory\" | \"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:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"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:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"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:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"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:siem_migrations-rules\" | \"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:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"inventory\" | \"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:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"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:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"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:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"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:siem_migrations-rules\" | \"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:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/solutions/search/plugins/search_indices/public/types.ts", "deprecated": false, diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 09f3d8298d352..0b42a269344da 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 414a2f12beaf6..0b99fbc42443a 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.devdocs.json b/api_docs/search_navigation.devdocs.json index 302e555b1db54..57616c4984477 100644 --- a/api_docs/search_navigation.devdocs.json +++ b/api_docs/search_navigation.devdocs.json @@ -132,7 +132,7 @@ "label": "link", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"inventory\" | \"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:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"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:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"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:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"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:siem_migrations-rules\" | \"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:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"inventory\" | \"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:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"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:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"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:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"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:siem_migrations-rules\" | \"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:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/solutions/search/plugins/search_solution/search_navigation/public/types.ts", "deprecated": false, diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index 59d15d1a5d368..67b2c1122fb11 100644 --- a/api_docs/search_navigation.mdx +++ b/api_docs/search_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNavigation title: "searchNavigation" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNavigation plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNavigation'] --- import searchNavigationObj from './search_navigation.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index aeabc23ca53b7..5227de7e9ed15 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: 2025-01-15 +date: 2025-01-20 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 8dc3700c05d5f..7521b59f7242d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/search_synonyms.mdx b/api_docs/search_synonyms.mdx index fff87fede746b..5a8ed093e2a90 100644 --- a/api_docs/search_synonyms.mdx +++ b/api_docs/search_synonyms.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchSynonyms title: "searchSynonyms" image: https://source.unsplash.com/400x175/?github description: API docs for the searchSynonyms plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchSynonyms'] --- import searchSynonymsObj from './search_synonyms.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 626fb5cb3168a..e1f2c96b08815 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -5914,18 +5914,6 @@ { "plugin": "ml", "path": "x-pack/platform/plugins/shared/ml/server/plugin.ts" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/solutions/search/plugins/enterprise_search/server/lib/check_access.ts" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/solutions/search/plugins/enterprise_search/server/lib/check_access.ts" - }, - { - "plugin": "enterpriseSearch", - "path": "x-pack/solutions/search/plugins/enterprise_search/server/lib/check_access.ts" } ] } @@ -6008,11 +5996,11 @@ }, { "plugin": "fleet", - "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts" + "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts" }, { "plugin": "fleet", - "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/transform_api_keys.ts" + "path": "x-pack/platform/plugins/shared/fleet/server/services/api_keys/security.ts" }, { "plugin": "fleet", diff --git a/api_docs/security.mdx b/api_docs/security.mdx index cb88e40952bde..b2e20f44c190c 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: 2025-01-15 +date: 2025-01-20 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 85267d0c350ee..4bbdad9e1d6ad 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -2938,6 +2938,23 @@ "trackAdoption": false, "children": [], "returnComment": [] + }, + { + "parentPluginId": "securitySolution", + "id": "def-server.SecuritySolutionApiRequestHandlerContext.getAssetInventoryClient", + "type": "Function", + "tags": [], + "label": "getAssetInventoryClient", + "description": [], + "signature": [ + "() => ", + "AssetInventoryDataClient" + ], + "path": "x-pack/solutions/security/plugins/security_solution/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 3945d28e3a698..e0873233bc903 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](/~https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 191 | 0 | 123 | 34 | +| 192 | 0 | 124 | 35 | ## Client diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index cec757987a203..e3f571ce11015 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: 2025-01-15 +date: 2025-01-20 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 69b966c361d2d..b467c31a68d4a 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: 2025-01-15 +date: 2025-01-20 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 1ca618b9e42bd..e2a91c00f93a2 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: 2025-01-15 +date: 2025-01-20 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 313735904f969..76f6cb309004c 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: 2025-01-15 +date: 2025-01-20 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 9f50814904775..23155a48aca1d 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: 2025-01-15 +date: 2025-01-20 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 eb4bc9ada39be..026ea73e8e223 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 73c18d2e0ea15..02b949d37fad2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 17f2dc5d415a4..54f368d29f247 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: 2025-01-15 +date: 2025-01-20 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 88e9327879f9e..1793f2996e134 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index f41e1969e897d..f26fb1adaf294 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 275d50326e848..f71522465306d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 66ff57bc2c734..cb2e6ccfd0771 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.devdocs.json b/api_docs/streams.devdocs.json index 022b98a6a1b2c..81a6c1a09e585 100644 --- a/api_docs/streams.devdocs.json +++ b/api_docs/streams.devdocs.json @@ -63,17 +63,7 @@ "section": "def-common.RouteRepositoryClient", "text": "RouteRepositoryClient" }, - "<{ \"POST /api/streams/{id}/schema/fields_simulation\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }>, ", - "StreamsRouteHandlerResources", - ", { status: \"unknown\" | \"success\" | \"failure\"; simulationError: string | null; documentsWithRuntimeFieldsApplied: unknown[] | null; }, undefined>; \"POST /api/streams/{id}/processing/_simulate\": ", + "<{ \"POST /api/streams/{id}/processing/_simulate\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -147,7 +137,7 @@ }, "; }[]; }; }>, ", "StreamsRouteHandlerResources", - ", { documents: { value: Record; isMatch: boolean; }[]; success_rate: number; failure_rate: number; detected_fields: { name: string; type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\" | \"unmapped\"; }[]; }, undefined>; \"GET /api/streams/{id}/schema/unmapped_fields\": ", + ", { documents: { value: Record; isMatch: boolean; }[]; success_rate: number; failure_rate: number; detected_fields: { name: string; type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\" | \"unmapped\"; }[]; }, undefined>; \"POST /api/streams/{id}/schema/fields_simulation\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -155,9 +145,9 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}/schema/unmapped_fields\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }>, ", "StreamsRouteHandlerResources", - ", { unmappedFields: string[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", + ", { status: \"unknown\" | \"success\" | \"failure\"; simulationError: string | null; documentsWithRuntimeFieldsApplied: unknown[] | null; }, undefined>; \"GET /api/streams/{id}/schema/unmapped_fields\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -165,11 +155,9 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}/_details\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ start: Zod.ZodString; end: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; }, { start: string; end: string; }>; }, \"strip\", Zod.ZodTypeAny, { query: { start: string; end: string; }; path: { id: string; }; }, { query: { start: string; end: string; }; path: { id: string; }; }>, ", + "<\"GET /api/streams/{id}/schema/unmapped_fields\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", "StreamsRouteHandlerResources", - ", ", - "StreamDetailsResponse", - ", undefined>; \"POST /api/streams/{id}/_sample\": ", + ", { unmappedFields: string[]; }, undefined>; \"POST /api/streams/{id}/_sample\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -227,55 +215,11 @@ }, "; }; }>, ", "StreamsRouteHandlerResources", - ", { documents: unknown[]; }, undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/dashboards/_bulk\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ operations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { index: { id: string; }; }, { index: { id: string; }; }>, Zod.ZodObject<{ delete: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { delete: { id: string; }; }, { delete: { id: string; }; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "BulkUpdateAssetsResponse", - ", undefined>; \"POST /api/streams/{id}/dashboards/_suggestions\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/dashboards/_suggestions\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ query: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { query: string; }, { query: string; }>; body: Zod.ZodObject<{ tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { tags?: string[] | undefined; }, { tags?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "SuggestDashboardResponse", - ", undefined>; \"DELETE /api/streams/{id}/dashboards/{dashboardId}\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"DELETE /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", + ", { documents: unknown[]; }, undefined>; \"GET /api/streams/_status\": { endpoint: \"GET /api/streams/_status\"; handler: ServerRouteHandler<", "StreamsRouteHandlerResources", - ", ", - "UnlinkDashboardResponse", - ", undefined>; \"PUT /api/streams/{id}/dashboards/{dashboardId}\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"PUT /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "LinkDashboardResponse", - ", undefined>; \"GET /api/streams/{id}/dashboards\": ", + ", undefined, { enabled: boolean; }>; security?: ", + "RouteSecurity", + " | undefined; }; \"POST /api/streams/_resync\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -283,11 +227,11 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}/dashboards\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "<\"POST /api/streams/_resync\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", "StreamsRouteHandlerResources", ", ", - "ListDashboardsResponse", - ", undefined>; \"POST /api/streams/_disable\": ", + "ResyncStreamsResponse", + ", undefined>; \"POST /api/streams/{id}/_fork\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -295,35 +239,23 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/_disable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", - "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"POST /internal/streams/esql\": ", + "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; condition: Zod.ZodType<", { - "pluginId": "@kbn/server-route-repository-utils", + "pluginId": "@kbn/streams-schema", "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.Condition", + "text": "Condition" }, - "<\"POST /internal/streams/esql\", Zod.ZodObject<{ body: Zod.ZodObject<{ query: Zod.ZodString; operationName: Zod.ZodString; filter: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>>; kuery: Zod.ZodOptional; start: Zod.ZodOptional; end: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "UnparsedEsqlResponse", - ", undefined>; \"GET /api/streams/_status\": { endpoint: \"GET /api/streams/_status\"; handler: ServerRouteHandler<", - "StreamsRouteHandlerResources", - ", undefined, { enabled: boolean; }>; security?: ", - "RouteSecurity", - " | undefined; }; \"GET /api/streams\": ", + ", Zod.ZodTypeDef, ", { - "pluginId": "@kbn/server-route-repository-utils", + "pluginId": "@kbn/streams-schema", "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.Condition", + "text": "Condition" }, - "<\"GET /api/streams\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", - "StreamsRouteHandlerResources", - ", { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", + ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -331,7 +263,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }, { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -339,7 +271,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -347,7 +279,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }; }, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -355,7 +287,33 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, undefined>; \"DELETE /api/streams/{id}\": ", + "; }; }>, ", + "StreamsRouteHandlerResources", + ", { acknowledged: true; }, undefined>; \"POST /api/streams/_disable\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/_disable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", ", + "DisableStreamsResponse", + ", undefined>; \"POST /api/streams/_enable\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/_enable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", ", + "EnableStreamsResponse", + ", undefined>; \"DELETE /api/streams/{id}\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -373,7 +331,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"PUT /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; body: Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -453,7 +411,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -461,7 +419,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -469,7 +427,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -485,7 +443,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -493,7 +451,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -501,7 +459,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; }; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -581,7 +539,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -589,7 +547,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -597,7 +555,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -613,7 +571,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -621,7 +579,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -629,7 +587,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -661,7 +619,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; }, { path: { id: string; }; body: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; }; }; }, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -669,7 +627,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -677,7 +635,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; } | { ingest: { routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; } | { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -685,7 +643,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -693,9 +651,11 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; }>, ", + "; }[]; }; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: boolean; }, undefined>; \"GET /api/streams/{id}\": ", + ", ", + "UpsertStreamResponse", + ", undefined>; \"GET /api/streams\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -703,9 +663,9 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "<\"GET /api/streams\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", "StreamsRouteHandlerResources", - ", { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + ", { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -721,7 +681,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -737,7 +697,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/_fork\": ", + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -745,15 +705,21 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; condition: Zod.ZodType<", + "<\"GET /api/streams/{id}/_details\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ start: Zod.ZodString; end: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; }, { start: string; end: string; }>; }, \"strip\", Zod.ZodTypeAny, { query: { start: string; end: string; }; path: { id: string; }; }, { query: { start: string; end: string; }; path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "StreamDetailsResponse", + ", undefined>; \"GET /api/streams/{id}\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - ", Zod.ZodTypeDef, ", + "<\"GET /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -761,7 +727,7 @@ "section": "def-common.Condition", "text": "Condition" }, - ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -769,7 +735,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }, { stream: { name: string; }; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -777,7 +743,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -785,17 +751,19 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }; }, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }; }>, ", + "<\"POST /api/streams/{id}/dashboards/_bulk\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ operations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { index: { id: string; }; }, { index: { id: string; }; }>, Zod.ZodObject<{ delete: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { delete: { id: string; }; }, { delete: { id: string; }; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"POST /api/streams/_resync\": ", + ", ", + "BulkUpdateAssetsResponse", + ", undefined>; \"POST /api/streams/{id}/dashboards/_suggestions\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -803,9 +771,11 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/_resync\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "<\"POST /api/streams/{id}/dashboards/_suggestions\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ query: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { query: string; }, { query: string; }>; body: Zod.ZodObject<{ tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { tags?: string[] | undefined; }, { tags?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"POST /api/streams/_enable\": ", + ", ", + "SuggestDashboardResponse", + ", undefined>; \"DELETE /api/streams/{id}/dashboards/{dashboardId}\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -813,9 +783,47 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/_enable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "<\"DELETE /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: true; message: string; }, undefined>; }, ", + ", ", + "UnlinkDashboardResponse", + ", undefined>; \"PUT /api/streams/{id}/dashboards/{dashboardId}\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"PUT /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "LinkDashboardResponse", + ", undefined>; \"GET /api/streams/{id}/dashboards\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /api/streams/{id}/dashboards\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "ListDashboardsResponse", + ", undefined>; \"POST /internal/streams/esql\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/streams/esql\", Zod.ZodObject<{ body: Zod.ZodObject<{ query: Zod.ZodString; operationName: Zod.ZodString; filter: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>>; kuery: Zod.ZodOptional; start: Zod.ZodOptional; end: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "UnparsedEsqlResponse", + ", undefined>; }, ", "StreamsRepositoryClientOptions", ">" ], @@ -872,17 +880,7 @@ "label": "StreamsRouteRepository", "description": [], "signature": [ - "{ \"POST /api/streams/{id}/schema/fields_simulation\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }>, ", - "StreamsRouteHandlerResources", - ", { status: \"unknown\" | \"success\" | \"failure\"; simulationError: string | null; documentsWithRuntimeFieldsApplied: unknown[] | null; }, undefined>; \"POST /api/streams/{id}/processing/_simulate\": ", + "{ \"POST /api/streams/{id}/processing/_simulate\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -956,7 +954,7 @@ }, "; }[]; }; }>, ", "StreamsRouteHandlerResources", - ", { documents: { value: Record; isMatch: boolean; }[]; success_rate: number; failure_rate: number; detected_fields: { name: string; type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\" | \"unmapped\"; }[]; }, undefined>; \"GET /api/streams/{id}/schema/unmapped_fields\": ", + ", { documents: { value: Record; isMatch: boolean; }[]; success_rate: number; failure_rate: number; detected_fields: { name: string; type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\" | \"unmapped\"; }[]; }, undefined>; \"POST /api/streams/{id}/schema/fields_simulation\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -964,9 +962,9 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}/schema/unmapped_fields\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "<\"POST /api/streams/{id}/schema/fields_simulation\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ field_definitions: Zod.ZodArray; format: Zod.ZodOptional; }, { name: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }, { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }, { path: { id: string; }; body: { field_definitions: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; format?: string | undefined; }[]; }; }>, ", "StreamsRouteHandlerResources", - ", { unmappedFields: string[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", + ", { status: \"unknown\" | \"success\" | \"failure\"; simulationError: string | null; documentsWithRuntimeFieldsApplied: unknown[] | null; }, undefined>; \"GET /api/streams/{id}/schema/unmapped_fields\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -974,11 +972,9 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}/_details\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ start: Zod.ZodString; end: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; }, { start: string; end: string; }>; }, \"strip\", Zod.ZodTypeAny, { query: { start: string; end: string; }; path: { id: string; }; }, { query: { start: string; end: string; }; path: { id: string; }; }>, ", + "<\"GET /api/streams/{id}/schema/unmapped_fields\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", "StreamsRouteHandlerResources", - ", ", - "StreamDetailsResponse", - ", undefined>; \"POST /api/streams/{id}/_sample\": ", + ", { unmappedFields: string[]; }, undefined>; \"POST /api/streams/{id}/_sample\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1036,55 +1032,11 @@ }, "; }; }>, ", "StreamsRouteHandlerResources", - ", { documents: unknown[]; }, undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/dashboards/_bulk\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ operations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { index: { id: string; }; }, { index: { id: string; }; }>, Zod.ZodObject<{ delete: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { delete: { id: string; }; }, { delete: { id: string; }; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "BulkUpdateAssetsResponse", - ", undefined>; \"POST /api/streams/{id}/dashboards/_suggestions\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"POST /api/streams/{id}/dashboards/_suggestions\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ query: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { query: string; }, { query: string; }>; body: Zod.ZodObject<{ tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { tags?: string[] | undefined; }, { tags?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "SuggestDashboardResponse", - ", undefined>; \"DELETE /api/streams/{id}/dashboards/{dashboardId}\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"DELETE /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", + ", { documents: unknown[]; }, undefined>; \"GET /api/streams/_status\": { endpoint: \"GET /api/streams/_status\"; handler: ServerRouteHandler<", "StreamsRouteHandlerResources", - ", ", - "UnlinkDashboardResponse", - ", undefined>; \"PUT /api/streams/{id}/dashboards/{dashboardId}\": ", - { - "pluginId": "@kbn/server-route-repository-utils", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" - }, - "<\"PUT /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "LinkDashboardResponse", - ", undefined>; \"GET /api/streams/{id}/dashboards\": ", + ", undefined, { enabled: boolean; }>; security?: ", + "RouteSecurity", + " | undefined; }; \"POST /api/streams/_resync\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1092,11 +1044,11 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}/dashboards\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "<\"POST /api/streams/_resync\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", "StreamsRouteHandlerResources", ", ", - "ListDashboardsResponse", - ", undefined>; \"POST /api/streams/_disable\": ", + "ResyncStreamsResponse", + ", undefined>; \"POST /api/streams/{id}/_fork\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1104,35 +1056,23 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/_disable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", - "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"POST /internal/streams/esql\": ", + "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; condition: Zod.ZodType<", { - "pluginId": "@kbn/server-route-repository-utils", + "pluginId": "@kbn/streams-schema", "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.Condition", + "text": "Condition" }, - "<\"POST /internal/streams/esql\", Zod.ZodObject<{ body: Zod.ZodObject<{ query: Zod.ZodString; operationName: Zod.ZodString; filter: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>>; kuery: Zod.ZodOptional; start: Zod.ZodOptional; end: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }>, ", - "StreamsRouteHandlerResources", - ", ", - "UnparsedEsqlResponse", - ", undefined>; \"GET /api/streams/_status\": { endpoint: \"GET /api/streams/_status\"; handler: ServerRouteHandler<", - "StreamsRouteHandlerResources", - ", undefined, { enabled: boolean; }>; security?: ", - "RouteSecurity", - " | undefined; }; \"GET /api/streams\": ", + ", Zod.ZodTypeDef, ", { - "pluginId": "@kbn/server-route-repository-utils", + "pluginId": "@kbn/streams-schema", "scope": "common", - "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", - "section": "def-common.ServerRoute", - "text": "ServerRoute" + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.Condition", + "text": "Condition" }, - "<\"GET /api/streams\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", - "StreamsRouteHandlerResources", - ", { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", + ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1140,7 +1080,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }, { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1148,7 +1088,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1156,7 +1096,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }; }, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1164,7 +1104,33 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, undefined>; \"DELETE /api/streams/{id}\": ", + "; }; }>, ", + "StreamsRouteHandlerResources", + ", { acknowledged: true; }, undefined>; \"POST /api/streams/_disable\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/_disable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", ", + "DisableStreamsResponse", + ", undefined>; \"POST /api/streams/_enable\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/_enable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "StreamsRouteHandlerResources", + ", ", + "EnableStreamsResponse", + ", undefined>; \"DELETE /api/streams/{id}\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1182,7 +1148,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"PUT /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; body: Zod.ZodUnion<[Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; wired: Zod.ZodObject<{ fields: Zod.ZodDefault; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields?: Record | undefined; }>; routing: Zod.ZodDefault, \"many\">; wired: Zod.ZodObject<{ fields: Zod.ZodRecord; format: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }, { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; format?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { fields: Record; }, { fields: Record; }>; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1262,7 +1228,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }, { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1270,7 +1236,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1278,7 +1244,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1294,7 +1260,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }, { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1302,7 +1268,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1310,7 +1276,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodDefault; }; }; }>, Zod.ZodObject<{ ingest: Zod.ZodObject<{ processing: Zod.ZodArray, \"many\">>; routing: Zod.ZodDefault, \"many\">; routing: Zod.ZodArray, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", + "; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1390,7 +1356,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }, { routing?: { name: string; condition?: ", + "; }[]; }, { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1398,7 +1364,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1406,7 +1372,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", + "; }[]; }>; }, \"strict\", Zod.ZodTypeAny, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1422,7 +1388,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }, { ingest: { routing?: { name: string; condition?: ", + "; }[]; }; }, { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1430,7 +1396,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1438,7 +1404,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", + "; }[]; }; }>]>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1470,7 +1436,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; }, { path: { id: string; }; body: { ingest: { wired: { fields?: Record | undefined; }; routing?: { name: string; condition?: ", + "; }[]; }; }; }, { path: { id: string; }; body: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1478,7 +1444,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1486,7 +1452,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; } | { ingest: { routing?: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; } | { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1494,7 +1460,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; processing?: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1502,9 +1468,11 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[] | undefined; }; }; }>, ", + "; }[]; }; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: boolean; }, undefined>; \"GET /api/streams/{id}\": ", + ", ", + "UpsertStreamResponse", + ", undefined>; \"GET /api/streams\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1512,9 +1480,9 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"GET /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "<\"GET /api/streams\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", "StreamsRouteHandlerResources", - ", { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + ", { streams: ({ name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1530,7 +1498,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1546,7 +1514,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/_fork\": ", + "; }[]; }; }; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; })[]; }, undefined>; \"GET /api/streams/{id}/_details\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1554,15 +1522,21 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/{id}/_fork\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ stream: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; condition: Zod.ZodType<", + "<\"GET /api/streams/{id}/_details\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ start: Zod.ZodString; end: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; }, { start: string; end: string; }>; }, \"strip\", Zod.ZodTypeAny, { query: { start: string; end: string; }; path: { id: string; }; }, { query: { start: string; end: string; }; path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "StreamDetailsResponse", + ", undefined>; \"GET /api/streams/{id}\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - ", Zod.ZodTypeDef, ", + "<\"GET /api/streams/{id}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1570,7 +1544,7 @@ "section": "def-common.Condition", "text": "Condition" }, - ">; }, \"strip\", Zod.ZodTypeAny, { stream: { name: string; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1578,7 +1552,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }, { stream: { name: string; }; condition?: ", + "; }[]; wired: { fields: Record; }; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } | { name: string; lifecycle: { type: \"dlm\"; data_retention?: string | undefined; } | { type: \"ilm\"; policy: string; }; stream: { ingest: { routing: { name: string; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1586,7 +1560,7 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + "; }[]; processing: { config: { grok: { field: string; patterns: string[]; pattern_definitions?: Record | undefined; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; }; } | { dissect: { field: string; pattern: string; ignore_failure?: boolean | undefined; ignore_missing?: boolean | undefined; append_separator?: string | undefined; }; }; condition?: ", { "pluginId": "@kbn/streams-schema", "scope": "common", @@ -1594,17 +1568,19 @@ "section": "def-common.Condition", "text": "Condition" }, - "; }; }, { path: { id: string; }; body: { stream: { name: string; }; condition?: ", + "; }[]; }; }; inherited_fields: Record; dashboards?: string[] | undefined; elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/dashboards/_bulk\": ", { - "pluginId": "@kbn/streams-schema", + "pluginId": "@kbn/server-route-repository-utils", "scope": "common", - "docId": "kibKbnStreamsSchemaPluginApi", - "section": "def-common.Condition", - "text": "Condition" + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" }, - "; }; }>, ", + "<\"POST /api/streams/{id}/dashboards/_bulk\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ operations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { index: { id: string; }; }, { index: { id: string; }; }>, Zod.ZodObject<{ delete: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { delete: { id: string; }; }, { delete: { id: string; }; }>]>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }, { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }, { path: { id: string; }; body: { operations: ({ index: { id: string; }; } | { delete: { id: string; }; })[]; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"POST /api/streams/_resync\": ", + ", ", + "BulkUpdateAssetsResponse", + ", undefined>; \"POST /api/streams/{id}/dashboards/_suggestions\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1612,9 +1588,11 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/_resync\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "<\"POST /api/streams/{id}/dashboards/_suggestions\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; query: Zod.ZodObject<{ query: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { query: string; }, { query: string; }>; body: Zod.ZodObject<{ tags: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { tags?: string[] | undefined; }, { tags?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }, { query: { query: string; }; path: { id: string; }; body: { tags?: string[] | undefined; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: true; }, undefined>; \"POST /api/streams/_enable\": ", + ", ", + "SuggestDashboardResponse", + ", undefined>; \"DELETE /api/streams/{id}/dashboards/{dashboardId}\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1622,9 +1600,47 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /api/streams/_enable\", Zod.ZodObject<{}, \"strip\", Zod.ZodTypeAny, {}, {}>, ", + "<\"DELETE /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", "StreamsRouteHandlerResources", - ", { acknowledged: true; message: string; }, undefined>; }" + ", ", + "UnlinkDashboardResponse", + ", undefined>; \"PUT /api/streams/{id}/dashboards/{dashboardId}\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"PUT /api/streams/{id}/dashboards/{dashboardId}\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; dashboardId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; dashboardId: string; }, { id: string; dashboardId: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; dashboardId: string; }; }, { path: { id: string; dashboardId: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "LinkDashboardResponse", + ", undefined>; \"GET /api/streams/{id}/dashboards\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /api/streams/{id}/dashboards\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; }, { path: { id: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "ListDashboardsResponse", + ", undefined>; \"POST /internal/streams/esql\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/streams/esql\", Zod.ZodObject<{ body: Zod.ZodObject<{ query: Zod.ZodString; operationName: Zod.ZodString; filter: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>>; kuery: Zod.ZodOptional; start: Zod.ZodOptional; end: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }, { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }, { body: { query: string; operationName: string; start?: number | undefined; end?: number | undefined; filter?: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\"> | undefined; kuery?: string | undefined; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "UnparsedEsqlResponse", + ", undefined>; }" ], "path": "x-pack/solutions/observability/plugins/streams/server/routes/index.ts", "deprecated": false, diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 928f03948721c..d68495baa1af2 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/streams-program-team](/~https://github.com/orgs/elastic/teams/st | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 13 | 0 | 13 | 9 | +| 13 | 0 | 13 | 13 | ## Client diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index 1a99f764a3815..9cc26ad675e8b 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 3179bd4c616f5..93a76d79822a5 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.devdocs.json b/api_docs/telemetry.devdocs.json index 5b05765b189d0..9746d7b5d5a2b 100644 --- a/api_docs/telemetry.devdocs.json +++ b/api_docs/telemetry.devdocs.json @@ -201,6 +201,19 @@ "path": "src/platform/plugins/shared/telemetry/public/plugin.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "telemetry", + "id": "def-public.TelemetryPluginConfig.localShipper", + "type": "boolean", + "tags": [], + "label": "localShipper", + "description": [ + "Should use the local EBT shipper to persist events in the local ES" + ], + "path": "src/platform/plugins/shared/telemetry/public/plugin.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -790,7 +803,7 @@ "id": "def-server.TelemetryPluginStart.getIsOptedIn", "type": "Function", "tags": [ - "track-adoption" + "deprecated" ], "label": "getIsOptedIn", "description": [ @@ -800,8 +813,8 @@ "() => Promise" ], "path": "src/platform/plugins/shared/telemetry/server/plugin.ts", - "deprecated": false, - "trackAdoption": true, + "deprecated": true, + "trackAdoption": false, "references": [ { "plugin": "fleet", @@ -846,6 +859,47 @@ ], "children": [], "returnComment": [] + }, + { + "parentPluginId": "telemetry", + "id": "def-server.TelemetryPluginStart.isOptedIn$", + "type": "Object", + "tags": [ + "track-adoption" + ], + "label": "isOptedIn$", + "description": [ + "\nAn Observable object that can be subscribed to for changes in global telemetry config.\n\nPushes `true` when sending usage to Elastic is enabled.\nPushes `false` when the user explicitly opts out of sending usage data to Elastic.\n\nAdditionally, pushes the actual value on Kibana startup, except if the (previously opted-out) user\nhaven't chosen yet to opt-in or out after a minor or major upgrade. In that case, pushing the new\nvalue waits until the user decides.\n" + ], + "signature": [ + "Observable", + "" + ], + "path": "src/platform/plugins/shared/telemetry/server/plugin.ts", + "deprecated": false, + "trackAdoption": true, + "references": [ + { + "plugin": "fleet", + "path": "x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts" + }, + { + "plugin": "fleet", + "path": "x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts" + }, + { + "plugin": "synthetics", + "path": "x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts" + }, + { + "plugin": "synthetics", + "path": "x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/solutions/security/plugins/security_solution/server/lib/telemetry/sender.test.ts" + } + ] } ], "lifecycle": "start", diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 6653c22e21261..3990f8b4ed11d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.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 | |-------------------|-----------|------------------------|-----------------| -| 45 | 0 | 1 | 0 | +| 47 | 0 | 1 | 0 | ## Client diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index a03e89fc03fad..c2b3cab263a9e 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index ee29dfca84854..2156ed0899d9c 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 2e92ba8fad950..a093b68cf312b 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: 2025-01-15 +date: 2025-01-20 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 652c4f5762ce2..f4b3ea16f6641 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -3948,39 +3948,39 @@ }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/add_data_provider_popover.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/add_data_provider_popover.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/empty.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/add_data_provider_popover.tsx" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/empty.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/add_data_provider_popover.tsx" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/providers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/empty.tsx" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/providers.tsx" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/empty.tsx" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/providers.tsx" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", - "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/data_providers/providers.tsx" + "path": "x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/column_headers/helpers.ts" }, { "plugin": "securitySolution", @@ -4386,7 +4386,7 @@ "section": "def-common.Direction", "text": "Direction" }, - "; type?: string | undefined; esTypes?: string[] | undefined; }[]; language: \"eql\"; fieldRequested: string[]; params?: any; id?: string | undefined; size?: number | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; timestampField?: string | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; eventCategoryField?: string | undefined; tiebreakerField?: string | undefined; runTimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" + "; type?: string | undefined; esTypes?: string[] | undefined; }[]; language: \"eql\"; fieldRequested: string[]; params?: any; id?: string | undefined; size?: number | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; timestampField?: string | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; eventCategoryField?: string | undefined; tiebreakerField?: string | undefined; runTimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" ], "path": "x-pack/solutions/security/plugins/timelines/common/api/search_strategy/timeline/eql.ts", "deprecated": false, @@ -4417,7 +4417,7 @@ "section": "def-common.TimelineEventsQueries", "text": "TimelineEventsQueries" }, - ".all; params?: any; id?: string | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: any; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; excludeEcsData?: boolean | undefined; }" + ".all; params?: any; id?: string | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterQuery?: any; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; excludeEcsData?: boolean | undefined; }" ], "path": "x-pack/solutions/security/plugins/timelines/common/api/search_strategy/timeline/events_all.ts", "deprecated": false, @@ -4440,7 +4440,7 @@ "section": "def-common.TimelineEventsQueries", "text": "TimelineEventsQueries" }, - ".details; params?: any; id?: string | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; }" + ".details; params?: any; id?: string | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; }" ], "path": "x-pack/solutions/security/plugins/timelines/common/api/search_strategy/timeline/events_details.ts", "deprecated": false, @@ -4494,7 +4494,7 @@ "section": "def-common.TimelineEventsQueries", "text": "TimelineEventsQueries" }, - ".kpi; params?: any; id?: string | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" + ".kpi; params?: any; id?: string | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; indexType?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; should: {}[]; must: {}[]; must_not: {}[]; }; } | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" ], "path": "x-pack/solutions/security/plugins/timelines/common/api/search_strategy/timeline/kpi.ts", "deprecated": false, diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index cc350ac37e43e..c5d3d705c6e80 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 320bd32c74169..3c461307f4b7f 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 0437ebe26e0e4..ed214f365ca79 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.devdocs.json b/api_docs/ui_actions.devdocs.json index ddbc1a26895c8..c6fb3dcdd966f 100644 --- a/api_docs/ui_actions.devdocs.json +++ b/api_docs/ui_actions.devdocs.json @@ -330,38 +330,6 @@ "plugin": "controls", "path": "src/platform/plugins/shared/controls/public/plugin.ts" }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, { "plugin": "ml", "path": "x-pack/platform/plugins/shared/ml/public/ui_actions/index.ts" @@ -734,10 +702,6 @@ "plugin": "maps", "path": "x-pack/platform/plugins/shared/maps/public/plugin.ts" }, - { - "plugin": "dashboard", - "path": "src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts" - }, { "plugin": "cases", "path": "x-pack/platform/plugins/shared/cases/public/components/visualizations/actions/register.ts" diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index d5e64224abd96..e548d46923d25 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 3eda8a974b5dc..048b9bb31dd06 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: 2025-01-15 +date: 2025-01-20 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 c7470ae86b634..8ea7a98fc2b17 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: 2025-01-15 +date: 2025-01-20 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 6aa3c471df1ba..930fe1df903da 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index a5bc1f0d318cb..189d5a8d54737 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index ead1771edf201..7504a751e29b0 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: 2025-01-15 +date: 2025-01-20 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 3aa20caf433f1..d526257177495 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: 2025-01-15 +date: 2025-01-20 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 cd30483429796..3c80456ea72a4 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 972735daf489b..25a1abf2314b8 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 25bb27d245986..79fb2235d9159 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 2b6e3d374d081..3ee8d66ff7e16 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 5ee990aef2a2f..4ccc7b1d4fa0d 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index a50a0d0502cf2..579cb370bf754 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 9f7f0f9994a2e..548f8d2c71680 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 05961dae44f55..d42cc65bbbf39 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 859c27ce6281f..456cdf9c0cb5b 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index f76d7d62a684b..d711648d6ea73 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 1efb5eb5d7034..aa3319d4efe90 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 9ed39dac7c373..865dfd469a0c2 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index d35da58b78833..231bf999c8029 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 2b167ce08f519..cab55b5badda9 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: 2025-01-15 +date: 2025-01-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/config/serverless.es.yml b/config/serverless.es.yml index 2d5ba84ece795..b8e12054ddf28 100644 --- a/config/serverless.es.yml +++ b/config/serverless.es.yml @@ -72,7 +72,6 @@ xpack.cloud.serverless.project_type: search ## Enable the Serverless Search plugin xpack.serverless.search.enabled: true -xpack.searchIndices.enabled: true ## Set the home route uiSettings.overrides.defaultRoute: /app/elasticsearch diff --git a/config/serverless.oblt.yml b/config/serverless.oblt.yml index 937954a1c5e84..a08f9a72e9e7b 100644 --- a/config/serverless.oblt.yml +++ b/config/serverless.oblt.yml @@ -9,6 +9,8 @@ xpack.securitySolution.enabled: false xpack.search.notebooks.enabled: false xpack.searchPlayground.enabled: false xpack.searchInferenceEndpoints.enabled: false +xpack.searchIndices.enabled: false + ## Fine-tune the observability solution feature privileges. Also, refer to `serverless.yml` for the project-agnostic overrides. xpack.features.overrides: diff --git a/config/serverless.security.yml b/config/serverless.security.yml index 0e3a0c92f8546..f748c3ea5b7b2 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -11,6 +11,7 @@ xpack.search.notebooks.enabled: false xpack.searchPlayground.enabled: false xpack.searchInferenceEndpoints.enabled: false xpack.inventory.enabled: false +xpack.searchIndices.enabled: false ## Fine-tune the security solution feature privileges. Also, refer to `serverless.yml` for the project-agnostic overrides. xpack.features.overrides: diff --git a/dev_docs/contributing/third_party_dependencies.mdx b/dev_docs/contributing/third_party_dependencies.mdx index ea8eb9cd154a9..fbb85f929193c 100644 --- a/dev_docs/contributing/third_party_dependencies.mdx +++ b/dev_docs/contributing/third_party_dependencies.mdx @@ -41,19 +41,18 @@ Should you find yourself evaluating a new dependency, here are some specific thi 1. **Is there already another dependency that offers similar functionality?** If so, adding a new dependency may not be necessary. Prefer one way to do things and use what's already there, unless there is an important reason not to do so. 2. **Does this dependency appear to be well-maintained?** A dependency that hasn't been updated in years is usually more of a -liability than an asset. Make sure the depedency has recent activity, that bugs and security vulnerabilities appear to be addressed +liability than an asset. Make sure the dependency has recent activity, that bugs and security vulnerabilities appear to be addressed in a timely manner, and that there is active participation from the maintainers and community. 3. **How large is the dependency?** For client-side plugins, heavy dependencies can have a real impact on user experience, especially if they are included in the initial page bundle and not loaded asynchronously. In some cases it might make more sense -to roll your own rather than include a bloated depedency, especially if you are only using a single piece of functionality. +to roll your own rather than include a bloated dependency, especially if you are only using a single piece of functionality. 4. **Does this dependency have a license that's compatible with Kibana's?** Most common open source licenses such as BSD, MIT, and Apache 2.0/1.1 are okay to use with Kibana. Others may not be, or may require special attribution. 5. **Will this dependency need to be prebuilt?** Due to our build process, native module dependencies are only supported for development (`devDependencies`), and are not supported for production (`dependencies`). 6. **Am I committed to maintaining this dependency?** Once you add a dependency to the `package.json`, someone else isn't going to keep it updated for you. That means you will be responsible for updating it regularly, keeping an eye out for security vulnerabilities, -and dealing with any breaking changes that may arise during an upgrade. We recommend (and will soon require) relying on the renovate bot to help keep the -dependency updated; be sure to mark your ownership of the package in the -[`renovate.json`](/~https://github.com/elastic/kibana/blob/main/renovate.json`) file. +and dealing with any breaking changes that may arise during an upgrade. Dependency ownership is tracked by the +[`renovate.json`](/~https://github.com/elastic/kibana/blob/main/renovate.json`) file. See the section on Dependency ownership below for more information. If you have any questions about whether adding a dependency is appropriate, feel free to reach out to one of the following teams on Github: @@ -72,3 +71,73 @@ on Github: Using an existing dependency is typically preferred over adding a new one. Please consult with the owning team before using an existing dependency, as they may have specific guidelines or concerns about its use. + +## Dependency ownership + +All dependencies must be owned by at least one team. This team is responsible for ensuring the dependency is kept up to date, and for addressing any issues that arise with the dependency. +Dependency ownership is tracked in the `renovate.json` file in the root of the Kibana repository. If you are adding a new dependency, be sure to add your team as the owner in this file. + +### Example configuration +Here is an example configuration for a dependency in the `renovate.json` file: + +```json + { + //[1] + "groupName": "my-awesome-dependency", + "matchDepNames": [ + "my-awesome-dependency", + "@types/my-awesome-dependency" + ], + // [2] + "reviewers": [ + "team:my-team-name" + ], + // [3] + "matchBaseBranches": [ + "main" + ], + // [4] + "labels": [ + "Team:My-Team-Label", + "release_note:skip", + "backport:all-open" + ], + // [5] + "minimumReleaseAge": "7 days", + // [6] + "enabled": true + } +``` + +[1] `groupName`: The rule group. Renovate will raise a single PR for all dependencies within a group. Consider creating logical groups to make upgrades easier to review. + +[2] `reviewers`: `team:my-team-name` will correspond to a GitHub group named `@elastic/my-team-name`. This group should contain all members of the team responsible for the dependency. Multiple teams can be added as reviewers if necessary. + +[3] `matchBaseBranches`: The branches that the rule will apply to. This should be set to `main` for most dependencies. + +[4] `labels`: Labels to apply to the PRs created by Renovate. The `Team:My-Team-Label` label should be replaced with your team's GitHub label from the Kibana repository. The `release_note:skip` and `backport:all-open` labels are used to control the release process and should not be changed without first consulting the AppEx Platform Security team. + +[5] `minimumReleaseAge`: The minimum age of a release before it can be upgraded. This is set to `7 days` to allow time for any issues to be identified and resolved before upgrading. You may adjust this value as needed. + +[6] `enabled`: Must be set to `true` to satisfy dependency ownership requirements. Consult the AppEx Platform Security team before disabling this setting. + +### Dependency ownership tooling + +The `./scripts/dependency_ownership.js` script can be used to validate the `renovate.json` file and ensure that all dependencies are owned by a team. +```sh +node scripts/dependency_ownership.js + +Runs a dev task + +Options: + --dependency, -d Show who owns the given dependency + --owner, -o Show dependencies owned by the given owner + --missingOwner Show dependencies that are not owned by any team + --outputPath, -f Specify the output file to save results as JSON + --failIfUnowned Fail if any dependencies are not owned by any team + --verbose, -v Log verbosely + --debug Log debug messages (less than verbose) + --quiet Only log errors + --silent Don't log anything + --help Show this message +``` \ No newline at end of file diff --git a/dev_docs/nav-kibana-dev.docnav.json b/dev_docs/nav-kibana-dev.docnav.json index 976bab0d8316f..cdfb8fab07fcd 100644 --- a/dev_docs/nav-kibana-dev.docnav.json +++ b/dev_docs/nav-kibana-dev.docnav.json @@ -197,6 +197,9 @@ { "id": "kibDevTutorialDebugging" }, + { + "id": "kibDevTutorialDebuggingFipsTestFailures" + }, { "id": "kibDevTutorialBuildingDistributable", "label": "Building a Kibana distributable" diff --git a/docs/settings/telemetry-settings.asciidoc b/docs/settings/telemetry-settings.asciidoc index 74c85061cd713..eea55ec4e524d 100644 --- a/docs/settings/telemetry-settings.asciidoc +++ b/docs/settings/telemetry-settings.asciidoc @@ -31,3 +31,6 @@ set <> If the server fails to connect to our endpoint at https://telemetry.elastic.co/, it assumes it is behind a firewall and falls back to `'browser'` to send it from users' browsers when they are navigating through {kib}. *Default: `'server'`.* + +`xpack.apm.telemetryCollectionEnabled`:: + Collects information about APM data and API performance. Set this to `false` to specifically disable APM's collector. *Default: `'true'`.* \ No newline at end of file diff --git a/docs/user/reporting/reporting-csv-troubleshooting.asciidoc b/docs/user/reporting/reporting-csv-troubleshooting.asciidoc index f0edec18bd8e5..21ca7b721d85a 100644 --- a/docs/user/reporting/reporting-csv-troubleshooting.asciidoc +++ b/docs/user/reporting/reporting-csv-troubleshooting.asciidoc @@ -69,6 +69,21 @@ Such changes aren't guaranteed to solve the issue, but give the functionality a chance of working in this use case. Unfortunately, lowering the scroll size will require more requests to Elasticsearch during export, which adds more time overhead, which could unintentionally create more instances of auth token expiration errors. +[float] +[[reporting-troubleshooting-inspect-query-used-for-export]] +=== Inspecting the query used for CSV export + +The listing of reports in *Stack Management > Reporting* allows you to inspect the query used for CSV export. It can be helpful to see the raw responses +from Elasticsearch, or determine if there are performance improvements to be gained by changing the way you query the data. + +1. Go to **Stack Management > Reporting** and click the info icon next to a report. +2. In the footer of the report flyout, click **Actions**. +3. Click **Inspect query in Console** in the **Actions** menu. +4. This will open the *Console* application, pre-filled with the queries used to generate the CSV export. + +[role="screenshot"] +image::https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/blt4758e67aaec715d9/67897d0be92e090a6dc626a8/inspect-query-from-csv-export.gif[Inspect the query used for CSV export] + [float] [[reporting-troubleshooting-csv-token-expired]] === Token expiration diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index a57b32e921778..2d3dbb69b310c 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -9279,6 +9279,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -9848,6 +9872,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -10038,6 +10086,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "data_output_id": { "nullable": true, "type": "string" @@ -10204,6 +10276,30 @@ "nullable": true, "type": "object" }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "space_ids": { "items": { "type": "string" @@ -10292,6 +10388,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -10861,6 +10981,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -11077,6 +11221,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -11646,6 +11814,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -12098,6 +12290,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -12667,6 +12883,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -12855,6 +13095,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "data_output_id": { "nullable": true, "type": "string" @@ -13021,6 +13285,30 @@ "nullable": true, "type": "object" }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "space_ids": { "items": { "type": "string" @@ -13109,6 +13397,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -13678,6 +13990,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -13894,6 +14230,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -14463,6 +14823,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index 7892210aa0ecc..993809f81209c 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -9279,6 +9279,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -9848,6 +9872,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -10038,6 +10086,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "data_output_id": { "nullable": true, "type": "string" @@ -10204,6 +10276,30 @@ "nullable": true, "type": "object" }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "space_ids": { "items": { "type": "string" @@ -10292,6 +10388,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -10861,6 +10981,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -11077,6 +11221,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -11646,6 +11814,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -12098,6 +12290,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -12667,6 +12883,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -12855,6 +13095,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "data_output_id": { "nullable": true, "type": "string" @@ -13021,6 +13285,30 @@ "nullable": true, "type": "object" }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "space_ids": { "items": { "type": "string" @@ -13109,6 +13397,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -13678,6 +13990,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, @@ -13894,6 +14230,30 @@ }, "type": "array" }, + "agentless": { + "additionalProperties": false, + "properties": { + "resources": { + "additionalProperties": false, + "properties": { + "requests": { + "additionalProperties": false, + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, "agents": { "type": "number" }, @@ -14463,6 +14823,30 @@ } ] }, + "required_versions": { + "items": { + "additionalProperties": false, + "properties": { + "percentage": { + "description": "Target percentage of agents to auto upgrade", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "version": { + "description": "Target version for automatic agent upgrade", + "type": "string" + } + }, + "required": [ + "version", + "percentage" + ], + "type": "object" + }, + "nullable": true, + "type": "array" + }, "revision": { "type": "number" }, diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 99813f9cf1182..9bc95e9034e6f 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -4862,6 +4862,7 @@ paths: operationId: DeleteAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -4909,6 +4910,7 @@ paths: operationId: GetAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -4955,6 +4957,10 @@ paths: enum: - wait_for type: string + example: + criticality_level: high_impact + id_field: host.name + id_value: my_host required: true responses: '200': @@ -5080,6 +5086,31 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + page: 1 + per_page: 10 + records: + - '@timestamp': '2024-08-02T14:40:35.705Z' + asset: + criticality: medium_impact + criticality_level: medium_impact + host: + asset: + criticality: medium_impact + name: my_other_host + id_field: host.name + id_value: my_other_host + - '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host + total: 2 type: object properties: page: @@ -5101,7 +5132,7 @@ paths: - page - per_page - total - description: Bulk upload successful + description: Successfully retrieved asset criticality records summary: List asset criticality records tags: - Security Entity Analytics API @@ -8347,6 +8378,9 @@ paths: operationId: CreateRuleExceptionListItems parameters: - description: Detection rule's identifier + examples: + id: + value: 330bdd28-eedf-40e1-bed0-f10176c7f9e0 in: path name: id required: true @@ -8356,6 +8390,28 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + items: + - description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: items: @@ -8364,12 +8420,43 @@ paths: type: array required: - items - description: Rule exception list items + description: Rule exception items. required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ruleExceptionItems: + value: + - _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic schema: items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' @@ -8378,6 +8465,17 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badPayload: + value: + error: Bad Request + message: Invalid request payload JSON format + statusCode: 400 + badRequest: + value: + error: Bad Request + message: '[request params]: id: Invalid uuid' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -8386,22 +8484,38 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response - summary: Create rule exception list items + summary: Create rule exception items tags: - Security Exceptions API x-beta: true @@ -9959,19 +10073,29 @@ paths: description: Delete an exception list using the `id` or `list_id` field. operationId: DeleteExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: Exception list's identifier. Either `id` or `list_id` must be specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. + examples: + autogeneratedId: + value: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + list_id: + value: simple_list in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -9981,12 +10105,39 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + detectionExceptionList: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -9995,24 +10146,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/exception_lists?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10024,19 +10197,24 @@ paths: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: Exception list's identifier. Either `id` or `list_id` must be specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -10046,12 +10224,39 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + detectionType: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10060,24 +10265,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10087,7 +10314,7 @@ paths: x-beta: true post: description: | - An exception list groups exception items and can be associated with detection rules. You can assign detection rules with multiple exception lists. + An exception list groups exception items and can be associated with detection rules. You can assign exception lists to multiple detection rules. > info > All exception items added to the same list are evaluated using `OR` logic. That is, if any of the items in a list evaluate to `true`, the exception prevents the rule from generating an alert. Likewise, `OR` logic is used for evaluating exceptions when more than one exception list is assigned to a rule. To use the `AND` operator, you can define multiple clauses (`entries`) in a single exception item. operationId: CreateExceptionList @@ -10095,6 +10322,16 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + type: detection type: object properties: description: @@ -10128,12 +10365,98 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + autogeneratedListId: + value: + _version: WzMsMV0= + created_at: '2025-01-09T01:05:23.019Z' + created_by: elastic + description: This is a sample detection type exception with an autogenerated list_id. + id: 28243c2f-624a-4443-823d-c0b894880931 + immutable: false + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: ad94de31-39f7-4ad7-b8e4-988bfa95f338 + type: detection + updated_at: '2025-01-09T01:05:23.020Z' + updated_by: elastic + version: 1 + namespaceAgnostic: + value: + _version: WzUsMV0= + created_at: '2025-01-09T01:10:36.369Z' + created_by: elastic + description: This is a sample agnostic endpoint type exception. + id: 1a744e77-22ca-4b6b-9085-54f55275ebe5 + immutable: false + list_id: b935eb55-7b21-4c1c-b235-faa1df23b3d6 + name: Sample Agnostic Endpoint Exception List + namespace_type: agnostic + os_types: + - linux + tags: + - malware + tie_breaker_id: 49ea0adc-a2b8-4d83-a8f3-2fb98301dea3 + type: endpoint + updated_at: '2025-01-09T01:10:36.369Z' + updated_by: elastic + version: 1 + typeDetection: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 + typeEndpoint: + value: + _version: WzQsMV0= + created_at: '2025-01-09T01:07:49.658Z' + created_by: elastic + description: This is a sample endpoint type exception list. + id: a79f4730-6e32-4278-abfc-349c0add7d54 + immutable: false + list_id: endpoint_list + name: Sample Endpoint Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 94a028af-8f47-427a-aca5-ffaf829e64ee + type: endpoint + updated_at: '2025-01-09T01:07:49.658Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10142,24 +10465,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10174,9 +10519,19 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: Different description + list_id: simple_list + name: Updated exception list name + os_types: + - linux + tags: + - draft malware + type: detection type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string description: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListDescription' @@ -10210,12 +10565,38 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleList: + value: + _version: WzExLDFd + created_at: '2025-01-07T20:43:55.264Z' + created_by: elastic + description: Different description + id: fa7f545f-191b-4d32-b1f0-c7cd62a79e55 + immutable: false + list_id: simple_list + name: Updated exception list name + namespace_type: single + os_types: [] + tags: + - draft malware + tie_breaker_id: 319fe983-acdd-4806-b6c4-3098eae9392f + type: detection + updated_at: '2025-01-07T21:32:03.726Z' + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10224,24 +10605,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PUT /api/exception_lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10254,18 +10657,22 @@ paths: description: Duplicate an existing exception list. operationId: DuplicateExceptionList parameters: - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' - - description: Determines whether to include expired exceptions in the exported list + - description: Determines whether to include expired exceptions in the duplicated list. Expiration date defined by `expire_time`. in: query name: include_expired_exceptions required: true @@ -10274,17 +10681,44 @@ paths: enum: - 'true' - 'false' + example: true type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + detectionExceptionList: + value: + _version: WzExNDY1LDFd + created_at: '2025-01-09T16:19:50.280Z' + created_by: elastic + description: This is a sample detection type exception + id: b2f4a715-6ab1-444c-8b1e-3fa1b1049429 + immutable: false + list_id: d6390d60-bce3-4a48-9002-52db600f329c + name: Sample Detection Exception List [Duplicate] + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 6fa670bd-666d-4c9c-9f1e-d1dbc516e985 + type: detection + updated_at: '2025-01-09T16:19:50.280Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type: Invalid enum value. Expected ''agnostic'' | ''single'', received ''foo''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10293,15 +10727,38 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/_duplicate] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response + '404': + content: + application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 + schema: + $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' + description: Exception list not found '405': content: application/json; Elastic-Api-Version=2023-10-31: @@ -10311,6 +10768,11 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10323,24 +10785,28 @@ paths: description: Export an exception list and its associated items to an NDJSON file. operationId: ExportExceptionList parameters: - - description: Exception list's identifier - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' - - description: Determines whether to include expired exceptions in the exported list + - description: Determines whether to include expired exceptions in the exported list. Expiration date defined by `expire_time`. + example: true in: query name: include_expired_exceptions required: true @@ -10354,6 +10820,12 @@ paths: '200': content: application/ndjson; Elastic-Api-Version=2023-10-31: + examples: + exportSavedObjectsResponse: + value: | + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This is a sample detection type exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample Detection Exception List","namespace_type":"single","os_types":[],"tags":["user added string for a tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This is a sample endpoint type exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some host","another host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample Endpoint Exception List","namespace_type":"single","os_types":["linux"],"tags":["user added string for a tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} + {"exported_exception_list_count":1,"exported_exception_list_item_count":1,"missing_exception_list_item_count":0,"missing_exception_list_items":[],"missing_exception_lists":[],"missing_exception_lists_count":0} schema: description: A `.ndjson` file containing specified exception list and its items format: binary @@ -10362,6 +10834,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: list_id: Required, namespace_type: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10370,24 +10848,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/_export] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10397,7 +10897,7 @@ paths: x-beta: true /api/exception_lists/_find: get: - description: Get a list of all exception lists. + description: Get a list of all exception list containers. operationId: FindExceptionLists parameters: - description: | @@ -10415,6 +10915,11 @@ paths: - description: | Determines whether the returned containers are Kibana associated with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + agnostic: + value: agnostic + single: + value: single in: query name: namespace_type required: false @@ -10429,6 +10934,7 @@ paths: name: page required: false schema: + example: 1 minimum: 1 type: integer - description: The number of exception lists to return per page @@ -10436,15 +10942,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 1 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: + example: name type: string - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -10452,11 +10960,36 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleLists: + value: + data: + - _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -10482,6 +11015,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10490,18 +11029,35 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/_find?namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10522,18 +11078,7 @@ paths: required: false schema: default: false - type: boolean - - in: query - name: overwrite_exceptions - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_action_connectors - required: false - schema: - default: false + example: false type: boolean - description: | Determines whether the list being imported will have a new `list_id` generated. @@ -10544,6 +11089,7 @@ paths: required: false schema: default: false + example: false type: boolean requestBody: content: @@ -10553,6 +11099,9 @@ paths: properties: file: description: A `.ndjson` file containing the exception list + example: | + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This is a sample detection type exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample Detection Exception List","namespace_type":"single","os_types":[],"tags":["user added string for a tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This is a sample endpoint type exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some host","another host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample Endpoint Exception List","namespace_type":"single","os_types":["linux"],"tags":["user added string for a tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} format: binary type: string required: true @@ -10560,6 +11109,34 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + withErrors: + value: + errors: + - error: + message: 'Error found importing exception list: Invalid value \"4\" supplied to \"list_id\"' + status_code: 400 + list_id: (unknown list_id) + - error: + message: 'Found that item_id: \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" already exists. Import of item_id: \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" skipped.' + status_code: 409 + item_id: f7fd00bb-dba8-4c93-9d59-6cbd427b6330 + list_id: 7d7cccb8-db72-4667-b1f3-648efad7c1ee + success: false, + success_count: 0, + success_count_exception_list_items: 0 + success_count_exception_lists: 0, + success_exception_list_items: false, + success_exception_lists: false, + withoutErrors: + value: + errors: [] + success: true + success_count: 2 + success_count_exception_list_items: 1 + success_count_exception_lists: 1 + success_exception_list_items: true + success_exception_lists: true, schema: type: object properties: @@ -10600,18 +11177,35 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/_import] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10624,19 +11218,24 @@ paths: description: Delete an exception list item using the `id` or `item_id` field. operationId: DeleteExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: Exception item's identifier. Either `id` or `item_id` must be specified in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -10646,6 +11245,37 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleExceptionItem: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response @@ -10653,6 +11283,10 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' - $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' @@ -10660,24 +11294,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/exception_lists/items?item_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10689,19 +11345,24 @@ paths: description: Get the details of an exception list item using the `id` or `item_id` field. operationId: ReadExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: Exception list item's identifier. Either `id` or `item_id` must be specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified. in: query name: item_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -10711,12 +11372,49 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10725,24 +11423,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/items?item_id=&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10760,6 +11480,27 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: comments: @@ -10770,8 +11511,7 @@ paths: entries: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemExpireTime' item_id: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId' list_id: @@ -10803,12 +11543,200 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + autogeneratedItemId: + value: + _version: WzYsMV0= + comments: [] + created_at: '2025-01-09T01:16:23.322Z' + created_by: elastic + description: This is a sample exception that has no item_id so it is autogenerated. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 323faa75-c657-4fa0-9084-8827612c207b + item_id: 80e6edf7-4b13-4414-858f-2fa74aa52b37 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Autogenerated Exception List Item ID + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: d6799986-3a23-4213-bc6d-ed9463a32f23 + type: simple + updated_at: '2025-01-09T01:16:23.322Z' + updated_by: elastic + detectionExceptionListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withExistEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withMatchAnyEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withMatchEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: included + type: match + value: Elastic N.V. + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withNestedEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - entries: + - field: signer + operator: included + type: match + value: Evil + - field: trusted + operator: included + type: match + value: true + field: file.signature + type: nested + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withValueListEntry: + value: + _version: WzcsMV0= + comments: [] + created_at: '2025-01-09T01:31:12.614Z' + created_by: elastic + description: Don't signal when agent.name is rock01 and source.ip is in the goodguys.txt list + entries: + - field: source.ip + list: + id: goodguys.txt + type: ip + operator: excluded + type: list + id: deb26876-297d-4677-8a1f-35467d2f1c4f + item_id: 686b129e-9b8d-4c59-8d8d-c93a9ea82c71 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Filter out good guys ip and agent.name rock01 + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 5e0288ce-6657-4c18-9dcc-00ec9e8cc6c8 + type: simple + updated_at: '2025-01-09T01:31:12.614Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request, + message: '[request body]: list_id: Expected string, received number' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10817,24 +11745,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'exception list item id: \"simple_list_item\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10848,10 +11798,24 @@ paths: requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + example: + comments: [] + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + item_id: simple_list_item + name: Updated name + namespace_type: single + tags: [] + type: simple schema: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string comments: $ref: '#/components/schemas/Security_Exceptions_API_UpdateExceptionListItemCommentArray' @@ -10861,8 +11825,7 @@ paths: entries: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemExpireTime' id: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' description: Either `id` or `item_id` must be specified @@ -10896,12 +11859,42 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleListItem: + value: + _version: WzEyLDFd + comments: [] + created_at: '2025-01-07T21:12:25.512Z' + created_by: elastic + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Updated name + namespace_type: single + os_types: [] + tags: [] + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: '2025-01-07T21:34:50.233Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: item_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10910,24 +11903,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PUT /api/exception_lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -10940,7 +11955,7 @@ paths: description: Get a list of all exception list items in the specified list. operationId: FindExceptionListItems parameters: - - description: List's id + - description: The `list_id`s of the items to fetch. in: query name: list_id required: true @@ -10951,6 +11966,10 @@ paths: - description: | Filters the returned results according to the value of the specified field, using the `:` syntax. + examples: + singleFilter: + value: + - exception-list.attributes.name:%My%20item in: query name: filter required: false @@ -10962,6 +11981,10 @@ paths: - description: | Determines whether the returned containers are Kibana associated with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + single: + value: + - single in: query name: namespace_type required: false @@ -10975,12 +11998,14 @@ paths: name: search required: false schema: + example: host.name type: string - description: The page number to return in: query name: page required: false schema: + example: 1 minimum: 0 type: integer - description: The number of exception list items to return per page @@ -10988,15 +12013,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 0 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. + example: name in: query name: sort_field required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -11004,11 +12031,47 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleListItems: + value: + data: + - _version: WzgsMV0= + comments: [] + created_at: '2025-01-07T21:12:25.512Z' + created_by: elastic + description: This is a sample exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - jupiter + - saturn + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: '2025-01-07T21:12:25.512Z' + updated_by: elastic + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -11036,6 +12099,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -11044,24 +12113,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/items/_find?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -11074,19 +12165,24 @@ paths: description: Get a summary of the specified exception list. operationId: ReadExceptionListSummary parameters: - - description: Exception list's identifier generated upon creation + - description: Exception list's identifier generated upon creation. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Exception list's human readable identifier + - description: Exception list's human readable identifier. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -11097,11 +12193,19 @@ paths: name: filter required: false schema: + example: exception-list-agnostic.attributes.tags:"policy:policy-1" OR exception-list-agnostic.attributes.tags:"policy:all" type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + summary: + value: + linux: 0 + macos: 0 + total: 0 + windows: 0 schema: type: object properties: @@ -11121,6 +12225,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -11129,24 +12239,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/summary?list_id=simple_list&namespace_type=agnostic] is unauthorized for user, this action is granted by the Kibana privileges [lists-summary] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -11165,6 +12297,15 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware type: object properties: description: @@ -11179,12 +12320,39 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + sharedList: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -11193,24 +12361,45 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -11688,6 +12877,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -12085,6 +13290,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -12214,6 +13437,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string data_output_id: nullable: true type: string @@ -12329,6 +13568,24 @@ paths: description: Override settings that are defined in the agent policy. Input settings cannot be overridden. The override option should be used only in unusual circumstances and not as a routine procedure. nullable: true type: object + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array space_ids: items: type: string @@ -12391,6 +13648,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -12788,6 +14061,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -12936,6 +14227,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -13333,6 +14640,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -13460,6 +14785,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -13857,6 +15198,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -13984,6 +15343,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string data_output_id: nullable: true type: string @@ -14099,6 +15474,24 @@ paths: description: Override settings that are defined in the agent policy. Input settings cannot be overridden. The override option should be used only in unusual circumstances and not as a routine procedure. nullable: true type: object + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array space_ids: items: type: string @@ -14161,6 +15554,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -14558,6 +15967,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -14705,6 +16132,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -15102,6 +16545,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -46134,11 +47595,14 @@ components: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListDescription' @@ -46159,13 +47623,16 @@ components: tags: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListVersion' @@ -46184,31 +47651,42 @@ components: - updated_at - updated_by Security_Endpoint_Exceptions_API_ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string Security_Endpoint_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: Exception list's human readable string identifier, e.g. `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItem: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string comments: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription' entries: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemExpireTime' id: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId' item_id: @@ -46226,13 +47704,16 @@ components: tags: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -46255,6 +47736,7 @@ components: comment: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -46262,6 +47744,7 @@ components: id: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -46272,10 +47755,15 @@ components: - created_at - created_by Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemComment' type: array Security_Endpoint_Exceptions_API_ExceptionListItemDescription: + description: Describes the exception list. type: string Security_Endpoint_Exceptions_API_ExceptionListItemEntry: anyOf: @@ -46417,22 +47905,40 @@ components: - excluded - included type: string + Security_Endpoint_Exceptions_API_ExceptionListItemExpireTime: + description: The exception item’s expiration date, in ISO format. This field is only available for regular exception items, not endpoint exceptions. + format: date-time + type: string Security_Endpoint_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object Security_Endpoint_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType' type: array Security_Endpoint_Exceptions_API_ExceptionListItemTags: items: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: String array containing words and phrases to help categorize exception items. + format: nonempty + minLength: 1 + type: string type: array Security_Endpoint_Exceptions_API_ExceptionListItemType: enum: @@ -46440,24 +47946,31 @@ components: type: string Security_Endpoint_Exceptions_API_ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object Security_Endpoint_Exceptions_API_ExceptionListName: + description: The name of the exception list. + example: My exception list type: string Security_Endpoint_Exceptions_API_ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string Security_Endpoint_Exceptions_API_ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType' type: array Security_Endpoint_Exceptions_API_ExceptionListTags: + description: String array containing words and phrases to help categorize exception containers. items: type: string type: array Security_Endpoint_Exceptions_API_ExceptionListType: + description: The type of exception list to be created. Different list types may denote where they can be utilized. enum: - detection - rule_default @@ -46468,6 +47981,7 @@ components: - endpoint_blocklists type: string Security_Endpoint_Exceptions_API_ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer Security_Endpoint_Exceptions_API_ExceptionNamespaceType: @@ -47126,6 +48640,17 @@ components: type: string required: - '@timestamp' + example: + '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host Security_Entity_Analytics_API_AssetCriticalityRecordEcsParts: type: object properties: @@ -47733,11 +49258,14 @@ components: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListDescription' @@ -47758,13 +49286,16 @@ components: tags: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListVersion' @@ -47783,31 +49314,42 @@ components: - updated_at - updated_by Security_Exceptions_API_ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string Security_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: Exception list's human readable string identifier, e.g. `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItem: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string comments: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemDescription' entries: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemExpireTime' id: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' item_id: @@ -47825,13 +49367,16 @@ components: tags: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -47854,6 +49399,7 @@ components: comment: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -47861,6 +49407,7 @@ components: id: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -47871,10 +49418,15 @@ components: - created_at - created_by Security_Exceptions_API_ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemComment' type: array Security_Exceptions_API_ExceptionListItemDescription: + description: Describes the exception list. type: string Security_Exceptions_API_ExceptionListItemEntry: anyOf: @@ -48016,22 +49568,40 @@ components: - excluded - included type: string + Security_Exceptions_API_ExceptionListItemExpireTime: + description: The exception item’s expiration date, in ISO format. This field is only available for regular exception items, not endpoint exceptions. + format: date-time + type: string Security_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object Security_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array Security_Exceptions_API_ExceptionListItemTags: items: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: String array containing words and phrases to help categorize exception items. + format: nonempty + minLength: 1 + type: string type: array Security_Exceptions_API_ExceptionListItemType: enum: @@ -48039,16 +49609,21 @@ components: type: string Security_Exceptions_API_ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object Security_Exceptions_API_ExceptionListName: + description: The name of the exception list. + example: My exception list type: string Security_Exceptions_API_ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string Security_Exceptions_API_ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array @@ -48078,10 +49653,12 @@ components: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListsImportBulkError' type: array Security_Exceptions_API_ExceptionListTags: + description: String array containing words and phrases to help categorize exception containers. items: type: string type: array Security_Exceptions_API_ExceptionListType: + description: The type of exception list to be created. Different list types may denote where they can be utilized. enum: - detection - rule_default @@ -48092,6 +49669,7 @@ components: - endpoint_blocklists type: string Security_Exceptions_API_ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer Security_Exceptions_API_ExceptionNamespaceType: @@ -48108,6 +49686,7 @@ components: Security_Exceptions_API_FindExceptionListItemsFilter: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' Security_Exceptions_API_FindExceptionListsFilter: + example: exception-list.attributes.name:%Detection%20List type: string Security_Exceptions_API_ListId: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index d98feafb3e985..0817106e13b41 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -5190,6 +5190,7 @@ paths: operationId: DeleteAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -5236,6 +5237,7 @@ paths: operationId: GetAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -5281,6 +5283,10 @@ paths: enum: - wait_for type: string + example: + criticality_level: high_impact + id_field: host.name + id_value: my_host required: true responses: '200': @@ -5404,6 +5410,31 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + page: 1 + per_page: 10 + records: + - '@timestamp': '2024-08-02T14:40:35.705Z' + asset: + criticality: medium_impact + criticality_level: medium_impact + host: + asset: + criticality: medium_impact + name: my_other_host + id_field: host.name + id_value: my_other_host + - '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host + total: 2 type: object properties: page: @@ -5425,7 +5456,7 @@ paths: - page - per_page - total - description: Bulk upload successful + description: Successfully retrieved asset criticality records summary: List asset criticality records tags: - Security Entity Analytics API @@ -10168,6 +10199,9 @@ paths: operationId: CreateRuleExceptionListItems parameters: - description: Detection rule's identifier + examples: + id: + value: 330bdd28-eedf-40e1-bed0-f10176c7f9e0 in: path name: id required: true @@ -10177,6 +10211,28 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + items: + - description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: items: @@ -10185,12 +10241,43 @@ paths: type: array required: - items - description: Rule exception list items + description: Rule exception items. required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + ruleExceptionItems: + value: + - _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic schema: items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' @@ -10199,6 +10286,17 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badPayload: + value: + error: Bad Request + message: Invalid request payload JSON format + statusCode: 400 + badRequest: + value: + error: Bad Request + message: '[request params]: id: Invalid uuid' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -10207,22 +10305,38 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response - summary: Create rule exception list items + summary: Create rule exception items tags: - Security Exceptions API /api/detection_engine/rules/prepackaged: @@ -12120,19 +12234,29 @@ paths: description: Delete an exception list using the `id` or `list_id` field. operationId: DeleteExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: Exception list's identifier. Either `id` or `list_id` must be specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. + examples: + autogeneratedId: + value: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + list_id: + value: simple_list in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -12142,12 +12266,39 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + detectionExceptionList: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12156,24 +12307,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/exception_lists?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12184,19 +12357,24 @@ paths: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: Exception list's identifier. Either `id` or `list_id` must be specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -12206,12 +12384,39 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + detectionType: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12220,24 +12425,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12246,7 +12473,7 @@ paths: - Security Exceptions API post: description: | - An exception list groups exception items and can be associated with detection rules. You can assign detection rules with multiple exception lists. + An exception list groups exception items and can be associated with detection rules. You can assign exception lists to multiple detection rules. > info > All exception items added to the same list are evaluated using `OR` logic. That is, if any of the items in a list evaluate to `true`, the exception prevents the rule from generating an alert. Likewise, `OR` logic is used for evaluating exceptions when more than one exception list is assigned to a rule. To use the `AND` operator, you can define multiple clauses (`entries`) in a single exception item. operationId: CreateExceptionList @@ -12254,6 +12481,16 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + type: detection type: object properties: description: @@ -12287,12 +12524,98 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + autogeneratedListId: + value: + _version: WzMsMV0= + created_at: '2025-01-09T01:05:23.019Z' + created_by: elastic + description: This is a sample detection type exception with an autogenerated list_id. + id: 28243c2f-624a-4443-823d-c0b894880931 + immutable: false + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: ad94de31-39f7-4ad7-b8e4-988bfa95f338 + type: detection + updated_at: '2025-01-09T01:05:23.020Z' + updated_by: elastic + version: 1 + namespaceAgnostic: + value: + _version: WzUsMV0= + created_at: '2025-01-09T01:10:36.369Z' + created_by: elastic + description: This is a sample agnostic endpoint type exception. + id: 1a744e77-22ca-4b6b-9085-54f55275ebe5 + immutable: false + list_id: b935eb55-7b21-4c1c-b235-faa1df23b3d6 + name: Sample Agnostic Endpoint Exception List + namespace_type: agnostic + os_types: + - linux + tags: + - malware + tie_breaker_id: 49ea0adc-a2b8-4d83-a8f3-2fb98301dea3 + type: endpoint + updated_at: '2025-01-09T01:10:36.369Z' + updated_by: elastic + version: 1 + typeDetection: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 + typeEndpoint: + value: + _version: WzQsMV0= + created_at: '2025-01-09T01:07:49.658Z' + created_by: elastic + description: This is a sample endpoint type exception list. + id: a79f4730-6e32-4278-abfc-349c0add7d54 + immutable: false + list_id: endpoint_list + name: Sample Endpoint Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 94a028af-8f47-427a-aca5-ffaf829e64ee + type: endpoint + updated_at: '2025-01-09T01:07:49.658Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12301,24 +12624,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12332,9 +12677,19 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: Different description + list_id: simple_list + name: Updated exception list name + os_types: + - linux + tags: + - draft malware + type: detection type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string description: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListDescription' @@ -12368,12 +12723,38 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleList: + value: + _version: WzExLDFd + created_at: '2025-01-07T20:43:55.264Z' + created_by: elastic + description: Different description + id: fa7f545f-191b-4d32-b1f0-c7cd62a79e55 + immutable: false + list_id: simple_list + name: Updated exception list name + namespace_type: single + os_types: [] + tags: + - draft malware + tie_breaker_id: 319fe983-acdd-4806-b6c4-3098eae9392f + type: detection + updated_at: '2025-01-07T21:32:03.726Z' + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12382,24 +12763,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PUT /api/exception_lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12411,18 +12814,22 @@ paths: description: Duplicate an existing exception list. operationId: DuplicateExceptionList parameters: - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' - - description: Determines whether to include expired exceptions in the exported list + - description: Determines whether to include expired exceptions in the duplicated list. Expiration date defined by `expire_time`. in: query name: include_expired_exceptions required: true @@ -12431,17 +12838,44 @@ paths: enum: - 'true' - 'false' + example: true type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + detectionExceptionList: + value: + _version: WzExNDY1LDFd + created_at: '2025-01-09T16:19:50.280Z' + created_by: elastic + description: This is a sample detection type exception + id: b2f4a715-6ab1-444c-8b1e-3fa1b1049429 + immutable: false + list_id: d6390d60-bce3-4a48-9002-52db600f329c + name: Sample Detection Exception List [Duplicate] + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 6fa670bd-666d-4c9c-9f1e-d1dbc516e985 + type: detection + updated_at: '2025-01-09T16:19:50.280Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type: Invalid enum value. Expected ''agnostic'' | ''single'', received ''foo''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12450,15 +12884,38 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/_duplicate] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response + '404': + content: + application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 + schema: + $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' + description: Exception list not found '405': content: application/json; Elastic-Api-Version=2023-10-31: @@ -12468,6 +12925,11 @@ paths: '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12479,24 +12941,28 @@ paths: description: Export an exception list and its associated items to an NDJSON file. operationId: ExportExceptionList parameters: - - description: Exception list's identifier - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionNamespaceType' - - description: Determines whether to include expired exceptions in the exported list + - description: Determines whether to include expired exceptions in the exported list. Expiration date defined by `expire_time`. + example: true in: query name: include_expired_exceptions required: true @@ -12510,6 +12976,12 @@ paths: '200': content: application/ndjson; Elastic-Api-Version=2023-10-31: + examples: + exportSavedObjectsResponse: + value: | + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This is a sample detection type exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample Detection Exception List","namespace_type":"single","os_types":[],"tags":["user added string for a tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This is a sample endpoint type exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some host","another host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample Endpoint Exception List","namespace_type":"single","os_types":["linux"],"tags":["user added string for a tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} + {"exported_exception_list_count":1,"exported_exception_list_item_count":1,"missing_exception_list_item_count":0,"missing_exception_list_items":[],"missing_exception_lists":[],"missing_exception_lists_count":0} schema: description: A `.ndjson` file containing specified exception list and its items format: binary @@ -12518,6 +12990,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: list_id: Required, namespace_type: Required' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12526,24 +13004,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/_export] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12552,7 +13052,7 @@ paths: - Security Exceptions API /api/exception_lists/_find: get: - description: Get a list of all exception lists. + description: Get a list of all exception list containers. operationId: FindExceptionLists parameters: - description: | @@ -12570,6 +13070,11 @@ paths: - description: | Determines whether the returned containers are Kibana associated with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + agnostic: + value: agnostic + single: + value: single in: query name: namespace_type required: false @@ -12584,6 +13089,7 @@ paths: name: page required: false schema: + example: 1 minimum: 1 type: integer - description: The number of exception lists to return per page @@ -12591,15 +13097,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 1 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: + example: name type: string - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -12607,11 +13115,36 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleLists: + value: + data: + - _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -12637,6 +13170,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12645,18 +13184,35 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/_find?namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12676,18 +13232,7 @@ paths: required: false schema: default: false - type: boolean - - in: query - name: overwrite_exceptions - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_action_connectors - required: false - schema: - default: false + example: false type: boolean - description: | Determines whether the list being imported will have a new `list_id` generated. @@ -12698,6 +13243,7 @@ paths: required: false schema: default: false + example: false type: boolean requestBody: content: @@ -12707,6 +13253,9 @@ paths: properties: file: description: A `.ndjson` file containing the exception list + example: | + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This is a sample detection type exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample Detection Exception List","namespace_type":"single","os_types":[],"tags":["user added string for a tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This is a sample endpoint type exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some host","another host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample Endpoint Exception List","namespace_type":"single","os_types":["linux"],"tags":["user added string for a tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} format: binary type: string required: true @@ -12714,6 +13263,34 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + withErrors: + value: + errors: + - error: + message: 'Error found importing exception list: Invalid value \"4\" supplied to \"list_id\"' + status_code: 400 + list_id: (unknown list_id) + - error: + message: 'Found that item_id: \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" already exists. Import of item_id: \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" skipped.' + status_code: 409 + item_id: f7fd00bb-dba8-4c93-9d59-6cbd427b6330 + list_id: 7d7cccb8-db72-4667-b1f3-648efad7c1ee + success: false, + success_count: 0, + success_count_exception_list_items: 0 + success_count_exception_lists: 0, + success_exception_list_items: false, + success_exception_lists: false, + withoutErrors: + value: + errors: [] + success: true + success_count: 2 + success_count_exception_list_items: 1 + success_count_exception_lists: 1 + success_exception_list_items: true + success_exception_lists: true, schema: type: object properties: @@ -12754,18 +13331,35 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/_import] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12777,19 +13371,24 @@ paths: description: Delete an exception list item using the `id` or `item_id` field. operationId: DeleteExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: Exception item's identifier. Either `id` or `item_id` must be specified in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified in: query name: item_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -12799,6 +13398,37 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleExceptionItem: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response @@ -12806,6 +13436,10 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' - $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' @@ -12813,24 +13447,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [DELETE /api/exception_lists/items?item_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12841,19 +13497,24 @@ paths: description: Get the details of an exception list item using the `id` or `item_id` field. operationId: ReadExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: Exception list item's identifier. Either `id` or `item_id` must be specified. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified. in: query name: item_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -12863,12 +13524,49 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12877,24 +13575,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/items?item_id=&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12911,6 +13631,27 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: comments: @@ -12921,8 +13662,7 @@ paths: entries: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemExpireTime' item_id: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemHumanId' list_id: @@ -12954,12 +13694,200 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + autogeneratedItemId: + value: + _version: WzYsMV0= + comments: [] + created_at: '2025-01-09T01:16:23.322Z' + created_by: elastic + description: This is a sample exception that has no item_id so it is autogenerated. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 323faa75-c657-4fa0-9084-8827612c207b + item_id: 80e6edf7-4b13-4414-858f-2fa74aa52b37 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Autogenerated Exception List Item ID + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: d6799986-3a23-4213-bc6d-ed9463a32f23 + type: simple + updated_at: '2025-01-09T01:16:23.322Z' + updated_by: elastic + detectionExceptionListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withExistEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withMatchAnyEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withMatchEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: included + type: match + value: Elastic N.V. + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withNestedEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: '2025-01-07T20:07:33.119Z' + created_by: elastic + description: This is a sample detection type exception item. + entries: + - entries: + - field: signer + operator: included + type: match + value: Evil + - field: trusted + operator: included + type: match + value: true + field: file.signature + type: nested + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: '2025-01-07T20:07:33.119Z' + updated_by: elastic + withValueListEntry: + value: + _version: WzcsMV0= + comments: [] + created_at: '2025-01-09T01:31:12.614Z' + created_by: elastic + description: Don't signal when agent.name is rock01 and source.ip is in the goodguys.txt list + entries: + - field: source.ip + list: + id: goodguys.txt + type: ip + operator: excluded + type: list + id: deb26876-297d-4677-8a1f-35467d2f1c4f + item_id: 686b129e-9b8d-4c59-8d8d-c93a9ea82c71 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Filter out good guys ip and agent.name rock01 + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 5e0288ce-6657-4c18-9dcc-00ec9e8cc6c8 + type: simple + updated_at: '2025-01-09T01:31:12.614Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request, + message: '[request body]: list_id: Expected string, received number' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -12968,24 +13896,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [POST /api/exception_lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'exception list item id: \"simple_list_item\" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -12998,10 +13948,24 @@ paths: requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + example: + comments: [] + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + item_id: simple_list_item + name: Updated name + namespace_type: single + tags: [] + type: simple schema: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string comments: $ref: '#/components/schemas/Security_Exceptions_API_UpdateExceptionListItemCommentArray' @@ -13011,8 +13975,7 @@ paths: entries: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemExpireTime' id: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' description: Either `id` or `item_id` must be specified @@ -13046,12 +14009,42 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleListItem: + value: + _version: WzEyLDFd + comments: [] + created_at: '2025-01-07T21:12:25.512Z' + created_by: elastic + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Updated name + namespace_type: single + os_types: [] + tags: [] + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: '2025-01-07T21:34:50.233Z' + updated_by: elastic schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItem' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: item_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -13060,24 +14053,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [PUT /api/exception_lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list item not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -13089,7 +14104,7 @@ paths: description: Get a list of all exception list items in the specified list. operationId: FindExceptionListItems parameters: - - description: List's id + - description: The `list_id`s of the items to fetch. in: query name: list_id required: true @@ -13100,6 +14115,10 @@ paths: - description: | Filters the returned results according to the value of the specified field, using the `:` syntax. + examples: + singleFilter: + value: + - exception-list.attributes.name:%My%20item in: query name: filter required: false @@ -13111,6 +14130,10 @@ paths: - description: | Determines whether the returned containers are Kibana associated with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + single: + value: + - single in: query name: namespace_type required: false @@ -13124,12 +14147,14 @@ paths: name: search required: false schema: + example: host.name type: string - description: The page number to return in: query name: page required: false schema: + example: 1 minimum: 0 type: integer - description: The number of exception list items to return per page @@ -13137,15 +14162,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 0 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. + example: name in: query name: sort_field required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -13153,11 +14180,47 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + simpleListItems: + value: + data: + - _version: WzgsMV0= + comments: [] + created_at: '2025-01-07T21:12:25.512Z' + created_by: elastic + description: This is a sample exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - jupiter + - saturn + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: '2025-01-07T21:12:25.512Z' + updated_by: elastic + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -13185,6 +14248,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -13193,24 +14262,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/items/_find?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -13222,19 +14313,24 @@ paths: description: Get a summary of the specified exception list. operationId: ReadExceptionListSummary parameters: - - description: Exception list's identifier generated upon creation + - description: Exception list's identifier generated upon creation. in: query name: id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListId' - - description: Exception list's human readable identifier + - description: Exception list's human readable identifier. in: query name: list_id required: false schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -13245,11 +14341,19 @@ paths: name: filter required: false schema: + example: exception-list-agnostic.attributes.tags:"policy:policy-1" OR exception-list-agnostic.attributes.tags:"policy:all" type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + summary: + value: + linux: 0 + macos: 0 + total: 0 + windows: 0 schema: type: object properties: @@ -13269,6 +14373,12 @@ paths: '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request query]: namespace_type.0: Invalid enum value. Expected ''agnostic'' | ''single'', received ''blob''' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -13277,24 +14387,46 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + error: Forbidden + message: API [GET /api/exception_lists/summary?list_id=simple_list&namespace_type=agnostic] is unauthorized for user, this action is granted by the Kibana privileges [lists-summary] + statusCode: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '404': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list not found response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -13312,6 +14444,15 @@ paths: content: application/json; Elastic-Api-Version=2023-10-31: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware type: object properties: description: @@ -13326,12 +14467,39 @@ paths: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + sharedList: + value: + _version: WzIsMV0= + created_at: '2025-01-07T19:34:27.942Z' + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: '2025-01-07T19:34:27.942Z' + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionList' description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' @@ -13340,24 +14508,45 @@ paths: '401': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/Security_Exceptions_API_PlatformErrorResponse' description: Not enough privileges response '409': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Exception list already exists response '500': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/Security_Exceptions_API_SiemErrorResponse' description: Internal server error response @@ -13829,6 +15018,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -14226,6 +15431,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -14354,6 +15577,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string data_output_id: nullable: true type: string @@ -14469,6 +15708,24 @@ paths: description: Override settings that are defined in the agent policy. Input settings cannot be overridden. The override option should be used only in unusual circumstances and not as a routine procedure. nullable: true type: object + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array space_ids: items: type: string @@ -14531,6 +15788,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -14928,6 +16201,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -15075,6 +16366,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -15472,6 +16779,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -15598,6 +16923,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -15995,6 +17336,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -16121,6 +17480,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string data_output_id: nullable: true type: string @@ -16236,6 +17611,24 @@ paths: description: Override settings that are defined in the agent policy. Input settings cannot be overridden. The override option should be used only in unusual circumstances and not as a routine procedure. nullable: true type: object + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array space_ids: items: type: string @@ -16298,6 +17691,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -16695,6 +18104,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -16841,6 +18268,22 @@ paths: - name - enabled type: array + agentless: + additionalProperties: false + type: object + properties: + resources: + additionalProperties: false + type: object + properties: + requests: + additionalProperties: false + type: object + properties: + cpu: + type: string + memory: + type: string agents: type: number data_output_id: @@ -17238,6 +18681,24 @@ paths: - created_at - created_by type: array + required_versions: + items: + additionalProperties: false + type: object + properties: + percentage: + description: Target percentage of agents to auto upgrade + maximum: 100 + minimum: 0 + type: number + version: + description: Target version for automatic agent upgrade + type: string + required: + - version + - percentage + nullable: true + type: array revision: type: number schema_version: @@ -53009,11 +54470,14 @@ components: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListDescription' @@ -53034,13 +54498,16 @@ components: tags: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListVersion' @@ -53059,31 +54526,42 @@ components: - updated_at - updated_by Security_Endpoint_Exceptions_API_ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string Security_Endpoint_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: Exception list's human readable string identifier, e.g. `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItem: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string comments: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemDescription' entries: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemExpireTime' id: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemId' item_id: @@ -53101,13 +54579,16 @@ components: tags: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -53130,6 +54611,7 @@ components: comment: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -53137,6 +54619,7 @@ components: id: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -53147,10 +54630,15 @@ components: - created_at - created_by Security_Endpoint_Exceptions_API_ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListItemComment' type: array Security_Endpoint_Exceptions_API_ExceptionListItemDescription: + description: Describes the exception list. type: string Security_Endpoint_Exceptions_API_ExceptionListItemEntry: anyOf: @@ -53292,22 +54780,40 @@ components: - excluded - included type: string + Security_Endpoint_Exceptions_API_ExceptionListItemExpireTime: + description: The exception item’s expiration date, in ISO format. This field is only available for regular exception items, not endpoint exceptions. + format: date-time + type: string Security_Endpoint_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object Security_Endpoint_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string Security_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType' type: array Security_Endpoint_Exceptions_API_ExceptionListItemTags: items: - $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_NonEmptyString' + description: String array containing words and phrases to help categorize exception items. + format: nonempty + minLength: 1 + type: string type: array Security_Endpoint_Exceptions_API_ExceptionListItemType: enum: @@ -53315,24 +54821,31 @@ components: type: string Security_Endpoint_Exceptions_API_ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object Security_Endpoint_Exceptions_API_ExceptionListName: + description: The name of the exception list. + example: My exception list type: string Security_Endpoint_Exceptions_API_ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string Security_Endpoint_Exceptions_API_ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/Security_Endpoint_Exceptions_API_ExceptionListOsType' type: array Security_Endpoint_Exceptions_API_ExceptionListTags: + description: String array containing words and phrases to help categorize exception containers. items: type: string type: array Security_Endpoint_Exceptions_API_ExceptionListType: + description: The type of exception list to be created. Different list types may denote where they can be utilized. enum: - detection - rule_default @@ -53343,6 +54856,7 @@ components: - endpoint_blocklists type: string Security_Endpoint_Exceptions_API_ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer Security_Endpoint_Exceptions_API_ExceptionNamespaceType: @@ -54001,6 +55515,17 @@ components: type: string required: - '@timestamp' + example: + '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host Security_Entity_Analytics_API_AssetCriticalityRecordEcsParts: type: object properties: @@ -54608,11 +56133,14 @@ components: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListDescription' @@ -54633,13 +56161,16 @@ components: tags: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListVersion' @@ -54658,31 +56189,42 @@ components: - updated_at - updated_by Security_Exceptions_API_ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string Security_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: Exception list's human readable string identifier, e.g. `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItem: type: object properties: _version: + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. type: string comments: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemDescription' entries: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemExpireTime' id: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemId' item_id: @@ -54700,13 +56242,16 @@ components: tags: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemTags' tie_breaker_id: + description: Field used in search to ensure all containers are sorted and returned correctly. type: string type: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -54729,6 +56274,7 @@ components: comment: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -54736,6 +56282,7 @@ components: id: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -54746,10 +56293,15 @@ components: - created_at - created_by Security_Exceptions_API_ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListItemComment' type: array Security_Exceptions_API_ExceptionListItemDescription: + description: Describes the exception list. type: string Security_Exceptions_API_ExceptionListItemEntry: anyOf: @@ -54891,22 +56443,40 @@ components: - excluded - included type: string + Security_Exceptions_API_ExceptionListItemExpireTime: + description: The exception item’s expiration date, in ISO format. This field is only available for regular exception items, not endpoint exceptions. + format: date-time + type: string Security_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItemMeta: additionalProperties: true type: object Security_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string Security_Exceptions_API_ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array Security_Exceptions_API_ExceptionListItemTags: items: - $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' + description: String array containing words and phrases to help categorize exception items. + format: nonempty + minLength: 1 + type: string type: array Security_Exceptions_API_ExceptionListItemType: enum: @@ -54914,16 +56484,21 @@ components: type: string Security_Exceptions_API_ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object Security_Exceptions_API_ExceptionListName: + description: The name of the exception list. + example: My exception list type: string Security_Exceptions_API_ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string Security_Exceptions_API_ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListOsType' type: array @@ -54953,10 +56528,12 @@ components: $ref: '#/components/schemas/Security_Exceptions_API_ExceptionListsImportBulkError' type: array Security_Exceptions_API_ExceptionListTags: + description: String array containing words and phrases to help categorize exception containers. items: type: string type: array Security_Exceptions_API_ExceptionListType: + description: The type of exception list to be created. Different list types may denote where they can be utilized. enum: - detection - rule_default @@ -54967,6 +56544,7 @@ components: - endpoint_blocklists type: string Security_Exceptions_API_ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer Security_Exceptions_API_ExceptionNamespaceType: @@ -54983,6 +56561,7 @@ components: Security_Exceptions_API_FindExceptionListItemsFilter: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' Security_Exceptions_API_FindExceptionListsFilter: + example: exception-list.attributes.name:%Detection%20List type: string Security_Exceptions_API_ListId: $ref: '#/components/schemas/Security_Exceptions_API_NonEmptyString' diff --git a/package.json b/package.json index 4957709dec6a5..650a6446209d5 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "@elastic/ebt": "^1.1.1", "@elastic/ecs": "^8.11.5", "@elastic/elasticsearch": "^8.16.0", - "@elastic/ems-client": "8.6.2", + "@elastic/ems-client": "8.6.3", "@elastic/eui": "99.0.0-borealis.1", "@elastic/eui-theme-borealis": "0.0.8", "@elastic/filesaver": "1.1.2", @@ -545,7 +545,7 @@ "@kbn/global-search-test-plugin": "link:x-pack/test/plugin_functional/plugins/global_search_test", "@kbn/graph-plugin": "link:x-pack/platform/plugins/private/graph", "@kbn/grid-example-plugin": "link:examples/grid_example", - "@kbn/grid-layout": "link:packages/kbn-grid-layout", + "@kbn/grid-layout": "link:src/platform/packages/private/kbn-grid-layout", "@kbn/grokdebugger-plugin": "link:x-pack/platform/plugins/private/grokdebugger", "@kbn/grouping": "link:src/platform/packages/shared/kbn-grouping", "@kbn/guided-onboarding": "link:src/platform/packages/shared/kbn-guided-onboarding", @@ -1117,7 +1117,7 @@ "expiry-js": "0.1.7", "exponential-backoff": "^3.1.1", "extract-zip": "^2.0.1", - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", "fflate": "^0.6.9", @@ -1155,7 +1155,6 @@ "json-stable-stringify": "^1.0.1", "json-stringify-pretty-compact": "1.2.0", "json-stringify-safe": "5.0.1", - "jsonpath-plus": "^10.2.0", "jsonwebtoken": "^9.0.2", "jsts": "^1.6.2", "kea": "^2.6.0", @@ -1176,7 +1175,7 @@ "minimatch": "^3.1.2", "moment": "^2.30.1", "moment-duration-format": "^2.3.2", - "moment-timezone": "^0.5.45", + "moment-timezone": "^0.5.46", "monaco-editor": "^0.44.0", "monaco-yaml": "^5.1.0", "murmurhash": "^2.0.1", @@ -1187,8 +1186,8 @@ "nodemailer": "^6.9.15", "normalize-path": "^3.0.0", "nunjucks": "^3.2.4", - "oas": "^25.2.0", - "object-hash": "^1.3.1", + "oas": "^25.2.1", + "object-hash": "^3.0.0", "object-path-immutable": "^3.1.1", "openai": "^4.72.0", "openpgp": "5.10.1", @@ -1217,14 +1216,12 @@ "react-dom-18": "npm:react-dom@~18.2.0", "react-dropzone": "^4.2.9", "react-fast-compare": "^2.0.4", - "react-grid-layout": "^1.3.4", "react-hook-form": "^7.44.2", "react-intl": "6.6.6", "react-markdown": "^6.0.3", "react-popper-tooltip": "^3.1.1", "react-recompose": "^0.33.0", "react-redux": "^7.2.8", - "react-resizable": "^3.0.4", "react-reverse-portal": "^2.1.2", "react-router": "^5.3.4", "react-router-config": "^5.1.1", @@ -1279,7 +1276,7 @@ "use-resize-observer": "^9.1.0", "usng.js": "^0.4.5", "utility-types": "^3.10.0", - "uuid": "9.0.0", + "uuid": "10.0.0", "vega": "^5.24.0", "vega-interpreter": "^1.0.4", "vega-lite": "^5.5.0", @@ -1611,7 +1608,7 @@ "@types/jsonwebtoken": "^9.0.0", "@types/license-checker": "15.0.0", "@types/loader-utils": "^2.0.3", - "@types/lodash": "^4.17.13", + "@types/lodash": "^4.17.14", "@types/lru-cache": "^5.1.0", "@types/lz-string": "^1.3.34", "@types/mapbox__vector-tile": "1.3.0", @@ -1631,7 +1628,7 @@ "@types/nodemailer": "^6.4.0", "@types/normalize-path": "^3.0.0", "@types/nunjucks": "^3.2.6", - "@types/object-hash": "^1.3.0", + "@types/object-hash": "^3.0.6", "@types/ora": "^1.3.5", "@types/papaparse": "^5.0.3", "@types/pbf": "3.0.2", @@ -1643,7 +1640,6 @@ "@types/rbush": "^3.0.0", "@types/react": "~18.2.0", "@types/react-dom": "~18.2.0", - "@types/react-grid-layout": "^1.3.2", "@types/react-is": "^17.0.3", "@types/react-recompose": "^0.33.4", "@types/react-router": "^5.1.20", @@ -1668,7 +1664,7 @@ "@types/tinycolor2": "^1.4.1", "@types/tough-cookie": "^4.0.5", "@types/type-detect": "^4.0.1", - "@types/uuid": "^9.0.0", + "@types/uuid": "^10.0.0", "@types/vinyl": "^2.0.4", "@types/vinyl-fs": "^3.0.2", "@types/watchpack": "^1.1.5", @@ -1724,7 +1720,7 @@ "cypress-recurse": "^1.35.2", "date-fns": "^2.29.3", "dependency-check": "^4.1.0", - "dependency-cruiser": "^16.4.2", + "dependency-cruiser": "^16.8.0", "ejs": "^3.1.10", "enzyme": "^3.11.0", "enzyme-to-json": "^3.6.2", @@ -1788,7 +1784,7 @@ "marge": "^1.0.1", "micromatch": "^4.0.8", "mini-css-extract-plugin": "1.1.0", - "minimist": "^1.2.6", + "minimist": "^1.2.8", "mocha": "^10.3.0", "mocha-junit-reporter": "^2.0.2", "mocha-multi-reporters": "^1.5.1", diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index f14b11d4f6e36..fcb6a89e3284a 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -481,6 +481,7 @@ "agent_features", "agent_features.enabled", "agent_features.name", + "agentless", "data_output_id", "description", "download_source_id", @@ -601,6 +602,7 @@ "agent_features", "agent_features.enabled", "agent_features.name", + "agentless", "data_output_id", "description", "download_source_id", diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 22a0760ea4d8a..fc76793d4223f 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -1624,6 +1624,10 @@ } } }, + "agentless": { + "dynamic": false, + "properties": {} + }, "data_output_id": { "type": "keyword" }, @@ -1994,6 +1998,10 @@ } } }, + "agentless": { + "dynamic": false, + "properties": {} + }, "data_output_id": { "type": "keyword" }, diff --git a/packages/kbn-dependency-ownership/src/cli.test.ts b/packages/kbn-dependency-ownership/src/cli.test.ts deleted file mode 100644 index f3bfc7feea34d..0000000000000 --- a/packages/kbn-dependency-ownership/src/cli.test.ts +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { configureYargs } from './cli'; -import { identifyDependencyOwnership } from './dependency_ownership'; - -jest.mock('chalk', () => ({ - green: jest.fn((str) => str), - yellow: jest.fn((str) => str), - cyan: jest.fn((str) => str), - magenta: jest.fn((str) => str), - blue: jest.fn((str) => str), - bold: { magenta: jest.fn((str) => str), blue: jest.fn((str) => str) }, -})); - -jest.mock('./dependency_ownership', () => ({ - identifyDependencyOwnership: jest.fn(), -})); - -jest.mock('./cli', () => ({ - ...jest.requireActual('./cli'), - runCLI: jest.fn(), -})); - -describe('dependency-ownership CLI', () => { - const parser = configureYargs() - .fail((message: string) => { - throw new Error(message); - }) - .exitProcess(false); - - beforeEach(() => { - jest.spyOn(console, 'log').mockImplementation(() => {}); - }); - - afterEach(() => { - jest.resetAllMocks(); - }); - - it('should parse the dependency option correctly', () => { - const argv = parser.parse(['--dependency', 'lodash']); - expect(argv).toMatchObject({ - dependency: 'lodash', - }); - - expect(identifyDependencyOwnership).toHaveBeenCalledWith( - expect.objectContaining({ dependency: 'lodash' }) - ); - }); - - it('should parse the owner option correctly', () => { - const argv = parser.parse(['--owner', '@elastic/kibana-core']); - expect(argv).toMatchObject({ - owner: '@elastic/kibana-core', - }); - - expect(identifyDependencyOwnership).toHaveBeenCalledWith( - expect.objectContaining({ owner: '@elastic/kibana-core' }) - ); - }); - - it('should parse the missing-owner option correctly', () => { - const argv = parser.parse(['--missing-owner']); - expect(argv).toMatchObject({ - missingOwner: true, - }); - - expect(identifyDependencyOwnership).toHaveBeenCalledWith( - expect.objectContaining({ missingOwner: true }) - ); - }); - - it('should parse the output-path option correctly', () => { - const argv = parser.parse([ - '--output-path', - './output.json', - '--owner', - '@elastic/kibana-core', - ]); - - expect(argv).toMatchObject({ - owner: '@elastic/kibana-core', - outputPath: './output.json', - }); - - expect(identifyDependencyOwnership).toHaveBeenCalledWith( - expect.objectContaining({ owner: '@elastic/kibana-core' }) - ); - }); - - it('should support aliases for options', () => { - const argv1 = parser.parse(['-d', 'lodash', '-f', './out.json']); - expect(argv1).toMatchObject({ - dependency: 'lodash', - outputPath: './out.json', - }); - - const argv2 = parser.parse(['-o', '@elastic/kibana-core', '-f', './out.json']); - - expect(argv2).toMatchObject({ - owner: '@elastic/kibana-core', - outputPath: './out.json', - }); - }); - - it('should throw an error for invalid flag combinations', () => { - expect(() => { - parser.parse(['--dependency', 'lodash', '--missing-owner']); - }).toThrow('You must provide either a dependency, owner, or missingOwner flag to search for'); - - expect(identifyDependencyOwnership).not.toHaveBeenCalled(); - }); -}); diff --git a/packages/kbn-dependency-ownership/src/cli.ts b/packages/kbn-dependency-ownership/src/cli.ts index 3023e0da3e5de..00c8d6cb7f0fd 100644 --- a/packages/kbn-dependency-ownership/src/cli.ts +++ b/packages/kbn-dependency-ownership/src/cli.ts @@ -7,109 +7,109 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { run } from '@kbn/dev-cli-runner'; +import { createFailError } from '@kbn/dev-cli-errors'; import nodePath from 'path'; -import yargs from 'yargs'; -import chalk from 'chalk'; import fs from 'fs'; -import { identifyDependencyOwnership } from './dependency_ownership'; +import { DependenciesByOwner, identifyDependencyOwnership } from './dependency_ownership'; interface CLIArgs { dependency?: string; owner?: string; missingOwner?: boolean; outputPath?: string; + failIfUnowned?: boolean; } -export const configureYargs = () => { - return yargs(process.argv.slice(2)) - .command( - '*', - chalk.green('Identify the dependency ownership'), - (y) => { - y.version(false) - .option('dependency', { - alias: 'd', - describe: chalk.yellow('Show who owns the given dependency'), - type: 'string', - }) - .option('owner', { - alias: 'o', - type: 'string', - describe: chalk.magenta('Show dependencies owned by the given owner'), - }) - .option('missing-owner', { - describe: chalk.cyan('Show dependencies that are not owned by any team'), - type: 'boolean', - }) - .option('output-path', { - alias: 'f', - describe: chalk.blue('Specify the output file to save results as JSON'), - type: 'string', - }) - .check(({ dependency, owner, missingOwner }: Partial) => { - const notProvided = [dependency, owner, missingOwner].filter( - (arg) => arg === undefined - ); +export async function identifyDependencyOwnershipCLI() { + await run( + async ({ log, flags }) => { + // Check if flags are valid + const { dependency, owner, missingOwner, outputPath, failIfUnowned } = flags as CLIArgs; + if (!dependency && !owner && !missingOwner) { + throw createFailError( + 'You must provide either a dependency, owner, or missingOwner flag. Use --help for more information.' + ); + } - if (notProvided.length === 1) { - throw new Error( - 'You must provide either a dependency, owner, or missingOwner flag to search for' - ); - } + if (failIfUnowned && !missingOwner) { + throw createFailError( + 'You must provide the missingOwner flag to use the failIfUnowned flag' + ); + } - return true; - }) - .example( - '--owner @elastic/kibana-core', - chalk.blue('Searches for all dependencies owned by the Kibana Core team') - ); - }, - async (argv: CLIArgs) => { - const { dependency, owner, missingOwner, outputPath } = argv; + if (owner) { + log.write(`Searching for dependencies owned by ${owner}...\n`); + } - if (owner) { - console.log(chalk.yellow(`Searching for dependencies owned by ${owner}...\n`)); - } + const result = identifyDependencyOwnership({ dependency, owner, missingOwner }); + if (failIfUnowned) { + const { prodDependencies = [] as string[], devDependencies = [] as string[] } = + result as DependenciesByOwner; - try { - const result = identifyDependencyOwnership({ dependency, owner, missingOwner }); + const uncoveredDependencies = [...prodDependencies, ...devDependencies]; + if (uncoveredDependencies.length > 0) { + log.write('Dependencies without an owner:'); + log.write(uncoveredDependencies.map((dep) => ` - ${dep}`).join('\n')); + throw createFailError( + `Found ${uncoveredDependencies.length} dependencies without an owner. Please update \`renovate.json\` to include these dependencies.\nVisit https://docs.elastic.dev/kibana-dev-docs/third-party-dependencies#dependency-ownership for more information.` + ); + } else { + log.success('All dependencies have an owner'); + } + } - if (outputPath) { - const isJsonFile = nodePath.extname(outputPath) === '.json'; - const outputFile = isJsonFile - ? outputPath - : nodePath.join(outputPath, 'dependency-ownership.json'); + if (outputPath) { + const isJsonFile = nodePath.extname(outputPath) === '.json'; + const outputFile = isJsonFile + ? outputPath + : nodePath.join(outputPath, 'dependency-ownership.json'); - const outputDir = nodePath.dirname(outputFile); + const outputDir = nodePath.dirname(outputFile); - if (!fs.existsSync(outputDir)) { - fs.mkdirSync(outputDir, { recursive: true }); - } + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } - fs.writeFile(outputFile, JSON.stringify(result, null, 2), (err) => { - if (err) { - console.error(chalk.red(`Failed to save results to ${outputFile}: ${err.message}`)); - } else { - console.log(chalk.green(`Results successfully saved to ${outputFile}`)); - } - }); + fs.writeFile(outputFile, JSON.stringify(result, null, 2), (err) => { + if (err) { + throw createFailError(`Failed to save results to ${outputFile}: ${err.message}`); } else { - console.log(chalk.yellow('No output file specified, displaying results below:\n')); - console.log(JSON.stringify(result, null, 2)); + log.success(`Results successfully saved to ${outputFile}`); } - } catch (error) { - console.error('Error fetching dependency ownership:', error.message); - } + }); + } else { + log.debug('No output file specified, displaying results below:'); + log.success(JSON.stringify(result, null, 2)); } - ) - .help(); -}; + }, + { + description: `A CLI tool for analyzing package ownership.`, + usage: 'node scripts/dependency_ownership --dependency ', + flags: { + string: ['dependency', 'owner', 'outputPath'], + boolean: ['missingOwner', 'failIfUnowned'], + alias: { + d: 'dependency', + o: 'owner', + f: 'outputPath', + }, + help: ` + --dependency, -d Show who owns the given dependency + --owner, -o Show dependencies owned by the given owner + --missingOwner Show dependencies that are not owned by any team + --outputPath, -f Specify the output file to save results as JSON + --failIfUnowned Fail if any dependencies are not owned by any team + `, + }, + } + ); +} export const runCLI = () => { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - configureYargs().argv; + identifyDependencyOwnershipCLI(); }; if (!process.env.JEST_WORKER_ID) { diff --git a/packages/kbn-dependency-ownership/src/dependency_ownership.ts b/packages/kbn-dependency-ownership/src/dependency_ownership.ts index 53b6dc7275afa..7a384dc12b79a 100644 --- a/packages/kbn-dependency-ownership/src/dependency_ownership.ts +++ b/packages/kbn-dependency-ownership/src/dependency_ownership.ts @@ -18,7 +18,7 @@ interface GetDependencyOwnershipParams { missingOwner?: boolean; } -interface DependenciesByOwner { +export interface DependenciesByOwner { prodDependencies: string[]; devDependencies: string[]; } diff --git a/packages/kbn-dependency-ownership/src/rule.test.ts b/packages/kbn-dependency-ownership/src/rule.test.ts index 9ec6a6ff181af..f268e8b138bb9 100644 --- a/packages/kbn-dependency-ownership/src/rule.test.ts +++ b/packages/kbn-dependency-ownership/src/rule.test.ts @@ -11,6 +11,7 @@ import { ruleCoversDependency } from './rule'; describe('ruleCoversDependency', () => { const mockRule = { + groupName: 'mock', matchPackageNames: ['lodash'], matchPackagePatterns: ['^react'], matchDepNames: ['@testing-library/react'], diff --git a/packages/kbn-dependency-ownership/src/rule.ts b/packages/kbn-dependency-ownership/src/rule.ts index fae5b712f759e..b884891d68cc1 100644 --- a/packages/kbn-dependency-ownership/src/rule.ts +++ b/packages/kbn-dependency-ownership/src/rule.ts @@ -8,6 +8,7 @@ */ export interface RenovatePackageRule { + groupName: string; matchPackageNames?: string[]; matchDepNames?: string[]; matchPackagePatterns?: string[]; @@ -19,9 +20,15 @@ export interface RenovatePackageRule { } export function ruleFilter(rule: RenovatePackageRule) { + // Explicit list of rules that are allowed to be disabled. + const allowedDisabledRules = [ + 'bazel', // Per operations team. This is slated for removal, and does not make sense to track. + 'typescript', // These updates are always handled manually + 'webpack', // While we are in the middle of a webpack upgrade. TODO: Remove this once we are done. + ]; return ( - // Only include rules that are enabled - rule.enabled !== false && + // Only include rules that are enabled or explicitly allowed to be disabled + (allowedDisabledRules.includes(rule.groupName) || rule.enabled !== false) && // Only include rules that have a team reviewer rule.reviewers?.some((reviewer) => reviewer.startsWith('team:')) ); diff --git a/packages/kbn-dependency-ownership/tsconfig.json b/packages/kbn-dependency-ownership/tsconfig.json index 3587c78fa0269..8c7e455371c9f 100644 --- a/packages/kbn-dependency-ownership/tsconfig.json +++ b/packages/kbn-dependency-ownership/tsconfig.json @@ -17,5 +17,7 @@ ], "kbn_references": [ "@kbn/repo-info", + "@kbn/dev-cli-runner", + "@kbn/dev-cli-errors", ], } diff --git a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts index 36466c3e3637e..9cf108bb6bc7e 100644 --- a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts +++ b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/failed_tests_reporter_cli.ts @@ -15,7 +15,6 @@ import { createFailError, createFlagError } from '@kbn/dev-cli-errors'; import { CiStatsReporter } from '@kbn/ci-stats-reporter'; import globby from 'globby'; import normalize from 'normalize-path'; - import { getFailures } from './get_failures'; import { GithubApi } from './github_api'; import { updateFailureIssue, createFailureIssue } from './report_failure'; @@ -26,6 +25,7 @@ import { reportFailuresToEs } from './report_failures_to_es'; import { reportFailuresToFile } from './report_failures_to_file'; import { getBuildkiteMetadata } from './buildkite_metadata'; import { ExistingFailedTestIssues } from './existing_failed_test_issues'; +import { generateScoutTestFailureArtifacts } from './generate_scout_test_failure_artifacts'; const DEFAULT_PATTERNS = [Path.resolve(REPO_ROOT, 'target/junit/**/*.xml')]; const DISABLE_MISSING_TEST_REPORT_ERRORS = @@ -101,88 +101,89 @@ run( return; } - if (!reportPaths.length) { - throw createFailError(`Unable to find any junit reports with patterns [${patterns}]`); - } - - log.info('found', reportPaths.length, 'junit reports', reportPaths); + // Scout test failures reporting + await generateScoutTestFailureArtifacts({ log, bkMeta }); - const existingIssues = new ExistingFailedTestIssues(log); - for (const reportPath of reportPaths) { - const report = await readTestReport(reportPath); - const messages = Array.from(getReportMessageIter(report)); - const failures = getFailures(report); + if (reportPaths.length) { + log.info('found', reportPaths.length, 'junit reports', reportPaths); - await existingIssues.loadForFailures(failures); + const existingIssues = new ExistingFailedTestIssues(log); + for (const reportPath of reportPaths) { + const report = await readTestReport(reportPath); + const messages = Array.from(getReportMessageIter(report)); + const failures = getFailures(report); - if (indexInEs) { - await reportFailuresToEs(log, failures); - } + await existingIssues.loadForFailures(failures); - for (const failure of failures) { - const pushMessage = (msg: string) => { - messages.push({ - classname: failure.classname, - name: failure.name, - message: msg, - }); - }; - - if (failure.likelyIrrelevant) { - pushMessage( - 'Failure is likely irrelevant' + - (updateGithub ? ', so an issue was not created or updated' : '') - ); - continue; + if (indexInEs) { + await reportFailuresToEs(log, failures); } - const existingIssue = existingIssues.getForFailure(failure); - if (existingIssue) { - const { newBody, newCount } = await updateFailureIssue( + for (const failure of failures) { + const pushMessage = (msg: string) => { + messages.push({ + classname: failure.classname, + name: failure.name, + message: msg, + }); + }; + + if (failure.likelyIrrelevant) { + pushMessage( + 'Failure is likely irrelevant' + + (updateGithub ? ', so an issue was not created or updated' : '') + ); + continue; + } + + const existingIssue = existingIssues.getForFailure(failure); + if (existingIssue) { + const { newBody, newCount } = await updateFailureIssue( + buildUrl, + existingIssue, + githubApi, + branch, + pipeline + ); + const url = existingIssue.github.htmlUrl; + existingIssue.github.body = newBody; + failure.githubIssue = url; + failure.failureCount = updateGithub ? newCount : newCount - 1; + pushMessage(`Test has failed ${newCount - 1} times on tracked branches: ${url}`); + if (updateGithub) { + pushMessage(`Updated existing issue: ${url} (fail count: ${newCount})`); + } + continue; + } + + const newIssue = await createFailureIssue( buildUrl, - existingIssue, + failure, githubApi, branch, - pipeline + pipeline, + prependTitle ); - const url = existingIssue.github.htmlUrl; - existingIssue.github.body = newBody; - failure.githubIssue = url; - failure.failureCount = updateGithub ? newCount : newCount - 1; - pushMessage(`Test has failed ${newCount - 1} times on tracked branches: ${url}`); + existingIssues.addNewlyCreated(failure, newIssue); + pushMessage('Test has not failed recently on tracked branches'); if (updateGithub) { - pushMessage(`Updated existing issue: ${url} (fail count: ${newCount})`); + pushMessage(`Created new issue: ${newIssue.html_url}`); + failure.githubIssue = newIssue.html_url; } - continue; - } - - const newIssue = await createFailureIssue( - buildUrl, - failure, - githubApi, - branch, - pipeline, - prependTitle - ); - existingIssues.addNewlyCreated(failure, newIssue); - pushMessage('Test has not failed recently on tracked branches'); - if (updateGithub) { - pushMessage(`Created new issue: ${newIssue.html_url}`); - failure.githubIssue = newIssue.html_url; + failure.failureCount = updateGithub ? 1 : 0; } - failure.failureCount = updateGithub ? 1 : 0; - } - // mutates report to include messages and writes updated report to disk - await addMessagesToReport({ - report, - messages, - log, - reportPath, - dryRun: !flags['report-update'], - }); + // mutates report to include messages and writes updated report to disk + await addMessagesToReport({ + report, + messages, + log, + reportPath, + dryRun: !flags['report-update'], + }); - await reportFailuresToFile(log, failures, bkMeta, getRootMetadata(report)); + await reportFailuresToFile(log, failures, bkMeta, getRootMetadata(report)); + } } } finally { await CiStatsReporter.fromEnv(log).metrics([ diff --git a/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/generate_scout_test_failure_artifacts.ts b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/generate_scout_test_failure_artifacts.ts new file mode 100644 index 0000000000000..b4641225af5c3 --- /dev/null +++ b/packages/kbn-failed-test-reporter-cli/failed_tests_reporter/generate_scout_test_failure_artifacts.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import Path from 'path'; + +import globby from 'globby'; +import fs from 'fs'; +import { createHash } from 'crypto'; +import { ToolingLog } from '@kbn/tooling-log'; +import { BuildkiteMetadata } from './buildkite_metadata'; + +const SCOUT_TEST_FAILURE_DIR_PATTERN = '.scout/reports/scout-playwright-test-failures-*'; +const SUMMARY_REPORT_FILENAME = 'test-failures-summary.json'; + +export async function generateScoutTestFailureArtifacts({ + log, + bkMeta, +}: { + log: ToolingLog; + bkMeta: BuildkiteMetadata; +}) { + log.info('Searching for Scout test failure reports'); + + const dirs = await globby(SCOUT_TEST_FAILURE_DIR_PATTERN, { + onlyDirectories: true, + }); + + if (dirs.length === 0) { + log.info(`No directories found matching pattern: ${SCOUT_TEST_FAILURE_DIR_PATTERN}`); + return; + } + + log.info(`Found ${dirs.length} directories matching pattern: ${SCOUT_TEST_FAILURE_DIR_PATTERN}`); + for (const dirPath of dirs) { + const summaryFilePath = Path.join(dirPath, SUMMARY_REPORT_FILENAME); + // Check if summary JSON exists + if (!fs.existsSync(summaryFilePath)) { + throw new Error(`Summary file not found in: ${dirPath}`); + } + + const summaryData: Array<{ name: string; htmlReportFilename: string }> = JSON.parse( + fs.readFileSync(summaryFilePath, 'utf-8') + ); + + log.info(`Creating failure artifacts for report in ${dirPath}`); + for (const { name, htmlReportFilename } of summaryData) { + const htmlFilePath = Path.join(dirPath, htmlReportFilename); + const failureHTML = fs.readFileSync(htmlFilePath, 'utf-8'); + + const hash = createHash('md5').update(name).digest('hex'); // eslint-disable-line @kbn/eslint/no_unsafe_hash + const filenameBase = `${ + process.env.BUILDKITE_JOB_ID ? process.env.BUILDKITE_JOB_ID + '_' : '' + }${hash}`; + const dir = Path.join('target', 'test_failures'); + const failureJSON = JSON.stringify( + { + name, + hash, + buildId: bkMeta.buildId, + jobId: bkMeta.jobId, + url: bkMeta.url, + jobUrl: bkMeta.jobUrl, + jobName: bkMeta.jobName, + }, + null, + 2 + ); + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(Path.join(dir, `${filenameBase}.html`), failureHTML, 'utf8'); + fs.writeFileSync(Path.join(dir, `${filenameBase}.json`), failureJSON, 'utf8'); + } + } +} diff --git a/packages/kbn-ftr-common-functional-services/index.ts b/packages/kbn-ftr-common-functional-services/index.ts index 10ded3da0d352..890258ecfeedc 100644 --- a/packages/kbn-ftr-common-functional-services/index.ts +++ b/packages/kbn-ftr-common-functional-services/index.ts @@ -45,3 +45,4 @@ export { DeploymentService } from './services/deployment'; export { IndexPatternsService } from './services/index_patterns'; export { RandomnessService } from './services/randomness'; export { KibanaSupertestProvider, ElasticsearchSupertestProvider } from './services/supertest'; +export { retryForSuccess } from './services/retry/retry_for_success'; diff --git a/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.test.ts b/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.test.ts new file mode 100644 index 0000000000000..4ad240663d5a8 --- /dev/null +++ b/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.test.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { retryForSuccess } from './retry_for_success'; +import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; + +describe('Retry for success', () => { + it(`should print out attempt counts with the retryCount parameter`, async () => { + const retryCount = 3; + const log = new ToolingLog(); + const writer = new ToolingLogCollectingWriter(); + log.setWriters([writer]); + + let count = 0; + const block = async () => { + count++; + if (count !== retryCount) throw Error('whoops, could not find anything'); + }; + + await retryForSuccess(log, { + block, + timeout: 4500, + methodName: 'retryForSuccess unit test', + retryCount, + onFailureBlock: async () => log.debug('handled failure'), + }); + + expect(writer.messages).toMatchInlineSnapshot(` + Array [ + " debg --- retryForSuccess unit test error: whoops, could not find anything - Attempt #: 1", + " debg handled failure", + " debg --- retryForSuccess unit test failed again with the same message... - Attempt #: 2", + " debg handled failure", + ] + `); + }); + it(`should NOT print out attempt counts without the retryCount parameter`, async () => { + const log = new ToolingLog(); + const writer = new ToolingLogCollectingWriter(); + log.setWriters([writer]); + + let count = 0; + const block = async () => { + count++; + if (count !== 3) throw Error('whoops, could not find anything'); + }; + + await retryForSuccess(log, { + block, + timeout: 4500, + methodName: 'retryForSuccess unit test', + onFailureBlock: async () => log.debug('handled failure'), + }); + + expect(writer.messages).toMatchInlineSnapshot(` + Array [ + " debg --- retryForSuccess unit test error: whoops, could not find anything", + " debg handled failure", + " debg --- retryForSuccess unit test failed again with the same message...", + " debg handled failure", + ] + `); + }); +}); diff --git a/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts b/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts index 921efacd88fcc..f44e2618190fc 100644 --- a/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts +++ b/packages/kbn-ftr-common-functional-services/services/retry/retry_for_success.ts @@ -68,6 +68,7 @@ export async function retryForSuccess(log: ToolingLog, options: Options) { let lastError; let attemptCounter = 0; const addText = (str: string | undefined) => (str ? ` waiting for '${str}'` : ''); + const attemptMsg = (counter: number) => ` - Attempt #: ${counter}`; while (true) { // Aborting if no retry attempts are left (opt-in) @@ -91,9 +92,12 @@ export async function retryForSuccess(log: ToolingLog, options: Options) { // Run opt-in onFailureBlock before the next attempt if (lastError && onFailureBlock) { const before = await runAttempt(onFailureBlock); - if ('error' in before) { - log.debug(`--- onRetryBlock error: ${before.error.message} - Attempt #: ${attemptCounter}`); - } + if ('error' in before) + log.debug( + `--- onRetryBlock error: ${before.error.message}${ + retryCount ? attemptMsg(attemptCounter) : '' + }` + ); } const attempt = await runAttempt(block); @@ -103,15 +107,18 @@ export async function retryForSuccess(log: ToolingLog, options: Options) { } if ('error' in attempt) { - if (lastError && lastError.message === attempt.error.message) { + if (lastError && lastError.message === attempt.error.message) log.debug( - `--- ${methodName} failed again with the same message... - Attempt #: ${attemptCounter}` + `--- ${methodName} failed again with the same message...${ + retryCount ? attemptMsg(attemptCounter) : '' + }` ); - } else { + else log.debug( - `--- ${methodName} error: ${attempt.error.message} - Attempt #: ${attemptCounter}` + `--- ${methodName} error: ${attempt.error.message}${ + retryCount ? attemptMsg(attemptCounter) : '' + }` ); - } lastError = attempt.error; } diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 2ea536635c01f..6f31687b36bac 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -22,7 +22,7 @@ pageLoadAssetSize: core: 564663 crossClusterReplication: 65408 customIntegrations: 22034 - dashboard: 68015 + dashboard: 19000 dashboardEnhanced: 65646 data: 454087 dataQuality: 19384 @@ -122,8 +122,8 @@ pageLoadAssetSize: observabilityShared: 111036 osquery: 107090 painlessLab: 179748 - presentationPanel: 55463 - presentationUtil: 58834 + presentationPanel: 11468 + presentationUtil: 33186 productDocBase: 22500 profiling: 36694 remoteClusters: 51327 diff --git a/packages/kbn-scout-reporting/src/cli/initialize_report_datastream.ts b/packages/kbn-scout-reporting/src/cli/initialize_report_datastream.ts index 314794a9181b7..e6f774007f355 100644 --- a/packages/kbn-scout-reporting/src/cli/initialize_report_datastream.ts +++ b/packages/kbn-scout-reporting/src/cli/initialize_report_datastream.ts @@ -8,7 +8,7 @@ */ import { Command } from '@kbn/dev-cli-runner'; -import { ScoutReportDataStream } from '../reporting/report'; +import { ScoutReportDataStream } from '../reporting/report/events'; import { getValidatedESClient } from './common'; export const initializeReportDatastream: Command = { diff --git a/packages/kbn-scout-reporting/src/cli/upload_events.ts b/packages/kbn-scout-reporting/src/cli/upload_events.ts index 8c2ef1bd67347..97880a7910e99 100644 --- a/packages/kbn-scout-reporting/src/cli/upload_events.ts +++ b/packages/kbn-scout-reporting/src/cli/upload_events.ts @@ -10,7 +10,7 @@ import fs from 'node:fs'; import { Command } from '@kbn/dev-cli-runner'; import { createFlagError } from '@kbn/dev-cli-errors'; -import { ScoutReportDataStream } from '../reporting/report'; +import { ScoutReportDataStream } from '../reporting/report/events'; import { getValidatedESClient } from './common'; export const uploadEvents: Command = { diff --git a/packages/kbn-scout-reporting/src/helpers/cli_processing.test.ts b/packages/kbn-scout-reporting/src/helpers/cli_processing.test.ts new file mode 100644 index 0000000000000..7f37884517014 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/cli_processing.test.ts @@ -0,0 +1,114 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { getRunTarget, stripRunCommand } from './cli_processing'; + +describe('cli_processing', () => { + describe('stripRunCommand', () => { + it(`should return the correct run command when started with 'npx'`, () => { + const argv = ['npx', 'playwright', 'test', '--config', 'path/to/config', '--grep=@svlSearch']; + + expect(stripRunCommand(argv)).toBe( + 'npx playwright test --config path/to/config --grep=@svlSearch' + ); + }); + + it(`should return the correct run command when started with 'node'`, () => { + const argv = [ + '/Users/user/.nvm/versions/node/v20.15.1/bin/node', + 'node_modules/.bin/playwright', + 'test', + '--config', + 'path/to/config', + '--grep=@svlSearch', + ]; + + expect(stripRunCommand(argv)).toBe( + 'npx playwright test --config path/to/config --grep=@svlSearch' + ); + }); + + it(`should throw error if command has less than 3 arguments`, () => { + const argv = [ + '/Users/user/.nvm/versions/node/v20.15.1/bin/node', + 'node_modules/.bin/playwright', + ]; + expect(() => stripRunCommand(argv)).toThrow( + /Invalid command arguments: must include at least 'npx playwright test'/ + ); + }); + + it(`should throw error if command does not start with 'node' or 'npx'`, () => { + const argv = [ + 'node_modules/.bin/playwright', + 'test', + '--config', + 'path/to/config', + '--grep=@svlSearch', + ]; + expect(() => stripRunCommand(argv)).toThrow( + /Invalid command structure: Expected "node test" or "npx playwright test"/ + ); + }); + }); + + describe('getRunTarget', () => { + it(`should return the correct mode for '--grep=@svlSearch'`, () => { + const argv = [ + 'node', + 'scripts/scout.js', + 'run-tests', + '--config', + 'path/to/config', + '--grep=@svlSearch', + ]; + expect(getRunTarget(argv)).toBe('serverless-search'); + }); + + it(`should return the correct mode for '--grep @svlSearch'`, () => { + const argv = [ + 'node', + 'scripts/scout.js', + 'run-tests', + '--config', + 'path/to/config', + '--grep', + '@svlSearch', + ]; + expect(getRunTarget(argv)).toBe('serverless-search'); + }); + + it(`should return 'undefined' for an invalid --grep tag`, () => { + const argv = [ + 'node', + 'scripts/scout.js', + 'run-tests', + '--config', + 'path/to/config', + '--grep=@invalidTag', + ]; + expect(getRunTarget(argv)).toBe('undefined'); + }); + + it(`should return 'undefined' if --grep argument is not provided`, () => { + const argv = ['node', 'scripts/scout.js']; + expect(getRunTarget(argv)).toBe('undefined'); + }); + + it(`should return 'undefined' for '--grep='`, () => { + const argv = ['node', 'scripts/scout.js', '--grep=']; + expect(getRunTarget(argv)).toBe('undefined'); + }); + + it(`should return 'undefined' if '--grep' argument is without value`, () => { + const argv = ['node', 'scripts/scout.js', '--grep']; + expect(getRunTarget(argv)).toBe('undefined'); + }); + }); +}); diff --git a/packages/kbn-scout-reporting/src/helpers/cli_processing.ts b/packages/kbn-scout-reporting/src/helpers/cli_processing.ts new file mode 100644 index 0000000000000..d39068cf3e845 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/cli_processing.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export const stripRunCommand = (commandArgs: string[]): string => { + if (!Array.isArray(commandArgs) || commandArgs.length < 3) { + throw new Error(`Invalid command arguments: must include at least 'npx playwright test'`); + } + + const isNodeCommand = commandArgs[0].endsWith('node'); + const isNpxCommand = commandArgs[0] === 'npx' && commandArgs[1] === 'playwright'; + + if (!isNodeCommand && !isNpxCommand) { + throw new Error( + 'Invalid command structure: Expected "node test" or "npx playwright test".' + ); + } + + const restArgs = commandArgs.slice(2); + // Rebuild the command with only valid arguments + return `npx playwright ${restArgs.join(' ')}`; +}; + +export function getRunTarget(argv: string[] = process.argv): string { + const tagsToMode: Record = { + '@ess': 'stateful', + '@svlSearch': 'serverless-search', + '@svlOblt': 'serverless-oblt', + '@svlSecurity': 'serverless-security', + }; + + const grepIndex = argv.findIndex((arg) => arg === '--grep' || arg.startsWith('--grep=')); + if (grepIndex !== -1) { + const tag = argv[grepIndex].startsWith('--grep=') + ? argv[grepIndex].split('=')[1] + : argv[grepIndex + 1] || ''; // Look at the next argument if '--grep' is used without `=` + + return tagsToMode[tag] || 'undefined'; + } + + return 'undefined'; +} diff --git a/packages/kbn-scout-reporting/src/helpers/index.ts b/packages/kbn-scout-reporting/src/helpers/index.ts new file mode 100644 index 0000000000000..cb86e656086a6 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { getPluginManifestData, type PluginManifest } from './plugin_manifest'; +export { excapeHtmlCharacters, stripFilePath, parseStdout } from './text_processing'; +export { getRunTarget, stripRunCommand } from './cli_processing'; +export { getTestIDForTitle, generateTestRunId } from './test_id_generator'; diff --git a/packages/kbn-scout-reporting/src/helpers/plugin_manifest.test.ts b/packages/kbn-scout-reporting/src/helpers/plugin_manifest.test.ts new file mode 100644 index 0000000000000..ee35ac46dcc01 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/plugin_manifest.test.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import path from 'path'; +import fs from 'fs'; +import { getManifestPath, readPluginManifest, getPluginManifestData } from './plugin_manifest'; + +jest.mock('fs'); + +describe('plugin_manifest', () => { + describe('getManifestPath', () => { + it('should resolve the manifest path correctly for a valid config path', () => { + const configPath = '/plugins/my_plugin/ui_tests/playwright.config.ts'; + const expectedPath = path.resolve('/plugins/my_plugin/kibana.jsonc'); + expect(getManifestPath(configPath)).toBe(expectedPath); + }); + + it(`should throw an error if 'ui_tests' is not in the path`, () => { + const configPath = '/plugins/my_plugin/tests/playwright.config.ts'; + expect(() => getManifestPath(configPath)).toThrow( + /Invalid path: "ui_tests" directory not found/ + ); + }); + }); + + describe('readPluginManifest', () => { + const filePath = '/plugins/my_plugin/kibana.jsonc'; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should read and parse the manifest file correctly', () => { + const fileContent = ` + { + "id": "my_plugin", + "group": "platform", + "visibility": "private", + "owner": ["team"], + "plugin": { "id": "my_plugin" } + } + `; + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + jest.spyOn(fs, 'readFileSync').mockReturnValue(fileContent); + + const result = readPluginManifest(filePath); + expect(result).toEqual({ + id: 'my_plugin', + group: 'platform', + visibility: 'private', + owner: ['team'], + plugin: { id: 'my_plugin' }, + }); + }); + + it('should throw an error if the file does not exist', () => { + jest.spyOn(fs, 'existsSync').mockReturnValue(false); + expect(() => readPluginManifest(filePath)).toThrow(/Manifest file not found/); + }); + + it('should throw an error if the file cannot be read', () => { + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + jest.spyOn(fs, 'readFileSync').mockImplementation(() => { + throw new Error('File read error'); + }); + expect(() => readPluginManifest(filePath)).toThrow(/Failed to read manifest file/); + }); + + it('should throw an error for invalid JSON content', () => { + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + jest.spyOn(fs, 'readFileSync').mockReturnValue('{ invalid json }'); + expect(() => readPluginManifest(filePath)).toThrow(/Invalid JSON format in manifest file/); + }); + + it('should throw an error for missing required fields', () => { + const fileContent = `{ + "group": "platform", + "visibility": "public" + }`; + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + jest.spyOn(fs, 'readFileSync').mockReturnValue(fileContent); + expect(() => readPluginManifest(filePath)).toThrow(/Invalid manifest structure/); + }); + }); + + describe('getPluginManifestData', () => { + const configPath = '/plugins/my_plugin/ui_tests/playwright.config.ts'; + const manifestContent = ` + { + "id": "my_plugin", + "group": "platform", + "visibility": "public", + "owner": ["team"], + "plugin": { "id": "my_plugin" } + } + `; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should resolve and parse the manifest data correctly', () => { + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + jest.spyOn(fs, 'readFileSync').mockReturnValue(manifestContent); + + const result = getPluginManifestData(configPath); + expect(result).toEqual({ + id: 'my_plugin', + group: 'platform', + visibility: 'public', + owner: ['team'], + plugin: { id: 'my_plugin' }, + }); + }); + }); +}); diff --git a/packages/kbn-scout-reporting/src/helpers/plugin_manifest.ts b/packages/kbn-scout-reporting/src/helpers/plugin_manifest.ts new file mode 100644 index 0000000000000..3066aed832694 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/plugin_manifest.ts @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import path from 'path'; +import fs from 'fs'; +import { Jsonc } from '@kbn/repo-packages'; + +export interface PluginManifest { + id: string; + group: string; + owner: string[]; + visibility: string; + plugin: { id: string }; +} + +/** + * Resolves the path to the `kibana.jsonc` manifest based on the Playwright configuration file path. + * @param configPath - Absolute path to the Playwright configuration file. + * @returns Absolute path to the `kibana.jsonc` file. + * @throws Error if `ui_tests` is not found in the path. + */ +export const getManifestPath = (configPath: string): string => { + const pathSegments = configPath.split(path.sep); + const testDirIndex = pathSegments.indexOf('ui_tests'); + + if (testDirIndex === -1) { + throw new Error( + `Invalid path: "ui_tests" directory not found in ${configPath}. + Ensure playwright configuration file is in the plugin directory: '/plugins//ui_tests/'` + ); + } + + const manifestSegments = pathSegments.slice(0, testDirIndex).concat('kibana.jsonc'); + return path.resolve('/', ...manifestSegments); // Ensure absolute path +}; + +/** + * Reads and parses the `kibana.jsonc` manifest file. + * @param filePath - Absolute path to the `kibana.jsonc` file. + * @returns Parsed `PluginManifest` object. + * @throws Error if the file does not exist, cannot be read, or is invalid. + */ +export const readPluginManifest = (filePath: string): PluginManifest => { + if (!fs.existsSync(filePath)) { + throw new Error(`Manifest file not found: ${filePath}`); + } + + let fileContent: string; + try { + fileContent = fs.readFileSync(filePath, 'utf8'); + } catch (error) { + throw new Error(`Failed to read manifest file at ${filePath}: ${error.message}`); + } + + let manifest: Partial; + try { + manifest = Jsonc.parse(fileContent) as Partial; + } catch (error) { + throw new Error(`Invalid JSON format in manifest file at ${filePath}: ${error.message}`); + } + + const { id, group, visibility, owner, plugin } = manifest; + if (!id || !group || !visibility || !plugin?.id) { + throw new Error( + `Invalid manifest structure at ${filePath}. Expected required fields: id, group, visibility, plugin.id` + ); + } + + return { id, group, visibility, owner: owner || [], plugin }; +}; + +/** + * Resolves the plugin manifest file path and reads its content. + * @param configPath - Absolute path to the Playwright configuration file in the plugin directory. + * @returns Parsed `PluginManifest` object. + */ +export const getPluginManifestData = (configPath: string): PluginManifest => { + const manifestPath = getManifestPath(configPath); + return readPluginManifest(manifestPath); +}; diff --git a/packages/kbn-scout-reporting/src/helpers/test_id_generator.ts b/packages/kbn-scout-reporting/src/helpers/test_id_generator.ts new file mode 100644 index 0000000000000..525f5b46d40d8 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/test_id_generator.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { createHash, randomBytes } from 'node:crypto'; + +export function generateTestRunId() { + return randomBytes(8).toString('hex'); +} + +export function getTestIDForTitle(title: string) { + return createHash('sha256').update(title).digest('hex').slice(0, 31); +} diff --git a/packages/kbn-scout-reporting/src/helpers/text_processing.test.ts b/packages/kbn-scout-reporting/src/helpers/text_processing.test.ts new file mode 100644 index 0000000000000..374291ba8c0a4 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/text_processing.test.ts @@ -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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import stripANSI from 'strip-ansi'; +import { parseStdout } from './text_processing'; + +jest.mock('strip-ansi', () => jest.fn((input) => input.replace(/\x1b\[[0-9;]*m/g, ''))); + +describe('text_processing', () => { + describe('parseStdout', () => { + it('should concatenate multiple strings and strip ANSI codes', () => { + const stdout = ['Line 1 with ANSI \x1b[31mred\x1b[0m text', '\nLine 2 plain text']; + const result = parseStdout(stdout); + + expect(stripANSI).toHaveBeenCalledWith( + 'Line 1 with ANSI \x1b[31mred\x1b[0m text\nLine 2 plain text' + ); + expect(result).toBe('Line 1 with ANSI red text\nLine 2 plain text'); + }); + + it('should concatenate multiple buffers and strip ANSI codes', () => { + const stdout = [ + Buffer.from('Buffer line 1 with ANSI \x1b[32mgreen\x1b[0m text'), + Buffer.from('\nBuffer line 2 plain text'), + ]; + const result = parseStdout(stdout); + + expect(stripANSI).toHaveBeenCalledWith( + 'Buffer line 1 with ANSI \x1b[32mgreen\x1b[0m text\nBuffer line 2 plain text' + ); + expect(result).toBe('Buffer line 1 with ANSI green text\nBuffer line 2 plain text'); + }); + + it('should handle an empty array and return an empty string', () => { + const stdout: Array = []; + const result = parseStdout(stdout); + + expect(stripANSI).toHaveBeenCalledWith(''); + expect(result).toBe(''); + }); + + it('should handle an array with only an empty string', () => { + const stdout = ['']; + const result = parseStdout(stdout); + + expect(stripANSI).toHaveBeenCalledWith(''); + expect(result).toBe(''); + }); + + it('should handle an array with only an empty buffer', () => { + const stdout = [Buffer.from('')]; + const result = parseStdout(stdout); + + expect(stripANSI).toHaveBeenCalledWith(''); + expect(result).toBe(''); + }); + }); +}); diff --git a/packages/kbn-scout-reporting/src/helpers/text_processing.ts b/packages/kbn-scout-reporting/src/helpers/text_processing.ts new file mode 100644 index 0000000000000..14dc0a8c3c7e2 --- /dev/null +++ b/packages/kbn-scout-reporting/src/helpers/text_processing.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import stripANSI from 'strip-ansi'; +import { REPO_ROOT } from '@kbn/repo-info'; + +export const stripFilePath = (filePath: string): string => + stripANSI(filePath.replaceAll(`${REPO_ROOT}/`, '')); + +export function parseStdout(stdout: Array): string { + const stdoutContent = stdout + .map((chunk) => (Buffer.isBuffer(chunk) ? chunk.toString() : chunk)) + .join(''); + + // Escape special HTML characters + return stripANSI(stdoutContent); +} + +export const excapeHtmlCharacters = (htmlText: string): string => + htmlText.replace(/&/g, '&').replace(//g, '>'); diff --git a/packages/kbn-scout-reporting/src/reporting/index.ts b/packages/kbn-scout-reporting/src/reporting/index.ts index 58d4002320047..c514c6d31ef77 100644 --- a/packages/kbn-scout-reporting/src/reporting/index.ts +++ b/packages/kbn-scout-reporting/src/reporting/index.ts @@ -7,24 +7,23 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { createHash, randomBytes } from 'node:crypto'; import type { ReporterDescription } from 'playwright/test'; -import type { ScoutPlaywrightReporterOptions } from './playwright'; +import { ScoutPlaywrightReporterOptions } from './playwright/scout_playwright_reporter'; export * from './report'; -// ID helpers -export function generateTestRunId() { - return randomBytes(8).toString('hex'); -} - -export function getTestIDForTitle(title: string) { - return createHash('sha256').update(title).digest('hex').slice(0, 31); -} - -// Playwright reporting +// Playwright event-based reporting export const scoutPlaywrightReporter = ( options?: ScoutPlaywrightReporterOptions ): ReporterDescription => { - return ['@kbn/scout-reporting/src/reporting/playwright.ts', options]; + return ['@kbn/scout-reporting/src/reporting/playwright/events', options]; }; + +// Playwright failed test reporting +export const scoutFailedTestsReporter = ( + options?: ScoutPlaywrightReporterOptions +): ReporterDescription => { + return ['@kbn/scout-reporting/src/reporting/playwright/failed_test', options]; +}; + +export { generateTestRunId, getTestIDForTitle } from '../helpers'; diff --git a/packages/kbn-scout-reporting/src/reporting/playwright/events/index.ts b/packages/kbn-scout-reporting/src/reporting/playwright/events/index.ts new file mode 100644 index 0000000000000..717d9804dc882 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/playwright/events/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { ScoutPlaywrightReporter } from './playwright_reporter'; +// eslint-disable-next-line import/no-default-export +export default ScoutPlaywrightReporter; diff --git a/packages/kbn-scout-reporting/src/reporting/playwright.ts b/packages/kbn-scout-reporting/src/reporting/playwright/events/playwright_reporter.ts similarity index 93% rename from packages/kbn-scout-reporting/src/reporting/playwright.ts rename to packages/kbn-scout-reporting/src/reporting/playwright/events/playwright_reporter.ts index 98ad6655626ae..73222f62101ed 100644 --- a/packages/kbn-scout-reporting/src/reporting/playwright.ts +++ b/packages/kbn-scout-reporting/src/reporting/playwright/events/playwright_reporter.ts @@ -28,16 +28,10 @@ import { getCodeOwnersEntries, getOwningTeamsForPath, } from '@kbn/code-owners'; -import { generateTestRunId, getTestIDForTitle, ScoutReport, ScoutReportEventAction } from '.'; -import { environmentMetadata } from '../datasources'; - -/** - * Configuration options for the Scout Playwright reporter - */ -export interface ScoutPlaywrightReporterOptions { - name?: string; - outputPath?: string; -} +import { ScoutEventsReport, ScoutReportEventAction } from '../../report'; +import { environmentMetadata } from '../../../datasources'; +import type { ScoutPlaywrightReporterOptions } from '../scout_playwright_reporter'; +import { generateTestRunId, getTestIDForTitle } from '../../../helpers'; /** * Scout Playwright reporter @@ -46,7 +40,7 @@ export class ScoutPlaywrightReporter implements Reporter { readonly log: ToolingLog; readonly name: string; readonly runId: string; - private report: ScoutReport; + private report: ScoutEventsReport; private readonly codeOwnersEntries: CodeOwnersEntry[]; constructor(private reporterOptions: ScoutPlaywrightReporterOptions = {}) { @@ -56,10 +50,10 @@ export class ScoutPlaywrightReporter implements Reporter { }); this.name = this.reporterOptions.name || 'unknown'; - this.runId = generateTestRunId(); + this.runId = this.reporterOptions.runId || generateTestRunId(); this.log.info(`Scout test run ID: ${this.runId}`); - this.report = new ScoutReport(this.log); + this.report = new ScoutEventsReport(this.log); this.codeOwnersEntries = getCodeOwnersEntries(); } @@ -290,6 +284,3 @@ export class ScoutPlaywrightReporter implements Reporter { }); } } - -// eslint-disable-next-line import/no-default-export -export default ScoutPlaywrightReporter; diff --git a/packages/kbn-scout-reporting/src/reporting/playwright/failed_test/failed_test_reporter.ts b/packages/kbn-scout-reporting/src/reporting/playwright/failed_test/failed_test_reporter.ts new file mode 100644 index 0000000000000..944e1dc948e62 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/playwright/failed_test/failed_test_reporter.ts @@ -0,0 +1,131 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { + FullConfig, + FullResult, + Reporter, + Suite, + TestCase, + TestResult, +} from '@playwright/test/reporter'; + +import path from 'node:path'; +import { ToolingLog } from '@kbn/tooling-log'; +import { SCOUT_REPORT_OUTPUT_ROOT } from '@kbn/scout-info'; +import { REPO_ROOT } from '@kbn/repo-info'; +import { + type CodeOwnersEntry, + getCodeOwnersEntries, + getOwningTeamsForPath, +} from '@kbn/code-owners'; +import type { TestFailure } from '../../report'; +import { ScoutFailureReport } from '../../report'; +import type { ScoutPlaywrightReporterOptions } from '../scout_playwright_reporter'; +import { + getRunTarget, + getPluginManifestData, + parseStdout, + generateTestRunId, + getTestIDForTitle, + stripRunCommand, + stripFilePath, + excapeHtmlCharacters, +} from '../../../helpers'; + +/** + * Scout Failed Test reporter + */ +export class ScoutFailedTestReporter implements Reporter { + private readonly log: ToolingLog; + private readonly runId: string; + private readonly codeOwnersEntries: CodeOwnersEntry[]; + private readonly report: ScoutFailureReport; + private target: string; + private plugin: TestFailure['plugin']; + private command: string; + + constructor(private reporterOptions: ScoutPlaywrightReporterOptions = {}) { + this.log = new ToolingLog({ + level: 'info', + writeTo: process.stdout, + }); + + this.report = new ScoutFailureReport(this.log); + this.codeOwnersEntries = getCodeOwnersEntries(); + + this.runId = this.reporterOptions.runId || generateTestRunId(); + this.target = 'undefined'; // when '--grep' is not provided in the command line + this.command = stripRunCommand(process.argv); + } + + private getFileOwners(filePath: string): string[] { + return getOwningTeamsForPath(filePath, this.codeOwnersEntries); + } + + public get reportRootPath(): string { + const outputPath = this.reporterOptions.outputPath || SCOUT_REPORT_OUTPUT_ROOT; + return path.join(outputPath, `scout-playwright-test-failures-${this.runId}`); + } + + printsToStdio(): boolean { + return false; // Avoid taking over console output + } + + onBegin(config: FullConfig, suite: Suite) { + // Get plugin metadata from kibana.jsonc + if (config.configFile) { + const metadata = getPluginManifestData(config.configFile); + this.plugin = { + id: metadata.plugin.id, + visibility: metadata.visibility, + group: metadata.group, + }; + } + + this.target = getRunTarget(); + } + + onTestEnd(test: TestCase, result: TestResult) { + if (result.status === 'failed') { + this.report.logEvent({ + id: getTestIDForTitle(test.titlePath().join(' ')), + suite: test.parent.title, + title: test.title, + target: this.target, + command: this.command, + location: stripFilePath(test.location.file), + owner: this.getFileOwners(path.relative(REPO_ROOT, test.location.file)), + plugin: this.plugin, + duration: result.duration, + error: { + message: result.error?.message ? stripFilePath(result.error.message) : undefined, + stack_trace: result.error?.stack + ? excapeHtmlCharacters(stripFilePath(result.error.stack)) + : undefined, + }, + stdout: result.stdout ? parseStdout(result.stdout) : undefined, + attachments: result.attachments.map((attachment) => ({ + name: attachment.name, + path: attachment.path, + contentType: attachment.contentType, + })), + }); + } + } + + onEnd(result: FullResult) { + // Save & conclude the report + try { + this.report.save(this.reportRootPath); + } finally { + this.report.conclude(); + } + } +} diff --git a/packages/kbn-scout-reporting/src/reporting/playwright/failed_test/index.ts b/packages/kbn-scout-reporting/src/reporting/playwright/failed_test/index.ts new file mode 100644 index 0000000000000..c37c286c6c4e0 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/playwright/failed_test/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { ScoutFailedTestReporter } from './failed_test_reporter'; +// eslint-disable-next-line import/no-default-export +export default ScoutFailedTestReporter; diff --git a/packages/kbn-scout-reporting/src/reporting/playwright/scout_playwright_reporter.ts b/packages/kbn-scout-reporting/src/reporting/playwright/scout_playwright_reporter.ts new file mode 100644 index 0000000000000..b9c1b495ee01a --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/playwright/scout_playwright_reporter.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +/** + * Configuration options for the Scout Playwright reporter + */ +export interface ScoutPlaywrightReporterOptions { + name?: string; + runId?: string; + outputPath?: string; +} diff --git a/packages/kbn-scout-reporting/src/reporting/report/base.ts b/packages/kbn-scout-reporting/src/reporting/report/base.ts new file mode 100644 index 0000000000000..905f64b3e463b --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/report/base.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +// eslint-disable-next-line max-classes-per-file +import os from 'node:os'; +import path from 'node:path'; +import fs from 'node:fs'; +import { ToolingLog } from '@kbn/tooling-log'; + +/** + * Generic error raised by a Scout report + */ +export class ScoutReportError extends Error {} + +export abstract class ScoutReport { + log: ToolingLog; + workDir: string; + concluded = false; + reportName: string; + + protected constructor(reportName: string, log?: ToolingLog) { + this.log = log || new ToolingLog(); + this.workDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scout-report-')); + this.reportName = reportName; + } + + /** + * Defensive utility function used to guard against modifying the report after it has concluded + * + * @param additionalInfo Description of the report action that was prevented + * @protected + */ + protected raiseIfConcluded(additionalInfo?: string) { + if (this.concluded) { + let message = `${this.reportName} at ${this.workDir} was concluded`; + + if (additionalInfo) { + message += `: ${additionalInfo}`; + } + + throw new ScoutReportError(message); + } + } + + /** + * Call this when you're done adding information to this report. + * + * ⚠️**This will delete all the contents of the report's working directory** + */ + conclude() { + // Remove the working directory + this.log.info(`Removing ${this.reportName} working directory ${this.workDir}`); + fs.rmSync(this.workDir, { recursive: true, force: true }); + + // Mark this report as concluded + this.concluded = true; + this.log.success(`${this.reportName} has concluded.`); + } +} diff --git a/packages/kbn-scout-reporting/src/reporting/report/event.ts b/packages/kbn-scout-reporting/src/reporting/report/events/event.ts similarity index 96% rename from packages/kbn-scout-reporting/src/reporting/report/event.ts rename to packages/kbn-scout-reporting/src/reporting/report/events/event.ts index 1f6f8251f3b60..441ef3484e112 100644 --- a/packages/kbn-scout-reporting/src/reporting/report/event.ts +++ b/packages/kbn-scout-reporting/src/reporting/report/events/event.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { BuildkiteMetadata, HostMetadata } from '../../datasources'; +import { BuildkiteMetadata, HostMetadata } from '../../../datasources'; /** * Scout reporter event type diff --git a/packages/kbn-scout-reporting/src/reporting/report/events/index.ts b/packages/kbn-scout-reporting/src/reporting/report/events/index.ts new file mode 100644 index 0000000000000..e799c86874cc3 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/report/events/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { ScoutEventsReport } from './report'; +export * from './event'; +export * from './persistence'; diff --git a/packages/kbn-scout-reporting/src/reporting/report/persistence/component_templates.ts b/packages/kbn-scout-reporting/src/reporting/report/events/persistence/component_templates.ts similarity index 100% rename from packages/kbn-scout-reporting/src/reporting/report/persistence/component_templates.ts rename to packages/kbn-scout-reporting/src/reporting/report/events/persistence/component_templates.ts diff --git a/packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts b/packages/kbn-scout-reporting/src/reporting/report/events/persistence/index.ts similarity index 100% rename from packages/kbn-scout-reporting/src/reporting/report/persistence/index.ts rename to packages/kbn-scout-reporting/src/reporting/report/events/persistence/index.ts diff --git a/packages/kbn-scout-reporting/src/reporting/report/persistence/index_templates.ts b/packages/kbn-scout-reporting/src/reporting/report/events/persistence/index_templates.ts similarity index 100% rename from packages/kbn-scout-reporting/src/reporting/report/persistence/index_templates.ts rename to packages/kbn-scout-reporting/src/reporting/report/events/persistence/index_templates.ts diff --git a/packages/kbn-scout-reporting/src/reporting/report/persistence/mappings.ts b/packages/kbn-scout-reporting/src/reporting/report/events/persistence/mappings.ts similarity index 100% rename from packages/kbn-scout-reporting/src/reporting/report/persistence/mappings.ts rename to packages/kbn-scout-reporting/src/reporting/report/events/persistence/mappings.ts diff --git a/packages/kbn-scout-reporting/src/reporting/report/events/report.ts b/packages/kbn-scout-reporting/src/reporting/report/events/report.ts new file mode 100644 index 0000000000000..f65e8b13fffe5 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/report/events/report.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import os from 'node:os'; +import path from 'node:path'; +import fs from 'node:fs'; +import { ToolingLog } from '@kbn/tooling-log'; +import { ScoutReportEvent } from './event'; +import { ScoutReport, ScoutReportError } from '../base'; + +/** + * + */ +export class ScoutEventsReport extends ScoutReport { + constructor(log?: ToolingLog) { + super('Scout Events report', log); + this.log = log || new ToolingLog(); + this.workDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scout-report-')); + } + + public get eventLogPath(): string { + return path.join(this.workDir, `event-log.ndjson`); + } + + /** + * Logs an event to be processed by this reporter + * + * @param event {ScoutReportEvent} - Event to record + */ + logEvent(event: ScoutReportEvent) { + this.raiseIfConcluded('logging new events is no longer allowed'); + + if (event['@timestamp'] === undefined) { + event['@timestamp'] = new Date(); + } + + fs.appendFileSync(this.eventLogPath, JSON.stringify(event) + '\n'); + } + + /** + * Save the report to a non-ephemeral location + * + * @param destination - Full path to the save location. Must not exist. + */ + save(destination: string) { + this.raiseIfConcluded('nothing to save because workdir has been cleared'); + + if (fs.existsSync(destination)) { + throw new ScoutReportError(`Save destination path '${destination}' already exists`); + } + + // Create the destination directory + this.log.info(`Saving ${this.reportName} to ${destination}`); + fs.mkdirSync(destination, { recursive: true }); + + // Copy the workdir data to the destination + fs.cpSync(this.workDir, destination, { recursive: true }); + } +} diff --git a/packages/kbn-scout-reporting/src/reporting/report/failed_test/html.ts b/packages/kbn-scout-reporting/src/reporting/report/failed_test/html.ts new file mode 100644 index 0000000000000..0b4467b128874 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/report/failed_test/html.ts @@ -0,0 +1,250 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import fs from 'fs'; +import { TestFailure } from './test_failure'; + +export const buildFailureHtml = (testFailure: TestFailure): string => { + const { + suite, + title, + target, + command, + location, + owner, + plugin, + duration, + error, + stdout, + attachments, + } = testFailure; + + const testDuration = duration < 1000 ? `${duration}ms` : `${(duration / 1000).toFixed(2)}s`; + + const screenshots = attachments + .filter((a) => a.contentType.startsWith('image/')) + .map((s) => { + const base64 = fs.readFileSync(s.path!).toString('base64'); + return ` +
+ ${s.name} +
+ `; + }); + + return ` + + + + + + + + Scout Test Failure Report + + +
+
+

Scout Test Failure Report

+
Location: ${location}
+
+ +
+
Test Details
+ + + + + + + + + + + + + + + + + +
Suite Title${suite}
Test Title${title}
Execution Details + Target: ${target}, + Duration: ${testDuration} +
Plugin + ID: ${plugin?.id}, + Visibility: ${plugin?.visibility}, + Group: ${plugin?.group} +
+
+ + + +
+
Command Line
+
${command}
+
+ +
+
Owners
+
${owner.join(', ')}
+
+ +
+
Error Details
+
${error?.stack_trace || 'No stack trace available'}
+
+ +
+
+ + Failures in tracked branches: + 0 + + +
+
+ +
+
Output Logs
+
+
${stdout || 'No output available'}
+
+
+ +
+
Attachments
+ ${screenshots.join('/n')} +
+
+
+ + + + `; +}; diff --git a/packages/kbn-scout-reporting/src/reporting/report/failed_test/index.ts b/packages/kbn-scout-reporting/src/reporting/report/failed_test/index.ts new file mode 100644 index 0000000000000..2da9656ff4662 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/report/failed_test/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { ScoutFailureReport } from './report'; +export type { TestFailure } from './test_failure'; diff --git a/packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts b/packages/kbn-scout-reporting/src/reporting/report/failed_test/report.ts new file mode 100644 index 0000000000000..086e37b8ac2c4 --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/report/failed_test/report.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import path from 'node:path'; +import fs from 'node:fs'; +import { ToolingLog } from '@kbn/tooling-log'; +import { buildFailureHtml } from './html'; +import { TestFailure } from './test_failure'; +import { ScoutReport, ScoutReportError } from '../base'; + +const saveTestFailuresReport = ( + reportPath: string, + testFailureHtml: string, + log: ToolingLog, + message: string +): void => { + try { + fs.writeFileSync(reportPath, testFailureHtml, 'utf-8'); + log.info(message); + } catch (error) { + log.error(`Failed to save report at ${reportPath}: ${error.message}`); + } +}; + +export class ScoutFailureReport extends ScoutReport { + constructor(log?: ToolingLog) { + super('Scout Failure report', log); + } + + public get testFailuresPath(): string { + return path.join(this.workDir, `test-failures.ndjson`); + } + + /** + * Logs a failure to be processed by this reporter + * + * @param failure {TestFailure} - test failure to record + */ + logEvent(failure: TestFailure) { + this.raiseIfConcluded('logging new failures is no longer allowed'); + + fs.appendFileSync(this.testFailuresPath, JSON.stringify(failure) + '\n'); + } + + /** + * Save the report to a non-ephemeral location + * + * @param destination - Full path to the save location. Must not exist. + */ + save(destination: string) { + this.raiseIfConcluded('nothing to save because workdir has been cleared'); + + if (fs.existsSync(destination)) { + throw new ScoutReportError(`Save destination path '${destination}' already exists`); + } + + const testFailures: TestFailure[] = this.readFailuresFromNDJSON(); + + if (testFailures.length === 0) { + this.log.info('No test failures to report'); + return; + } + + // Create the destination directory + this.log.info( + `Saving ${this.reportName} to ${destination}: ${testFailures.length} failures reported` + ); + fs.mkdirSync(destination, { recursive: true }); + + // Generate HTML report for each failed test with embedded screenshots + for (const failure of testFailures) { + const htmlContent = buildFailureHtml(failure); + const htmlReportPath = path.join(destination, `${failure.id}.html`); + saveTestFailuresReport( + htmlReportPath, + htmlContent, + this.log, + `Html report for ${failure.id} is saved at ${htmlReportPath}` + ); + } + + const summaryContent = testFailures.map((failure) => { + return { + name: `${failure.target} - ${failure.suite} - ${failure.title}`, + htmlReportFilename: `${failure.id}.html`, + }; + }); + + // Short summary report linking to the detailed HTML reports + const testFailuresSummaryReportPath = path.join(destination, 'test-failures-summary.json'); + saveTestFailuresReport( + testFailuresSummaryReportPath, + JSON.stringify(summaryContent, null, 2), + this.log, + `Test Failures Summary is saved at ${testFailuresSummaryReportPath}` + ); + } + + /** + * Reads all failures from the NDJSON file and parses them as TestFailure[]. + */ + private readFailuresFromNDJSON(): TestFailure[] { + if (!fs.existsSync(this.testFailuresPath)) { + return []; + } + + const fileContent = fs.readFileSync(this.testFailuresPath, 'utf-8'); + return fileContent + .split('\n') // Split lines + .filter((line) => line.trim() !== '') // Remove empty lines + .map((line) => JSON.parse(line) as TestFailure); // Parse each line into an object + } +} diff --git a/packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts b/packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts new file mode 100644 index 0000000000000..aa19263531a6f --- /dev/null +++ b/packages/kbn-scout-reporting/src/reporting/report/failed_test/test_failure.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export interface TestFailure { + id: string; + suite: string; + title: string; + target: string; + command: string; + location: string; + owner: string[]; + plugin?: { + id: string; + visibility: string; + group: string; + }; + duration: number; + error: { + message?: string; + stack_trace?: string; + }; + stdout?: string; + attachments: Array<{ + name: string; + path?: string; + contentType: string; + }>; +} diff --git a/packages/kbn-scout-reporting/src/reporting/report/index.ts b/packages/kbn-scout-reporting/src/reporting/report/index.ts index b678463c185f9..c5e4fb03e8b3d 100644 --- a/packages/kbn-scout-reporting/src/reporting/report/index.ts +++ b/packages/kbn-scout-reporting/src/reporting/report/index.ts @@ -7,97 +7,5 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -// eslint-disable-next-line max-classes-per-file -import os from 'node:os'; -import path from 'node:path'; -import fs from 'node:fs'; -import { ToolingLog } from '@kbn/tooling-log'; -import { ScoutReportEvent } from './event'; - -/** - * Generic error raised by a Scout report - */ -export class ScoutReportError extends Error {} - -/** - * - */ -export class ScoutReport { - log: ToolingLog; - workDir: string; - concluded = false; - - constructor(log?: ToolingLog) { - this.log = log || new ToolingLog(); - this.workDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scout-report-')); - } - - public get eventLogPath(): string { - return path.join(this.workDir, `event-log.ndjson`); - } - - private raiseIfConcluded(additionalInfo?: string) { - if (this.concluded) { - let message = `Report at ${this.workDir} was concluded`; - - if (additionalInfo) { - message += `: ${additionalInfo}`; - } - - throw new ScoutReportError(message); - } - } - - /** - * Logs an event to be processed by this reporter - * - * @param event {ScoutReportEvent} - Event to record - */ - logEvent(event: ScoutReportEvent) { - this.raiseIfConcluded('logging new events is no longer allowed'); - - if (event['@timestamp'] === undefined) { - event['@timestamp'] = new Date(); - } - - fs.appendFileSync(this.eventLogPath, JSON.stringify(event) + '\n'); - } - - /** - * Save the report to a non-ephemeral location - * - * @param destination - Full path to the save location. Must not exist. - */ - save(destination: string) { - this.raiseIfConcluded('nothing to save because workdir has been cleared'); - - if (fs.existsSync(destination)) { - throw new ScoutReportError(`Save destination path '${destination}' already exists`); - } - - // Create the destination directory - this.log.info(`Saving Scout report to ${destination}`); - fs.mkdirSync(destination, { recursive: true }); - - // Copy the workdir data to the destination - fs.cpSync(this.workDir, destination, { recursive: true }); - } - - /** - * Call this when you're done adding information to this report. - * - * ⚠️**This will delete all the contents of the report's working directory** - */ - conclude() { - // Remove the working directory - this.log.info(`Removing Scout report working directory ${this.workDir}`); - fs.rmSync(this.workDir, { recursive: true, force: true }); - - // Mark this report as concluded - this.concluded = true; - this.log.success('Scout report has concluded.'); - } -} - -export * from './event'; -export * from './persistence'; +export { ScoutEventsReport, ScoutReportEventAction } from './events'; +export { ScoutFailureReport, type TestFailure } from './failed_test'; diff --git a/packages/kbn-scout-reporting/tsconfig.json b/packages/kbn-scout-reporting/tsconfig.json index 30b5e3fca4e6c..7e596426d705b 100644 --- a/packages/kbn-scout-reporting/tsconfig.json +++ b/packages/kbn-scout-reporting/tsconfig.json @@ -20,5 +20,6 @@ "@kbn/scout-info", "@kbn/repo-info", "@kbn/code-owners", + "@kbn/repo-packages", ] } diff --git a/packages/kbn-scout/src/playwright/config/create_config.test.ts b/packages/kbn-scout/src/playwright/config/create_config.test.ts index 730bdd5ef55e4..50b165097fe9b 100644 --- a/packages/kbn-scout/src/playwright/config/create_config.test.ts +++ b/packages/kbn-scout/src/playwright/config/create_config.test.ts @@ -10,13 +10,31 @@ import { SCOUT_SERVERS_ROOT } from '@kbn/scout-info'; import { createPlaywrightConfig } from './create_config'; import { VALID_CONFIG_MARKER } from '../types'; +import { generateTestRunId } from '@kbn/scout-reporting'; + +jest.mock('@kbn/scout-reporting', () => ({ + ...jest.requireActual('@kbn/scout-reporting'), + generateTestRunId: jest.fn(), +})); describe('createPlaywrightConfig', () => { + const mockGenerateTestRunId = generateTestRunId as jest.Mock; + + beforeEach(() => { + jest.clearAllMocks(); + }); + it('should return a valid default Playwright configuration', () => { + const testRunId = 'test-run-id'; + mockGenerateTestRunId.mockImplementationOnce(() => testRunId); + const testDir = './my_tests'; const config = createPlaywrightConfig({ testDir }); + expect(mockGenerateTestRunId).toHaveBeenCalledTimes(1); + expect(config.testDir).toBe(testDir); + expect(config.retries).toBe(0); expect(config.workers).toBe(1); expect(config.fullyParallel).toBe(false); expect(config.use).toEqual({ @@ -30,7 +48,14 @@ describe('createPlaywrightConfig', () => { expect(config.reporter).toEqual([ ['html', { open: 'never', outputFolder: './output/reports' }], ['json', { outputFile: './output/reports/test-results.json' }], - ['@kbn/scout-reporting/src/reporting/playwright.ts', { name: 'scout-playwright' }], + [ + '@kbn/scout-reporting/src/reporting/playwright/events', + { name: 'scout-playwright', runId: testRunId }, + ], + [ + '@kbn/scout-reporting/src/reporting/playwright/failed_test', + { name: 'scout-playwright-failed-tests', runId: testRunId }, + ], ]); expect(config.timeout).toBe(60000); expect(config.expect?.timeout).toBe(10000); diff --git a/packages/kbn-scout/src/playwright/config/create_config.ts b/packages/kbn-scout/src/playwright/config/create_config.ts index cb1e371cb43e7..08e9ed482dbd8 100644 --- a/packages/kbn-scout/src/playwright/config/create_config.ts +++ b/packages/kbn-scout/src/playwright/config/create_config.ts @@ -8,11 +8,17 @@ */ import { defineConfig, PlaywrightTestConfig, devices } from '@playwright/test'; -import { scoutPlaywrightReporter } from '@kbn/scout-reporting'; +import { + scoutFailedTestsReporter, + scoutPlaywrightReporter, + generateTestRunId, +} from '@kbn/scout-reporting'; import { SCOUT_SERVERS_ROOT } from '@kbn/scout-info'; import { ScoutPlaywrightOptions, ScoutTestOptions, VALID_CONFIG_MARKER } from '../types'; export function createPlaywrightConfig(options: ScoutPlaywrightOptions): PlaywrightTestConfig { + const runId = generateTestRunId(); + return defineConfig({ testDir: options.testDir, /* Run tests in files in parallel */ @@ -20,14 +26,15 @@ export function createPlaywrightConfig(options: ScoutPlaywrightOptions): Playwri /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, + retries: 0, // disable retry for Playwright runner /* Opt out of parallel tests on CI. */ workers: options.workers ?? 1, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: [ ['html', { outputFolder: './output/reports', open: 'never' }], // HTML report configuration ['json', { outputFile: './output/reports/test-results.json' }], // JSON report - scoutPlaywrightReporter({ name: 'scout-playwright' }), // Scout report + scoutPlaywrightReporter({ name: 'scout-playwright', runId }), // Scout events report + scoutFailedTestsReporter({ name: 'scout-playwright-failed-tests', runId }), // Scout failed test report ], /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/scout_ftr_reporter.ts b/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/scout_ftr_reporter.ts index 8ded1efba8a99..4ece269b06976 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/scout_ftr_reporter.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/reporter/scout_ftr_reporter.ts @@ -14,9 +14,9 @@ import { REPO_ROOT } from '@kbn/repo-info'; import { generateTestRunId, getTestIDForTitle, - ScoutReport, - ScoutReportEventAction, datasources, + ScoutEventsReport, + ScoutReportEventAction, } from '@kbn/scout-reporting'; import { getOwningTeamsForPath, @@ -40,7 +40,7 @@ export class ScoutFTRReporter { readonly log: ToolingLog; readonly name: string; readonly runId: string; - private report: ScoutReport; + private report: ScoutEventsReport; private readonly codeOwnersEntries: CodeOwnersEntry[]; constructor(private runner: Runner, private reporterOptions: ScoutFTRReporterOptions = {}) { @@ -53,7 +53,7 @@ export class ScoutFTRReporter { this.runId = generateTestRunId(); this.log.info(`Scout test run ID: ${this.runId}`); - this.report = new ScoutReport(this.log); + this.report = new ScoutEventsReport(this.log); this.codeOwnersEntries = getCodeOwnersEntries(); // Register event listeners diff --git a/packages/kbn-test/src/jest/setup/enzyme.js b/packages/kbn-test/src/jest/setup/enzyme.js index d101358fd5b4a..aa4a629303bfa 100644 --- a/packages/kbn-test/src/jest/setup/enzyme.js +++ b/packages/kbn-test/src/jest/setup/enzyme.js @@ -11,3 +11,31 @@ import { configure } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; configure({ adapter: new Adapter() }); + +/* eslint-env jest */ + +/** + * This is a workaround to fix snapshot serialization of emotion classes when rendering React@18 using `import { render } from 'enzyme'` + * With React@18 emotion uses `useInsertionEffect` to insert styles into the DOM, which enzyme `render` does not trigger because it is using ReactDomServer.renderToString. + * With React@17 emotion fell back to sync cb, so it was working with enzyme `render`. + * Without those styles in DOM the custom snapshot serializer is not able to replace the emotion class names. + * This workaround ensures a fake emotion style tag is present in the DOM before rendering the component with enzyme making the snapshot serializer work. + */ +function mockEnsureEmotionStyleTag() { + if (!document.head.querySelector('style[data-emotion]')) { + const style = document.createElement('style'); + style.setAttribute('data-emotion', 'css'); + document.head.appendChild(style); + } +} + +jest.mock('enzyme', () => { + const actual = jest.requireActual('enzyme'); + return { + ...actual, + render: (node, options) => { + mockEnsureEmotionStyleTag(); + return actual.render(node, options); + }, + }; +}); diff --git a/packages/kbn-test/src/jest/setup/react_testing_library.js b/packages/kbn-test/src/jest/setup/react_testing_library.js index 7b184485df1cb..ce54bcf8326cb 100644 --- a/packages/kbn-test/src/jest/setup/react_testing_library.js +++ b/packages/kbn-test/src/jest/setup/react_testing_library.js @@ -80,6 +80,8 @@ console.error = (...args) => { * Tracking issue to clean this up /~https://github.com/elastic/kibana/issues/199100 */ if (REACT_VERSION.startsWith('18.')) { - console.warn('Running with React@18 and muting the legacy ReactDOM.render warning'); + if (!process.env.CI) { + console.warn('Running with React@18 and muting the legacy ReactDOM.render warning'); + } muteLegacyRootWarning(); } diff --git a/renovate.json b/renovate.json index 2198ec0eabdef..78e472e639a6d 100644 --- a/renovate.json +++ b/renovate.json @@ -2360,25 +2360,6 @@ "minimumReleaseAge": "7 days", "enabled": true }, - { - "groupName": "react-resizable", - "matchDepNames": [ - "react-resizable" - ], - "reviewers": [ - "team:kibana-presentation" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Presentation", - "backport:all-open", - "release_note:skip" - ], - "minimumReleaseAge": "7 days", - "enabled": true - }, { "groupName": "misc kibana-presentation dependencies", "matchDepNames": [ @@ -2405,11 +2386,9 @@ "groupName": "kibana-presentation react dependencies", "matchDepNames": [ "react-dropzone", - "react-grid-layout", "react-recompose", "react-shortcuts", "redux-thunks", - "@types/react-grid-layout", "@types/react-recompose" ], "reviewers": [ @@ -3845,6 +3824,25 @@ "minimumReleaseAge": "7 days", "enabled": true }, + { + "groupName": "oas", + "matchDepNames": [ + "oas" + ], + "reviewers": [ + "team:security-scalability" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Security-Scalability", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, { "groupName": "seedrandom", "matchDepNames": [ diff --git a/src/core/packages/mount-utils/browser-internal/src/mount.tsx b/src/core/packages/mount-utils/browser-internal/src/mount.tsx index 1c468525af501..de3988f18fc41 100644 --- a/src/core/packages/mount-utils/browser-internal/src/mount.tsx +++ b/src/core/packages/mount-utils/browser-internal/src/mount.tsx @@ -12,8 +12,6 @@ import { render, unmountComponentAtNode } from 'react-dom'; import { I18nProvider } from '@kbn/i18n-react'; import type { MountPoint } from '@kbn/core-mount-utils-browser'; -import './mount_wrapper.scss'; - const defaultWrapperClass = 'kbnMountWrapper'; interface MountWrapperComponentProps { diff --git a/src/core/packages/mount-utils/browser-internal/src/mount_wrapper.scss b/src/core/packages/mount-utils/browser-internal/src/mount_wrapper.scss deleted file mode 100644 index f3fdd59fd66c1..0000000000000 --- a/src/core/packages/mount-utils/browser-internal/src/mount_wrapper.scss +++ /dev/null @@ -1,6 +0,0 @@ -.kbnOverlayMountWrapper { - display: flex; - flex-direction: column; - height: 100%; - overflow: hidden; -} diff --git a/src/core/packages/overlays/browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap b/src/core/packages/overlays/browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap index faa75edaa3374..2478ed3597fc2 100644 --- a/src/core/packages/overlays/browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap +++ b/src/core/packages/overlays/browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap @@ -8,336 +8,10 @@ Array [ ] `; -exports[`FlyoutService openFlyout() renders a flyout to the DOM 1`] = ` -Array [ - Array [ - - - - - , -
, - ], -] -`; +exports[`FlyoutService openFlyout() renders a flyout to the DOM 1`] = `"[[{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"analytics\\":{\\"telemetryCounter$\\":{\\"closed\\":false,\\"currentObservers\\":null,\\"observers\\":[],\\"isStopped\\":false,\\"hasError\\":false,\\"thrownError\\":null}},\\"i18n\\":{},\\"theme\\":{\\"theme$\\":{}},\\"userProfile\\":{},\\"children\\":{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"children\\":{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"css\\":{\\"name\\":\\"8oufzr\\",\\"styles\\":\\"display:flex;flex-direction:column;height:100%;overflow:hidden;\\"},\\"className\\":\\"kbnOverlayMountWrapper\\"},\\"_owner\\":null,\\"_store\\":{}}},\\"_owner\\":null,\\"_store\\":{}}},\\"_owner\\":null,\\"_store\\":{}},{}]]"`; exports[`FlyoutService openFlyout() renders a flyout to the DOM 2`] = `"
Flyout content
"`; -exports[`FlyoutService openFlyout() with a currently active flyout replaces the current flyout with a new one 1`] = ` -Array [ - Array [ - - - - - - - , - }, - Object {}, - ], - ], - "results": Array [ - Object { - "type": "return", - "value": - - - - - - - - , - }, - ], - }, - } - } - theme={ - Object { - "getTheme": [MockFunction] { - "calls": Array [ - Array [], - ], - "results": Array [ - Object { - "type": "return", - "value": Object { - "darkMode": false, - "name": "amsterdam", - }, - }, - ], - }, - "theme$": Observable { - "_subscribe": [Function], - }, - } - } - userProfile={ - Object { - "bulkGet": [MockFunction], - "getCurrent": [MockFunction], - "getEnabled$": [MockFunction], - "getUserProfile$": [MockFunction], - "partialUpdate": [MockFunction], - "suggest": [MockFunction], - "update": [MockFunction], - } - } - > - - - - , -
, - ], - Array [ - - - - - - - , - }, - Object {}, - ], - ], - "results": Array [ - Object { - "type": "return", - "value": - - - - - - - - , - }, - ], - }, - } - } - theme={ - Object { - "getTheme": [MockFunction] { - "calls": Array [ - Array [], - ], - "results": Array [ - Object { - "type": "return", - "value": Object { - "darkMode": false, - "name": "amsterdam", - }, - }, - ], - }, - "theme$": Observable { - "_subscribe": [Function], - }, - } - } - userProfile={ - Object { - "bulkGet": [MockFunction], - "getCurrent": [MockFunction], - "getEnabled$": [MockFunction], - "getUserProfile$": [MockFunction], - "partialUpdate": [MockFunction], - "suggest": [MockFunction], - "update": [MockFunction], - } - } - > - - - - , -
, - ], -] -`; +exports[`FlyoutService openFlyout() with a currently active flyout replaces the current flyout with a new one 1`] = `"[[{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"analytics\\":{\\"telemetryCounter$\\":{\\"closed\\":false,\\"currentObservers\\":null,\\"observers\\":[],\\"isStopped\\":false,\\"hasError\\":false,\\"thrownError\\":null}},\\"i18n\\":{},\\"theme\\":{\\"theme$\\":{}},\\"userProfile\\":{},\\"children\\":{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"children\\":{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"css\\":{\\"name\\":\\"8oufzr\\",\\"styles\\":\\"display:flex;flex-direction:column;height:100%;overflow:hidden;\\"},\\"className\\":\\"kbnOverlayMountWrapper\\"},\\"_owner\\":null,\\"_store\\":{}}},\\"_owner\\":null,\\"_store\\":{}}},\\"_owner\\":null,\\"_store\\":{}},{}],[{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"analytics\\":{\\"telemetryCounter$\\":{\\"closed\\":false,\\"currentObservers\\":null,\\"observers\\":[],\\"isStopped\\":false,\\"hasError\\":false,\\"thrownError\\":null}},\\"i18n\\":{},\\"theme\\":{\\"theme$\\":{}},\\"userProfile\\":{},\\"children\\":{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"children\\":{\\"key\\":null,\\"ref\\":null,\\"props\\":{\\"css\\":{\\"name\\":\\"8oufzr\\",\\"styles\\":\\"display:flex;flex-direction:column;height:100%;overflow:hidden;\\"},\\"className\\":\\"kbnOverlayMountWrapper\\"},\\"_owner\\":null,\\"_store\\":{}}},\\"_owner\\":null,\\"_store\\":{}}},\\"_owner\\":null,\\"_store\\":{}},{}]]"`; exports[`FlyoutService openFlyout() with a currently active flyout replaces the current flyout with a new one 2`] = `"
Flyout content 2
"`; diff --git a/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.test.tsx b/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.test.tsx index e4b23f7a9b1b6..9addffe90fc2a 100644 --- a/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.test.tsx +++ b/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.test.tsx @@ -56,7 +56,7 @@ describe('FlyoutService', () => { it('renders a flyout to the DOM', () => { expect(mockReactDomRender).not.toHaveBeenCalled(); flyouts.open(mountText('Flyout content')); - expect(mockReactDomRender.mock.calls).toMatchSnapshot(); + expect(JSON.stringify(mockReactDomRender.mock.calls)).toMatchSnapshot(); const modalContent = mount(mockReactDomRender.mock.calls[0][0]); expect(modalContent.html()).toMatchSnapshot(); }); @@ -67,7 +67,7 @@ describe('FlyoutService', () => { }); it('replaces the current flyout with a new one', () => { flyouts.open(mountText('Flyout content 2')); - expect(mockReactDomRender.mock.calls).toMatchSnapshot(); + expect(JSON.stringify(mockReactDomRender.mock.calls)).toMatchSnapshot(); expect(mockReactDomUnmount).toHaveBeenCalledTimes(1); const modalContent = mount(mockReactDomRender.mock.calls[1][0]); expect(modalContent.html()).toMatchSnapshot(); diff --git a/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.tsx b/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.tsx index b98e6c05ae50c..7bd0061d798de 100644 --- a/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.tsx +++ b/src/core/packages/overlays/browser-internal/src/flyout/flyout_service.tsx @@ -9,6 +9,7 @@ /* eslint-disable max-classes-per-file */ +import { css } from '@emotion/react'; import { EuiFlyout, EuiFlyoutResizable } from '@elastic/eui'; import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; @@ -128,6 +129,15 @@ export class FlyoutService { ); }; + const overlayMountWrapperStyle = css({ + display: 'flex', + flexDirection: 'column', + height: '100%', + overflow: 'hidden', + }); + + // NOTE: The kbnOverlayMountWrapper className is used for allowing consumers to add additional styles + // that support drag-and-drop (padding, pointer styles). It is not used for internal styling. render( - {getWrapper()} + {getWrapper( + + )} , this.targetDomElement ); diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 353ef8c85548d..43d5403245e64 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -105,7 +105,7 @@ describe('checking migration metadata changes on all registered SO types', () => "file": "6b65ae5899b60ebe08656fd163ea532e557d3c98", "file-upload-usage-collection-telemetry": "06e0a8c04f991e744e09d03ab2bd7f86b2088200", "fileShare": "5be52de1747d249a221b5241af2838264e19aaa1", - "fleet-agent-policies": "908765a33aab066f4ac09446686b2d884aceed00", + "fleet-agent-policies": "4a5c6477d2a61121e95ea9865ed1403a28c38706", "fleet-fleet-server-host": "69be15f6b6f2a2875ad3c7050ddea7a87f505417", "fleet-message-signing-keys": "93421f43fed2526b59092a4e3c65d64bc2266c0f", "fleet-package-policies": "0206c20f27286787b91814a2e7872f06dc1e8e47", @@ -121,7 +121,7 @@ describe('checking migration metadata changes on all registered SO types', () => "infra-custom-dashboards": "1a5994f2e05bb8a1609825ddbf5012f77c5c67f3", "infrastructure-monitoring-log-view": "5f86709d3c27aed7a8379153b08ee5d3d90d77f5", "infrastructure-ui-source": "113182d6895764378dfe7fa9fa027244f3a457c4", - "ingest-agent-policies": "c1818c4119259908875b4c777ae62b11ba0585cd", + "ingest-agent-policies": "57ebfb047cf0b81c6fa0ceed8586fa7199c7c5e2", "ingest-download-sources": "279a68147e62e4d8858c09ad1cf03bd5551ce58d", "ingest-outputs": "55988d5f778bbe0e76caa7e6468707a0a056bdd8", "ingest-package-policies": "60d43f475f91417d14d9df05476acf2e63e99435", diff --git a/src/dev/build/tasks/os_packages/docker_generator/run.ts b/src/dev/build/tasks/os_packages/docker_generator/run.ts index 08e87a295954c..6bbd280a4bf11 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/run.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/run.ts @@ -51,7 +51,7 @@ export async function runDockerGenerator( */ if (flags.baseImage === 'wolfi') baseImageName = - 'docker.elastic.co/wolfi/chainguard-base:latest@sha256:f2813ac649de3b3e90bfed50723c59cbfba803fd8d021bd522fc3dc4802b0cdb'; + 'docker.elastic.co/wolfi/chainguard-base:latest@sha256:ea157dd3d70787c6b6dc9e14dda1ff103c781d4c3f9a544393ff4583dd80c9d0'; let imageFlavor = ''; if (flags.baseImage === 'ubi') imageFlavor += `-ubi`; diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 49bcdd7d7479e..c0bf364bd4f28 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -86,7 +86,7 @@ export const PER_PACKAGE_ALLOWED_LICENSES = { export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. /~https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme /~https://github.com/tmcw/jsonlint - '@elastic/ems-client@8.6.2': ['Elastic License 2.0'], + '@elastic/ems-client@8.6.3': ['Elastic License 2.0'], '@elastic/eui@99.0.0-borealis.1': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], '@elastic/eui-theme-borealis@0.0.8': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license /~https://github.com/mattcg/language-subtag-registry diff --git a/src/platform/packages/private/kbn-esql-editor/src/editor_footer/history_starred_queries.tsx b/src/platform/packages/private/kbn-esql-editor/src/editor_footer/history_starred_queries.tsx index 64039a6063b5f..069cd74eb83da 100644 --- a/src/platform/packages/private/kbn-esql-editor/src/editor_footer/history_starred_queries.tsx +++ b/src/platform/packages/private/kbn-esql-editor/src/editor_footer/history_starred_queries.tsx @@ -53,9 +53,6 @@ export function QueryHistoryAction({ isSpaceReduced?: boolean; }) { const { euiTheme } = useEuiTheme(); - // get history items from local storage - const items: QueryHistoryItem[] = getHistoryItems('desc'); - if (!items.length) return null; return ( <> {isSpaceReduced && ( diff --git a/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx b/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx index b4aea90dfc3eb..f94dbb1c378e6 100644 --- a/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx +++ b/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx @@ -125,15 +125,6 @@ export const ESQLEditor = memo(function ESQLEditor({ errors: serverErrors ? parseErrors(serverErrors, code) : [], warnings: serverWarning ? parseWarning(serverWarning) : [], }); - // contains only client side validation messages - const [clientParserMessages, setClientParserMessages] = useState<{ - errors: MonacoMessage[]; - warnings: MonacoMessage[]; - }>({ - errors: [], - warnings: [], - }); - const hideHistoryComponent = hideQueryHistory; const onQueryUpdate = useCallback( (value: string) => { onTextLangQueryChange({ esql: value } as AggregateQuery); @@ -439,30 +430,26 @@ export const ESQLEditor = memo(function ESQLEditor({ }; }, [esqlCallbacks, code]); - const clientParserStatus = clientParserMessages.errors?.length - ? 'error' - : clientParserMessages.warnings.length - ? 'warning' - : 'success'; - useEffect(() => { - const validateQuery = async () => { + const setQueryToTheCache = async () => { if (editor1?.current) { const parserMessages = await parseMessages(); - setClientParserMessages({ - errors: parserMessages?.errors ?? [], - warnings: parserMessages?.warnings ?? [], + const clientParserStatus = parserMessages.errors?.length + ? 'error' + : parserMessages.warnings.length + ? 'warning' + : 'success'; + + addQueriesToCache({ + queryString: code, + status: clientParserStatus, }); } }; if (isQueryLoading || isLoading) { - validateQuery(); - addQueriesToCache({ - queryString: code, - status: clientParserStatus, - }); + setQueryToTheCache(); } - }, [clientParserStatus, isLoading, isQueryLoading, parseMessages, code]); + }, [isLoading, isQueryLoading, parseMessages, code]); const queryValidation = useCallback( async ({ active }: { active: boolean }) => { @@ -499,11 +486,6 @@ export const ESQLEditor = memo(function ESQLEditor({ 'Unified search', parsedErrors.length ? parsedErrors : [] ); - const parserMessages = await parseMessages(); - setClientParserMessages({ - errors: parserMessages?.errors ?? [], - warnings: parserMessages?.warnings ?? [], - }); return; } else { queryValidation(subscription).catch(() => {}); @@ -776,7 +758,7 @@ export const ESQLEditor = memo(function ESQLEditor({ isLanguageComponentOpen={isLanguageComponentOpen} setIsLanguageComponentOpen={setIsLanguageComponentOpen} measuredContainerWidth={measuredEditorWidth} - hideQueryHistory={hideHistoryComponent} + hideQueryHistory={hideQueryHistory} resizableContainerButton={resizableContainerButton} resizableContainerHeight={resizableContainerHeight} displayDocumentationAsFlyout={displayDocumentationAsFlyout} diff --git a/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.test.ts b/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.test.ts index 9b8372b146695..cf791c5538e47 100644 --- a/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.test.ts +++ b/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.test.ts @@ -33,23 +33,24 @@ describe('history local storage', function () { it('should add queries to cache correctly ', function () { addQueriesToCache({ queryString: 'from kibana_sample_data_flights | limit 10', + status: 'success', }); const historyItems = getCachedQueries(); expect(historyItems.length).toBe(1); expect(historyItems[0].timeRan).toBeDefined(); - expect(historyItems[0].status).toBeUndefined(); + expect(historyItems[0].status).toBeDefined(); }); - it('should update queries to cache correctly ', function () { + it('should add a second query to cache correctly ', function () { addQueriesToCache({ queryString: 'from kibana_sample_data_flights \n | limit 10 \n | stats meow = avg(woof)', - status: 'success', + status: 'error', }); const historyItems = getCachedQueries(); expect(historyItems.length).toBe(2); expect(historyItems[1].timeRan).toBeDefined(); - expect(historyItems[1].status).toBe('success'); + expect(historyItems[1].status).toBe('error'); }); it('should update queries to cache correctly if they are the same with different format', function () { @@ -60,8 +61,8 @@ describe('history local storage', function () { const historyItems = getCachedQueries(); expect(historyItems.length).toBe(2); - expect(historyItems[1].timeRan).toBeDefined(); - expect(historyItems[1].status).toBe('success'); + expect(historyItems[0].timeRan).toBeDefined(); + expect(historyItems[0].status).toBe('success'); }); it('should allow maximum x queries ', function () { diff --git a/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.ts b/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.ts index 5b3661f0306b0..2c2bac67499f0 100644 --- a/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.ts +++ b/src/platform/packages/private/kbn-esql-editor/src/history_local_storage.ts @@ -29,7 +29,7 @@ export const getTrimmedQuery = (queryString: string) => { const sortDates = (date1?: string, date2?: string) => { if (!date1 || !date2) return 0; - return date1 < date2 ? 1 : date1 > date2 ? -1 : 0; + return date1 < date2 ? -1 : date1 > date2 ? 1 : 0; }; export const getHistoryItems = (sortDirection: 'desc' | 'asc'): QueryHistoryItem[] => { @@ -59,7 +59,7 @@ export const getCachedQueries = (): QueryHistoryItem[] => { // Adding the maxQueriesAllowed here for testing purposes export const addQueriesToCache = ( - item: QueryHistoryItem, + itemToAddOrUpdate: QueryHistoryItem, maxQueriesAllowed = MAX_HISTORY_QUERIES_NUMBER ) => { // if the user is working on multiple tabs @@ -71,13 +71,12 @@ export const addQueriesToCache = ( const trimmedQueryString = getTrimmedQuery(queryItem.queryString); cachedQueries.set(trimmedQueryString, queryItem); }); - const trimmedQueryString = getTrimmedQuery(item.queryString); + const trimmedQueryString = getTrimmedQuery(itemToAddOrUpdate.queryString); - if (item.queryString) { + if (itemToAddOrUpdate.queryString) { cachedQueries.set(trimmedQueryString, { - ...item, + ...itemToAddOrUpdate, timeRan: new Date().toISOString(), - status: item.status, }); } diff --git a/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.test.ts b/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.test.ts index d2ee8e8345438..8dbcfba7bbc9d 100644 --- a/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.test.ts +++ b/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.test.ts @@ -32,11 +32,8 @@ import { } from '../constants'; import { CsvESQLGenerator, JobParamsCsvESQL } from './generate_csv_esql'; -const createMockJob = ( - params: Partial = { query: { esql: '' } } -): JobParamsCsvESQL => ({ +const createMockJob = (params: JobParamsCsvESQL): JobParamsCsvESQL => ({ ...params, - query: { esql: '' }, }); const mockTaskInstanceFields = { startedAt: null, retryAt: null }; @@ -106,7 +103,7 @@ describe('CsvESQLGenerator', () => { it('formats an empty search result to CSV content', async () => { const generateCsv = new CsvESQLGenerator( - createMockJob({ columns: ['date', 'ip', 'message'] }), + createMockJob({ query: { esql: '' }, columns: ['date', 'ip', 'message'] }), mockConfig, mockTaskInstanceFields, { @@ -138,7 +135,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { @@ -166,7 +163,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { @@ -196,7 +193,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { @@ -286,7 +283,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsvPromise = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfigWithAutoScrollDuration, taskInstanceFields, { @@ -362,7 +359,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsvPromise = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfigWithAutoScrollDuration, taskInstanceFields, { @@ -413,7 +410,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob({ columns: ['message', 'date', 'something else'] }), + createMockJob({ query: { esql: '' }, columns: ['message', 'date', 'something else'] }), mockConfig, mockTaskInstanceFields, { @@ -484,7 +481,80 @@ describe('CsvESQLGenerator', () => { }, }, locale: 'en', - query: '', + query: query.esql, + }, + }, + { + strategy: 'esql', + transport: { + requestTimeout: '30s', + }, + abortSignal: expect.any(AbortSignal), + } + ); + }); + + it('passes params to the query', async () => { + const query = { + esql: 'FROM custom-metrics-without-timestamp | WHERE event.ingested >= ?_tstart AND event.ingested <= ?_tend', + }; + const filters = [ + { + meta: {}, + query: { + range: { + 'event.ingested': { format: 'strict_date_optional_time', gte: 'now-15m', lte: 'now' }, + }, + }, + }, + ]; + + const generateCsv = new CsvESQLGenerator( + createMockJob({ query, filters }), + mockConfig, + mockTaskInstanceFields, + { + es: mockEsClient, + data: mockDataClient, + uiSettings: uiSettingsClient, + }, + new CancellationToken(), + mockLogger, + stream + ); + await generateCsv.generateData(); + + expect(mockDataClient.search).toHaveBeenCalledWith( + { + params: { + filter: { + bool: { + filter: [ + { + range: { + 'event.ingested': { + format: 'strict_date_optional_time', + gte: 'now-15m', + lte: 'now', + }, + }, + }, + ], + must: [], + must_not: [], + should: [], + }, + }, + params: expect.arrayContaining([ + expect.objectContaining({ + _tstart: expect.any(String), + }), + expect.objectContaining({ + _tend: expect.any(String), + }), + ]), + locale: 'en', + query: query.esql, }, }, { @@ -508,7 +578,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { @@ -538,7 +608,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { @@ -576,7 +646,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { @@ -605,7 +675,7 @@ describe('CsvESQLGenerator', () => { throw new Error('An unknown error'); }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { @@ -642,7 +712,7 @@ describe('CsvESQLGenerator', () => { }); const generateCsv = new CsvESQLGenerator( - createMockJob(), + createMockJob({ query: { esql: '' } }), mockConfig, mockTaskInstanceFields, { diff --git a/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.ts b/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.ts index 23dc3f8d4fda4..e47770374a991 100644 --- a/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.ts +++ b/src/platform/packages/private/kbn-generate-csv/src/generate_csv_esql.ts @@ -14,7 +14,8 @@ import type { IScopedClusterClient, IUiSettingsClient, Logger } from '@kbn/core/ import type { IKibanaSearchResponse, IKibanaSearchRequest } from '@kbn/search-types'; import { ESQL_SEARCH_STRATEGY, cellHasFormulas, getEsQueryConfig } from '@kbn/data-plugin/common'; import type { IScopedSearchClient } from '@kbn/data-plugin/server'; -import { type Filter, buildEsQuery } from '@kbn/es-query'; +import { type Filter, buildEsQuery, extractTimeRange } from '@kbn/es-query'; +import { getTimeFieldFromESQLQuery, getStartEndParams } from '@kbn/esql-utils'; import type { ESQLSearchParams, ESQLSearchResponse } from '@kbn/es-types'; import { i18n } from '@kbn/i18n'; import { @@ -76,6 +77,17 @@ export class CsvESQLGenerator { const { maxSizeBytes, bom, escapeFormulaValues } = settings; const builder = new MaxSizeStringBuilder(this.stream, byteSizeValueToNumber(maxSizeBytes), bom); + // it will return undefined if there are no _tstart, _tend named params in the query + const timeFieldName = getTimeFieldFromESQLQuery(this.job.query.esql); + const params = []; + if (timeFieldName && this.job.filters) { + const { timeRange } = extractTimeRange(this.job.filters, timeFieldName); + if (timeRange) { + const namedParams = getStartEndParams(this.job.query.esql, timeRange); + params.push(...namedParams); + } + } + const filter = this.job.filters && buildEsQuery( @@ -91,6 +103,7 @@ export class CsvESQLGenerator { filter, // locale can be used for number/date formatting locale: i18n.getLocale(), + ...(params.length ? { params } : {}), // TODO: time_zone support was temporarily removed from ES|QL, // we will need to add it back in once it is supported again. // /~https://github.com/elastic/elasticsearch/pull/102767 diff --git a/src/platform/packages/private/kbn-generate-csv/tsconfig.json b/src/platform/packages/private/kbn-generate-csv/tsconfig.json index bc06d1769db7c..e781e93336a66 100644 --- a/src/platform/packages/private/kbn-generate-csv/tsconfig.json +++ b/src/platform/packages/private/kbn-generate-csv/tsconfig.json @@ -31,5 +31,6 @@ "@kbn/data-views-plugin", "@kbn/search-types", "@kbn/task-manager-plugin", + "@kbn/esql-utils", ] } diff --git a/packages/kbn-grid-layout/README.md b/src/platform/packages/private/kbn-grid-layout/README.md similarity index 100% rename from packages/kbn-grid-layout/README.md rename to src/platform/packages/private/kbn-grid-layout/README.md diff --git a/packages/kbn-grid-layout/grid/drag_preview.tsx b/src/platform/packages/private/kbn-grid-layout/grid/drag_preview.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/drag_preview.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/drag_preview.tsx diff --git a/packages/kbn-grid-layout/grid/grid_height_smoother.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_height_smoother.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_height_smoother.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_height_smoother.tsx diff --git a/packages/kbn-grid-layout/grid/grid_layout.test.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_layout.test.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_layout.test.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_layout.test.tsx diff --git a/packages/kbn-grid-layout/grid/grid_layout.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_layout.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_layout.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_layout.tsx diff --git a/packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_panel/drag_handle.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_panel/drag_handle.tsx diff --git a/packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx diff --git a/packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_panel/grid_panel.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_panel/grid_panel.tsx diff --git a/packages/kbn-grid-layout/grid/grid_panel/index.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_panel/index.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_panel/index.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_panel/index.tsx diff --git a/packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_panel/resize_handle.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_panel/resize_handle.tsx diff --git a/packages/kbn-grid-layout/grid/grid_row/grid_row.test.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_row/grid_row.test.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_row/grid_row.test.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_row/grid_row.test.tsx diff --git a/packages/kbn-grid-layout/grid/grid_row/grid_row.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_row/grid_row.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_row/grid_row.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_row/grid_row.tsx diff --git a/packages/kbn-grid-layout/grid/grid_row/grid_row_header.tsx b/src/platform/packages/private/kbn-grid-layout/grid/grid_row/grid_row_header.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/grid_row/grid_row_header.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/grid_row/grid_row_header.tsx diff --git a/packages/kbn-grid-layout/grid/grid_row/index.ts b/src/platform/packages/private/kbn-grid-layout/grid/grid_row/index.ts similarity index 100% rename from packages/kbn-grid-layout/grid/grid_row/index.ts rename to src/platform/packages/private/kbn-grid-layout/grid/grid_row/index.ts diff --git a/packages/kbn-grid-layout/grid/test_utils/mocks.tsx b/src/platform/packages/private/kbn-grid-layout/grid/test_utils/mocks.tsx similarity index 100% rename from packages/kbn-grid-layout/grid/test_utils/mocks.tsx rename to src/platform/packages/private/kbn-grid-layout/grid/test_utils/mocks.tsx diff --git a/packages/kbn-grid-layout/grid/test_utils/sample_layout.ts b/src/platform/packages/private/kbn-grid-layout/grid/test_utils/sample_layout.ts similarity index 100% rename from packages/kbn-grid-layout/grid/test_utils/sample_layout.ts rename to src/platform/packages/private/kbn-grid-layout/grid/test_utils/sample_layout.ts diff --git a/packages/kbn-grid-layout/grid/types.ts b/src/platform/packages/private/kbn-grid-layout/grid/types.ts similarity index 100% rename from packages/kbn-grid-layout/grid/types.ts rename to src/platform/packages/private/kbn-grid-layout/grid/types.ts diff --git a/packages/kbn-grid-layout/grid/use_grid_layout_events.ts b/src/platform/packages/private/kbn-grid-layout/grid/use_grid_layout_events.ts similarity index 100% rename from packages/kbn-grid-layout/grid/use_grid_layout_events.ts rename to src/platform/packages/private/kbn-grid-layout/grid/use_grid_layout_events.ts diff --git a/packages/kbn-grid-layout/grid/use_grid_layout_state.ts b/src/platform/packages/private/kbn-grid-layout/grid/use_grid_layout_state.ts similarity index 100% rename from packages/kbn-grid-layout/grid/use_grid_layout_state.ts rename to src/platform/packages/private/kbn-grid-layout/grid/use_grid_layout_state.ts diff --git a/packages/kbn-grid-layout/grid/utils/equality_checks.ts b/src/platform/packages/private/kbn-grid-layout/grid/utils/equality_checks.ts similarity index 100% rename from packages/kbn-grid-layout/grid/utils/equality_checks.ts rename to src/platform/packages/private/kbn-grid-layout/grid/utils/equality_checks.ts diff --git a/packages/kbn-grid-layout/grid/utils/mobile_view.ts b/src/platform/packages/private/kbn-grid-layout/grid/utils/mobile_view.ts similarity index 100% rename from packages/kbn-grid-layout/grid/utils/mobile_view.ts rename to src/platform/packages/private/kbn-grid-layout/grid/utils/mobile_view.ts diff --git a/packages/kbn-grid-layout/grid/utils/resolve_grid_row.test.ts b/src/platform/packages/private/kbn-grid-layout/grid/utils/resolve_grid_row.test.ts similarity index 100% rename from packages/kbn-grid-layout/grid/utils/resolve_grid_row.test.ts rename to src/platform/packages/private/kbn-grid-layout/grid/utils/resolve_grid_row.test.ts diff --git a/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts b/src/platform/packages/private/kbn-grid-layout/grid/utils/resolve_grid_row.ts similarity index 100% rename from packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts rename to src/platform/packages/private/kbn-grid-layout/grid/utils/resolve_grid_row.ts diff --git a/packages/kbn-grid-layout/grid/utils/sensors.ts b/src/platform/packages/private/kbn-grid-layout/grid/utils/sensors.ts similarity index 100% rename from packages/kbn-grid-layout/grid/utils/sensors.ts rename to src/platform/packages/private/kbn-grid-layout/grid/utils/sensors.ts diff --git a/packages/kbn-grid-layout/index.ts b/src/platform/packages/private/kbn-grid-layout/index.ts similarity index 100% rename from packages/kbn-grid-layout/index.ts rename to src/platform/packages/private/kbn-grid-layout/index.ts diff --git a/packages/kbn-grid-layout/jest.config.js b/src/platform/packages/private/kbn-grid-layout/jest.config.js similarity index 83% rename from packages/kbn-grid-layout/jest.config.js rename to src/platform/packages/private/kbn-grid-layout/jest.config.js index f6fdd14c553a4..38d6784bd0927 100644 --- a/packages/kbn-grid-layout/jest.config.js +++ b/src/platform/packages/private/kbn-grid-layout/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../..', - roots: ['/packages/kbn-grid-layout'], + rootDir: '../../../../..', + roots: ['/src/platform/packages/private/kbn-grid-layout'], }; diff --git a/packages/kbn-grid-layout/kibana.jsonc b/src/platform/packages/private/kbn-grid-layout/kibana.jsonc similarity index 100% rename from packages/kbn-grid-layout/kibana.jsonc rename to src/platform/packages/private/kbn-grid-layout/kibana.jsonc diff --git a/packages/kbn-grid-layout/package.json b/src/platform/packages/private/kbn-grid-layout/package.json similarity index 100% rename from packages/kbn-grid-layout/package.json rename to src/platform/packages/private/kbn-grid-layout/package.json diff --git a/packages/kbn-grid-layout/tsconfig.json b/src/platform/packages/private/kbn-grid-layout/tsconfig.json similarity index 79% rename from packages/kbn-grid-layout/tsconfig.json rename to src/platform/packages/private/kbn-grid-layout/tsconfig.json index 18f236e95cf9e..89796203132c0 100644 --- a/packages/kbn-grid-layout/tsconfig.json +++ b/src/platform/packages/private/kbn-grid-layout/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", }, diff --git a/packages/content-management/content_insights/README.mdx b/src/platform/packages/shared/content-management/content_insights/README.mdx similarity index 100% rename from packages/content-management/content_insights/README.mdx rename to src/platform/packages/shared/content-management/content_insights/README.mdx diff --git a/packages/content-management/favorites/README.mdx b/src/platform/packages/shared/content-management/favorites/README.mdx similarity index 100% rename from packages/content-management/favorites/README.mdx rename to src/platform/packages/shared/content-management/favorites/README.mdx diff --git a/src/platform/packages/shared/deeplinks/search/deep_links.ts b/src/platform/packages/shared/deeplinks/search/deep_links.ts index 2a4b47dde31f0..3aa024b4c9e08 100644 --- a/src/platform/packages/shared/deeplinks/search/deep_links.ts +++ b/src/platform/packages/shared/deeplinks/search/deep_links.ts @@ -46,7 +46,7 @@ export type SearchVectorSearch = typeof SEARCH_VECTOR_SEARCH; export type SearchSemanticSearch = typeof SEARCH_SEMANTIC_SEARCH; export type SearchAISearch = typeof SEARCH_AI_SEARCH; -export type ContentLinkId = 'searchIndices' | 'connectors' | 'webCrawlers'; +export type ContentLinkId = 'connectors' | 'webCrawlers'; export type ApplicationsLinkId = 'searchApplications'; diff --git a/src/platform/packages/shared/deeplinks/search/index.ts b/src/platform/packages/shared/deeplinks/search/index.ts index ab9d2e6a8d43f..7e2c41945dde7 100644 --- a/src/platform/packages/shared/deeplinks/search/index.ts +++ b/src/platform/packages/shared/deeplinks/search/index.ts @@ -19,6 +19,8 @@ export { SEARCH_SEMANTIC_SEARCH, SEARCH_AI_SEARCH, ES_SEARCH_PLAYGROUND_ID, + SEARCH_INDICES_START, + SEARCH_INDICES, } from './constants'; export type { diff --git a/src/platform/packages/shared/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.test.tsx b/src/platform/packages/shared/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.test.tsx index 3d08697f98652..cfe5442f5473a 100644 --- a/src/platform/packages/shared/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.test.tsx +++ b/src/platform/packages/shared/kbn-alerts-ui-shared/src/alert_filter_controls/filter_group.test.tsx @@ -589,8 +589,14 @@ describe(' Filter Group Component ', () => { /> ); - expect(consoleErrorSpy.mock.calls.length).toBe(1); - expect(String(consoleErrorSpy.mock.calls[0][0])).toMatch(URL_PARAM_ARRAY_EXCEPTION_MSG); + const componentErrors = consoleErrorSpy.mock.calls.filter( + (c) => + !c[0]?.startsWith?.( + 'Warning: ReactDOM.render' + ) /* exclude react@18 legacy root warnings */ + ); + expect(componentErrors.length).toBe(1); + expect(String(componentErrors[0][0])).toMatch(URL_PARAM_ARRAY_EXCEPTION_MSG); }); }); diff --git a/src/platform/packages/shared/kbn-datemath/package.json b/src/platform/packages/shared/kbn-datemath/package.json index c0aa12eab63df..c5a0632847d40 100644 --- a/src/platform/packages/shared/kbn-datemath/package.json +++ b/src/platform/packages/shared/kbn-datemath/package.json @@ -4,6 +4,6 @@ "description": "elasticsearch datemath parser, used in kibana", "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0", "peerDependencies": { - "moment": "^2.24.0" + "moment": "^2.30.1" } } \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.test.ts b/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.test.ts index e1989518582c3..e5195bcf6066a 100644 --- a/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.test.ts +++ b/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.test.ts @@ -24,4 +24,28 @@ describe('convertRangeFilterToTimeRange', () => { expect(convertedRangeFilter).toEqual(filterAfterConvertedRangeFilter); }); + + it('should return converted range for relative dates', () => { + const filter: any = { query: { range: { '@timestamp': { gte: 'now-1d', lte: 'now' } } } }; + const filterAfterConvertedRangeFilter = { + from: 'now-1d', + to: 'now', + }; + const convertedRangeFilter = convertRangeFilterToTimeRange(filter); + + expect(convertedRangeFilter).toEqual(filterAfterConvertedRangeFilter); + }); + + it('should return converted range for relative dates without now', () => { + const filter: any = { + query: { range: { '@timestamp': { gte: '2024.02.01', lte: '2024.02.01||+1M/d' } } }, + }; + const filterAfterConvertedRangeFilter = { + from: moment('2024.02.01'), + to: '2024.02.01||+1M/d', + }; + const convertedRangeFilter = convertRangeFilterToTimeRange(filter); + + expect(convertedRangeFilter).toEqual(filterAfterConvertedRangeFilter); + }); }); diff --git a/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.ts b/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.ts index b5a58ba528852..88b8f5f8a35ec 100644 --- a/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.ts +++ b/src/platform/packages/shared/kbn-es-query/src/filters/helpers/convert_range_filter.ts @@ -12,20 +12,26 @@ import { keys } from 'lodash'; import type { RangeFilter } from '../build_filters'; import type { TimeRange } from './types'; +const isRelativeTime = (value: string | number | undefined): boolean => { + return typeof value === 'string' && !moment(value).isValid(); +}; + export function convertRangeFilterToTimeRange(filter: RangeFilter) { const key = keys(filter.query.range)[0]; const values = filter.query.range[key]; + const from = values.gt || values.gte; + const to = values.lt || values.lte; return { - from: moment(values.gt || values.gte), - to: moment(values.lt || values.lte), + from: from && isRelativeTime(from) ? String(from) : moment(from), + to: to && isRelativeTime(to) ? String(to) : moment(to), }; } export function convertRangeFilterToTimeRangeString(filter: RangeFilter): TimeRange { const { from, to } = convertRangeFilterToTimeRange(filter); return { - from: from?.toISOString(), - to: to?.toISOString(), + from: moment.isMoment(from) ? from?.toISOString() : from, + to: moment.isMoment(to) ? to?.toISOString() : to, }; } diff --git a/src/platform/packages/shared/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap b/src/platform/packages/shared/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap index 16161ff61e458..67216f1a32999 100644 --- a/src/platform/packages/shared/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap +++ b/src/platform/packages/shared/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap @@ -53,6 +53,16 @@ exports[`FieldIcon renders known field types boolean is rendered 1`] = ` /> `; +exports[`FieldIcon renders known field types byte is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types conflict is rendered 1`] = ` `; +exports[`FieldIcon renders known field types double is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types flattened is rendered 1`] = ` `; +exports[`FieldIcon renders known field types float is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types gauge is rendered 1`] = ` `; +exports[`FieldIcon renders known field types half_float is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types histogram is rendered 1`] = ` `; +exports[`FieldIcon renders known field types integer is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types ip is rendered 1`] = ` `; +exports[`FieldIcon renders known field types long is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types match_only_text is rendered 1`] = ` `; +exports[`FieldIcon renders known field types scaled_float is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types semantic_text is rendered 1`] = ` `; +exports[`FieldIcon renders known field types short is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types sparse_vector is rendered 1`] = ` `; +exports[`FieldIcon renders known field types unsigned_long is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types version is rendered 1`] = ` { - type: - | 'binary' - | 'boolean' - | 'conflict' - | 'date' - | 'date_range' - | 'dense_vector' - | 'geo_point' - | 'geo_shape' - | 'ip' - | 'ip_range' - | 'flattened' - | 'match_only_text' - | 'murmur3' - | 'number' - | 'number_range' - | 'rank_feature' - | 'rank_features' - | '_source' - | 'point' - | 'shape' - | 'sparse_vector' - | 'semantic_text' - | 'string' - | string - | 'nested' - | 'gauge' - | 'counter' - | 'version'; - label?: string; - scripted?: boolean; -} - // defaultIcon => a unknown datatype const defaultIcon = { iconType: 'questionInCircle', color: 'gray' }; -export const typeToEuiIconMap: Partial> = { +export const typeToEuiIconMap = { binary: { iconType: 'tokenBinary' }, boolean: { iconType: 'tokenBoolean' }, // icon for an index pattern mapping conflict in discover @@ -62,10 +28,20 @@ export const typeToEuiIconMap: Partial> = { ip_range: { iconType: 'tokenIP' }, flattened: { iconType: 'tokenFlattened' }, match_only_text: { iconType: 'tokenString' }, - // is a plugin's data type https://www.elastic.co/guide/en/elasticsearch/plugins/current/mapper-murmur3-usage.html - murmur3: { iconType: 'tokenSearchType' }, + // Numeric types number: { iconType: 'tokenNumber' }, number_range: { iconType: 'tokenNumber' }, + byte: { iconType: 'tokenNumber' }, + double: { iconType: 'tokenNumber' }, + float: { iconType: 'tokenNumber' }, + half_float: { iconType: 'tokenNumber' }, + integer: { iconType: 'tokenNumber' }, + long: { iconType: 'tokenNumber' }, + scaled_float: { iconType: 'tokenNumber' }, + short: { iconType: 'tokenNumber' }, + unsigned_long: { iconType: 'tokenNumber' }, + // is a plugin's data type https://www.elastic.co/guide/en/elasticsearch/plugins/current/mapper-murmur3-usage.html + murmur3: { iconType: 'tokenSearchType' }, rank_feature: { iconType: 'tokenRankFeature' }, rank_features: { iconType: 'tokenRankFeatures' }, histogram: { iconType: 'tokenHistogram' }, @@ -81,7 +57,15 @@ export const typeToEuiIconMap: Partial> = { counter: { iconType: 'tokenMetricCounter' }, nested: { iconType: 'tokenNested' }, version: { iconType: 'tokenTag' }, -}; +} as const; + +type AllowedIconType = keyof typeof typeToEuiIconMap; + +export interface FieldIconProps extends Omit { + type: AllowedIconType | (string & {}); + label?: string; + scripted?: boolean; +} /** * Field token icon used across the app @@ -94,7 +78,7 @@ export function FieldIcon({ className, ...rest }: FieldIconProps) { - const token = typeToEuiIconMap[type] || defaultIcon; + const token = typeToEuiIconMap[type as AllowedIconType] || defaultIcon; return ( { api_key_secret_id: null, configuration: {}, custom_scheduling: {}, + deleted: false, description: null, error: null, features: null, diff --git a/src/platform/packages/shared/kbn-search-connectors/lib/create_connector_document.ts b/src/platform/packages/shared/kbn-search-connectors/lib/create_connector_document.ts index 2f1f91a1f0f6e..d0c1e984e01db 100644 --- a/src/platform/packages/shared/kbn-search-connectors/lib/create_connector_document.ts +++ b/src/platform/packages/shared/kbn-search-connectors/lib/create_connector_document.ts @@ -43,6 +43,7 @@ export function createConnectorDocument({ configuration: configuration || {}, custom_scheduling: {}, description: null, + deleted: false, error: null, features: features || null, filtering: [ diff --git a/src/platform/packages/shared/kbn-search-connectors/lib/fetch_connectors.ts b/src/platform/packages/shared/kbn-search-connectors/lib/fetch_connectors.ts index 17478805bf9da..01727f1aaedc9 100644 --- a/src/platform/packages/shared/kbn-search-connectors/lib/fetch_connectors.ts +++ b/src/platform/packages/shared/kbn-search-connectors/lib/fetch_connectors.ts @@ -57,7 +57,8 @@ export const fetchConnectors = async ( client: ElasticsearchClient, indexNames?: string[], fetchOnlyCrawlers?: boolean, - searchQuery?: string + searchQuery?: string, + includeDeleted?: boolean ): Promise => { const q = searchQuery && searchQuery.length > 0 ? searchQuery : undefined; @@ -82,6 +83,7 @@ export const fetchConnectors = async ( ...querystring, from: accumulator.length, size: 1000, + include_deleted: includeDeleted, }, }); diff --git a/src/platform/packages/shared/kbn-search-connectors/types/connectors.ts b/src/platform/packages/shared/kbn-search-connectors/types/connectors.ts index 3863c3b70dcf1..caab8f142cc3c 100644 --- a/src/platform/packages/shared/kbn-search-connectors/types/connectors.ts +++ b/src/platform/packages/shared/kbn-search-connectors/types/connectors.ts @@ -227,6 +227,7 @@ export interface Connector { id: string; index_name: string | null; is_native: boolean; + deleted: boolean | null; language: string | null; last_access_control_sync_error: string | null; last_access_control_sync_scheduled_at: string | null; diff --git a/packages/react/kibana_context/README.mdx b/src/platform/packages/shared/react/kibana_context/README.mdx similarity index 100% rename from packages/react/kibana_context/README.mdx rename to src/platform/packages/shared/react/kibana_context/README.mdx diff --git a/packages/react/kibana_context/assets/diagram.png b/src/platform/packages/shared/react/kibana_context/assets/diagram.png similarity index 100% rename from packages/react/kibana_context/assets/diagram.png rename to src/platform/packages/shared/react/kibana_context/assets/diagram.png diff --git a/src/platform/plugins/private/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap b/src/platform/plugins/private/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap deleted file mode 100644 index be57e413da4c8..0000000000000 --- a/src/platform/plugins/private/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap +++ /dev/null @@ -1,1602 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Overview renders correctly 1`] = ` - - , - "rightSideItems": Array [], - } - } - panelled={false} - > - - - -`; - -exports[`Overview renders correctly when there is no user data view 1`] = ` - - - - - - } - > - - - - - - - - - -`; - -exports[`Overview renders correctly without features 1`] = ` - - , - "rightSideItems": Array [], - } - } - panelled={false} - > - - - -`; - -exports[`Overview renders correctly without solutions 1`] = ` - - , - "rightSideItems": Array [], - } - } - panelled={false} - > - - - -`; - -exports[`Overview show loading spinner during loading 1`] = ` -
-
- -
-
-`; diff --git a/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.mocks.ts b/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.mocks.ts index 151042c64b377..cb735d2683c0a 100644 --- a/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.mocks.ts +++ b/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.mocks.ts @@ -8,7 +8,9 @@ */ import React from 'react'; -import { Observable, of } from 'rxjs'; +import { of } from 'rxjs'; +import { applicationServiceMock } from '@kbn/core-application-browser-mocks'; +import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import { indexPatternEditorPluginMock } from '@kbn/data-view-editor-plugin/public/mocks'; export const hasUserDataView = jest.fn(); @@ -17,18 +19,8 @@ export const hasESData = jest.fn(); jest.doMock('@kbn/kibana-react-plugin/public', () => ({ useKibana: jest.fn().mockReturnValue({ services: { - application: { - currentAppId$: new Observable(), - navigateToUrl: jest.fn(), - capabilities: { - navLinks: { - integrations: { - canAccessFleet: false, - }, - }, - }, - }, - http: { basePath: { prepend: jest.fn((path: string) => (path ? path : 'path')) } }, + application: applicationServiceMock.createStartContract(), + http: httpServiceMock.createStartContract(), dataViews: { hasUserDataView: jest.fn(), hasData: { diff --git a/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.tsx b/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.tsx index 44e7de1e6f447..410bb04715e79 100644 --- a/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.tsx +++ b/src/platform/plugins/private/kibana_overview/public/components/overview/overview.test.tsx @@ -8,20 +8,14 @@ */ import React from 'react'; -import { setTimeout as setTimeoutP } from 'timers/promises'; import moment from 'moment'; -import { act } from 'react-dom/test-utils'; -import { ReactWrapper } from 'enzyme'; -import { EuiLoadingSpinner } from '@elastic/eui'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; -import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +import { render, waitFor } from '@testing-library/react'; import type { FeatureCatalogueCategory } from '@kbn/home-plugin/public'; -import { AnalyticsNoDataPageKibanaProvider } from '@kbn/shared-ux-page-analytics-no-data'; import { hasESData, hasUserDataView } from './overview.test.mocks'; import { Overview } from './overview'; jest.mock('@kbn/shared-ux-page-kibana-template', () => { - const MockedComponent: string = 'MockedKibanaPageTemplate'; + const MockedComponent = () => 'MockedKibanaPageTemplate'; const mockedModule = { ...jest.requireActual('@kbn/shared-ux-page-kibana-template'), KibanaPageTemplate: () => { @@ -32,7 +26,7 @@ jest.mock('@kbn/shared-ux-page-kibana-template', () => { }); jest.mock('@kbn/shared-ux-page-analytics-no-data', () => { - const MockedComponent: string = 'MockedAnalyticsNoDataPage'; + const MockedComponent = () => 'MockedAnalyticsNoDataPage'; return { ...jest.requireActual('@kbn/shared-ux-page-analytics-no-data'), AnalyticsNoDataPageKibanaProvider: () => { @@ -150,15 +144,6 @@ const mockFeatures = [ }, ]; -const flushPromises = async () => await setTimeoutP(10); - -const updateComponent = async (component: ReactWrapper) => { - await act(async () => { - await flushPromises(); - component.update(); - }); -}; - describe('Overview', () => { beforeEach(() => { hasESData.mockResolvedValue(true); @@ -168,7 +153,7 @@ describe('Overview', () => { afterAll(() => jest.clearAllMocks()); test('renders correctly', async () => { - const component = mountWithIntl( + const { getByText } = render( { /> ); - await updateComponent(component); - - expect(component).toMatchSnapshot(); - expect(component.find(KibanaPageTemplate).length).toBe(1); + await waitFor(() => { + expect(getByText('MockedKibanaPageTemplate')).toBeInTheDocument(); + }); }); test('renders correctly without solutions', async () => { - const component = mountWithIntl( + const { getByText } = render( ); - await updateComponent(component); - - expect(component).toMatchSnapshot(); + await waitFor(() => { + expect(getByText('MockedKibanaPageTemplate')).toBeInTheDocument(); + }); }); test('renders correctly without features', async () => { - const component = mountWithIntl( + const { getByText } = render( ); - await updateComponent(component); - - expect(component).toMatchSnapshot(); + await waitFor(() => { + expect(getByText('MockedKibanaPageTemplate')).toBeInTheDocument(); + }); }); test('renders correctly when there is no user data view', async () => { hasESData.mockResolvedValue(true); hasUserDataView.mockResolvedValue(false); - const component = mountWithIntl( + const { getByText, queryByText, queryByLabelText } = render( { /> ); - await updateComponent(component); + await waitFor(() => { + expect(getByText('MockedAnalyticsNoDataPage')).toBeInTheDocument(); + }); - expect(component).toMatchSnapshot(); - expect(component.find(AnalyticsNoDataPageKibanaProvider).length).toBe(1); - expect(component.find(KibanaPageTemplate).length).toBe(0); - expect(component.find(EuiLoadingSpinner).length).toBe(0); + expect(queryByText('MockedKibanaPageTemplate')).not.toBeInTheDocument(); + expect(queryByLabelText('Loading')).not.toBeInTheDocument(); }); test('show loading spinner during loading', async () => { hasESData.mockImplementation(() => new Promise(() => {})); hasUserDataView.mockImplementation(() => new Promise(() => {})); - const component = mountWithIntl( + const { getByLabelText, queryByText } = render( { /> ); - await updateComponent(component); + await waitFor(() => { + expect(getByLabelText('Loading')).toBeInTheDocument(); + }); - expect(component.render()).toMatchSnapshot(); - expect(component.find(AnalyticsNoDataPageKibanaProvider).length).toBe(0); - expect(component.find(KibanaPageTemplate).length).toBe(0); - expect(component.find(EuiLoadingSpinner).length).toBe(1); + expect(queryByText('MockedAnalyticsNoDataPage')).not.toBeInTheDocument(); + expect(queryByText('MockedKibanaPageTemplate')).not.toBeInTheDocument(); }); }); diff --git a/src/platform/plugins/private/kibana_overview/tsconfig.json b/src/platform/plugins/private/kibana_overview/tsconfig.json index f2fd70144e928..469f4bc2f580c 100644 --- a/src/platform/plugins/private/kibana_overview/tsconfig.json +++ b/src/platform/plugins/private/kibana_overview/tsconfig.json @@ -28,6 +28,8 @@ "@kbn/shared-ux-avatar-solution", "@kbn/shared-ux-utility", "@kbn/react-kibana-context-render", + "@kbn/core-application-browser-mocks", + "@kbn/core-http-browser-mocks", ], "exclude": [ "target/**/*", diff --git a/src/platform/plugins/private/kibana_usage_collection/server/collectors/application_usage/schema.ts b/src/platform/plugins/private/kibana_usage_collection/server/collectors/application_usage/schema.ts index 86d6c84cbcedf..5f605af64b665 100644 --- a/src/platform/plugins/private/kibana_usage_collection/server/collectors/application_usage/schema.ts +++ b/src/platform/plugins/private/kibana_usage_collection/server/collectors/application_usage/schema.ts @@ -138,6 +138,8 @@ export const applicationUsageSchema = { enterpriseSearchContent: commonSchema, searchInferenceEndpoints: commonSchema, searchPlayground: commonSchema, + elasticsearchIndices: commonSchema, + elasticsearchStart: commonSchema, enterpriseSearchAnalytics: commonSchema, enterpriseSearchApplications: commonSchema, enterpriseSearchAISearch: commonSchema, diff --git a/src/platform/plugins/private/links/public/types.ts b/src/platform/plugins/private/links/public/types.ts index df3eb7fc2b514..d4b88ca5b7c51 100644 --- a/src/platform/plugins/private/links/public/types.ts +++ b/src/platform/plugins/private/links/public/types.ts @@ -21,14 +21,14 @@ import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; import { DynamicActionsSerializedState } from '@kbn/embeddable-enhanced-plugin/public/plugin'; import { HasSerializedChildState, PresentationContainer } from '@kbn/presentation-containers'; import { LocatorPublic } from '@kbn/share-plugin/common'; -import { DashboardLocatorParams, DASHBOARD_CONTAINER_TYPE } from '@kbn/dashboard-plugin/public'; +import { DashboardLocatorParams, DASHBOARD_API_TYPE } from '@kbn/dashboard-plugin/public'; import type { DashboardAttributes } from '@kbn/dashboard-plugin/server'; import { CONTENT_ID } from '../common'; import { Link, LinksAttributes, LinksLayoutType } from '../common/content_management'; export type LinksParentApi = PresentationContainer & - HasType & + HasType & HasSerializedChildState & PublishesSavedObjectId & PublishesPanelTitle & diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/_presentation_panel.scss b/src/platform/plugins/private/presentation_panel/public/panel_component/_presentation_panel.scss index 52e7615308fdd..80397a6f91772 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/_presentation_panel.scss +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/_presentation_panel.scss @@ -114,15 +114,6 @@ // LOADING and ERRORS -.embPanel__error { - padding: $euiSizeL; - - & > * { - max-height: 100%; - overflow: auto; - } -} - .embPanel__label { position: absolute; padding-left: $euiSizeS; diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_header.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_header.tsx index 74b88cd369cf1..c66e8c986a218 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_header.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_header.tsx @@ -9,13 +9,25 @@ import { EuiScreenReaderOnly } from '@elastic/eui'; import { ViewMode } from '@kbn/presentation-publishing'; +import { i18n } from '@kbn/i18n'; import classNames from 'classnames'; import React, { useCallback } from 'react'; -import { getAriaLabelForTitle } from '../presentation_panel_strings'; +import { placeholderTitle } from './presentation_panel_title'; import { DefaultPresentationPanelApi, PresentationPanelInternalProps } from '../types'; import { PresentationPanelTitle } from './presentation_panel_title'; import { usePresentationPanelHeaderActions } from './use_presentation_panel_header_actions'; +const getAriaLabelForTitle = (title?: string) => { + return title + ? i18n.translate('presentationPanel.enhancedAriaLabel', { + defaultMessage: 'Panel: {title}', + values: { title: title || placeholderTitle }, + }) + : i18n.translate('presentationPanel.ariaLabel', { + defaultMessage: 'Panel', + }); +}; + export type PresentationPanelHeaderProps = { api: ApiType; headerId: string; diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx index 59ac3b46ac954..f7878c13f436f 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_hover_actions.tsx @@ -50,10 +50,27 @@ import { panelNotificationTrigger, PANEL_NOTIFICATION_TRIGGER, } from '../../panel_actions'; -import { getContextMenuAriaLabel } from '../presentation_panel_strings'; import { DefaultPresentationPanelApi, PresentationPanelInternalProps } from '../types'; import { AnyApiAction } from '../../panel_actions/types'; +const getContextMenuAriaLabel = (title?: string, index?: number) => { + if (title) { + return i18n.translate('presentationPanel.contextMenu.ariaLabelWithTitle', { + defaultMessage: 'Panel options for {title}', + values: { title }, + }); + } + if (index) { + return i18n.translate('presentationPanel.contextMenu.ariaLabelWithIndex', { + defaultMessage: 'Options for panel {index}', + values: { index }, + }); + } + return i18n.translate('presentationPanel.contextMenu.ariaLabel', { + defaultMessage: 'Panel options', + }); +}; + const QUICK_ACTION_IDS = { edit: [ 'editPanel', diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_title.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_title.tsx index ef819c427c765..2a3ef95a2e228 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_title.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/panel_header/presentation_panel_title.tsx @@ -24,14 +24,18 @@ import { repeatWhen, } from 'rxjs'; +import { i18n } from '@kbn/i18n'; import { ViewMode } from '@kbn/presentation-publishing'; -import { getEditTitleAriaLabel, placeholderTitle } from '../presentation_panel_strings'; import { CustomizePanelActionApi, isApiCompatibleWithCustomizePanelAction, } from '../../panel_actions/customize_panel_action'; import { openCustomizePanelFlyout } from '../../panel_actions/customize_panel_action/open_customize_panel'; +export const placeholderTitle = i18n.translate('presentationPanel.placeholderTitle', { + defaultMessage: '[No Title]', +}); + const createDocumentMouseMoveListener = once(() => fromEvent(document, 'mousemove')); const createDocumentMouseUpListener = once(() => fromEvent(document, 'mouseup')); @@ -107,7 +111,10 @@ export const PresentationPanelTitle = ({ color="text" ref={setPanelTitleElmRef} className={titleClassNames} - aria-label={getEditTitleAriaLabel(panelTitle)} + aria-label={i18n.translate('presentationPanel.header.titleAriaLabel', { + defaultMessage: 'Click to edit title: {title}', + values: { title: panelTitle ?? placeholderTitle }, + })} data-test-subj={'embeddablePanelTitleLink'} > {panelTitle || placeholderTitle} diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel.tsx index 4d2c60f951eed..f16d30158cab3 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel.tsx @@ -7,17 +7,20 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import './_presentation_panel.scss'; - import { EuiErrorBoundary, EuiFlexGroup, useEuiTheme } from '@elastic/eui'; import { PanelLoader } from '@kbn/panel-loader'; import { isPromise } from '@kbn/std'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; import { untilPluginStartServicesReady } from '../kibana_services'; import type { DefaultPresentationPanelApi, PresentationPanelProps } from './types'; -import { getErrorLoadingPanel } from './presentation_panel_strings'; +import { usePanelErrorCss } from './use_panel_error_css'; + +const errorLoadingPanel = i18n.translate('presentationPanel.error.errorWhenLoadingPanel', { + defaultMessage: 'An error occurred while loading this panel.', +}); export const PresentationPanel = < ApiType extends DefaultPresentationPanelApi = DefaultPresentationPanelApi, @@ -27,6 +30,7 @@ export const PresentationPanel = < hidePanelChrome?: boolean; } ) => { + const panelErrorCss = usePanelErrorCss(); const { Component, hidePanelChrome, ...passThroughProps } = props; const { euiTheme } = useEuiTheme(); const { loading, value } = useAsync(async () => { @@ -88,14 +92,15 @@ export const PresentationPanel = < return ( {PanelError ? ( - + ) : ( - value?.loadErrorReason ?? getErrorLoadingPanel() + value?.loadErrorReason ?? errorLoadingPanel )} ); diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx index 7f485621820c2..244dbba2449d2 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_error_internal.tsx @@ -18,7 +18,6 @@ import { Subscription } from 'rxjs'; import { i18n } from '@kbn/i18n'; import { useErrorTextStyle } from '@kbn/react-hooks'; import { ActionExecutionMeta } from '@kbn/ui-actions-plugin/public'; -import { getErrorCallToAction } from './presentation_panel_strings'; import { DefaultPresentationPanelApi } from './types'; import { uiActions } from '../kibana_services'; import { executeEditPanelAction } from '../panel_actions/edit_panel_action/execute_edit_action'; @@ -65,7 +64,13 @@ export const PresentationPanelErrorInternal = ({ api, error }: PresentationPanel const panelTitle = useStateFromPublishingSubject(api?.panelTitle); const ariaLabel = useMemo( - () => (panelTitle ? getErrorCallToAction(panelTitle) : label), + () => + panelTitle + ? i18n.translate('presentationPanel.error.editButton', { + defaultMessage: 'Edit {value}', + values: { value: panelTitle }, + }) + : label, [label, panelTitle] ); diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx index 5ba645e245803..2ae91b989921d 100644 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_internal.tsx @@ -7,6 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import './_presentation_panel.scss'; + import { EuiErrorBoundary, EuiFlexGroup, EuiPanel, htmlIdGenerator } from '@elastic/eui'; import { PanelLoader } from '@kbn/panel-loader'; import { @@ -20,6 +22,7 @@ import { PresentationPanelHeader } from './panel_header/presentation_panel_heade import { PresentationPanelHoverActions } from './panel_header/presentation_panel_hover_actions'; import { PresentationPanelErrorInternal } from './presentation_panel_error_internal'; import { DefaultPresentationPanelApi, PresentationPanelInternalProps } from './types'; +import { usePanelErrorCss } from './use_panel_error_css'; export const PresentationPanelInternal = < ApiType extends DefaultPresentationPanelApi = DefaultPresentationPanelApi, @@ -40,6 +43,7 @@ export const PresentationPanelInternal = < setDragHandles, }: PresentationPanelInternalProps) => { + const panelErrorCss = usePanelErrorCss(); const [api, setApi] = useState(null); const headerId = useMemo(() => htmlIdGenerator()(), []); @@ -143,7 +147,8 @@ export const PresentationPanelInternal = < {blockingError && api && ( diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_strings.ts b/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_strings.ts deleted file mode 100644 index 589c43164d399..0000000000000 --- a/src/platform/plugins/private/presentation_panel/public/panel_component/presentation_panel_strings.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { i18n } from '@kbn/i18n'; - -export const placeholderTitle = i18n.translate('presentationPanel.placeholderTitle', { - defaultMessage: '[No Title]', -}); - -export const getAriaLabelForTitle = (title?: string) => { - if (title) { - return i18n.translate('presentationPanel.enhancedAriaLabel', { - defaultMessage: 'Panel: {title}', - values: { title: title || placeholderTitle }, - }); - } - return i18n.translate('presentationPanel.ariaLabel', { - defaultMessage: 'Panel', - }); -}; - -export const getErrorCallToAction = (title: string) => - i18n.translate('presentationPanel.error.editButton', { - defaultMessage: 'Edit {value}', - values: { value: title }, - }); - -export const getErrorLoadingPanel = () => - i18n.translate('presentationPanel.error.errorWhenLoadingPanel', { - defaultMessage: 'An error occurred while loading this panel.', - }); - -export const getEditTitleAriaLabel = (title?: string) => - i18n.translate('presentationPanel.header.titleAriaLabel', { - defaultMessage: 'Click to edit title: {title}', - values: { title: title || placeholderTitle }, - }); - -export const getContextMenuAriaLabel = (title?: string, index?: number) => { - if (title) { - return i18n.translate('presentationPanel.contextMenu.ariaLabelWithTitle', { - defaultMessage: 'Panel options for {title}', - values: { title }, - }); - } - if (index) { - return i18n.translate('presentationPanel.contextMenu.ariaLabelWithIndex', { - defaultMessage: 'Options for panel {index}', - values: { index }, - }); - } - return i18n.translate('presentationPanel.contextMenu.ariaLabel', { - defaultMessage: 'Panel options', - }); -}; diff --git a/src/platform/plugins/private/presentation_panel/public/panel_component/use_panel_error_css.ts b/src/platform/plugins/private/presentation_panel/public/panel_component/use_panel_error_css.ts new file mode 100644 index 0000000000000..5349970e1f3d5 --- /dev/null +++ b/src/platform/plugins/private/presentation_panel/public/panel_component/use_panel_error_css.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; + +export const usePanelErrorCss = () => { + const euiTheme = useEuiTheme(); + return css({ + padding: euiTheme.euiTheme.size.l, + '& > *': { + maxHeight: '100%', + overflow: 'auto', + }, + }); +}; diff --git a/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts b/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts index 9128289708aa5..29f7d9a4cda65 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts +++ b/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/expression_functions/heatmap_grid.ts @@ -73,6 +73,12 @@ export const heatmapGridConfig: ExpressionFunctionDefinition< defaultMessage: 'Specifies whether or not the X-axis labels are visible.', }), }, + xAxisLabelRotation: { + types: ['number'], + help: i18n.translate('expressionHeatmap.function.args.grid.xAxisLabelRotation.help', { + defaultMessage: 'Specifies the rotation of the X-axis labels.', + }), + }, isXAxisTitleVisible: { types: ['boolean'], help: i18n.translate('expressionHeatmap.function.args.grid.isXAxisTitleVisible.help', { diff --git a/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/types/expression_functions.ts b/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/types/expression_functions.ts index f63a0a56b63ac..a36d9096501b0 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/types/expression_functions.ts +++ b/src/platform/plugins/shared/chart_expressions/expression_heatmap/common/types/expression_functions.ts @@ -71,6 +71,7 @@ export interface HeatmapGridConfig { yTitle?: string; // X-axis isXAxisLabelVisible: boolean; + xAxisLabelRotation?: number; isXAxisTitleVisible: boolean; xTitle?: string; } diff --git a/src/platform/plugins/shared/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx b/src/platform/plugins/shared/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx index fb870e3605b02..ddd42f62fdaa7 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx +++ b/src/platform/plugins/shared/chart_expressions/expression_heatmap/public/components/heatmap_component.tsx @@ -572,6 +572,8 @@ export const HeatmapComponent: FC = memo( // eui color subdued textColor: chartBaseTheme.axes.tickLabel.fill, padding: xAxisColumn?.name ? 8 : 0, + rotation: + args.gridConfig.xAxisLabelRotation && Math.abs(args.gridConfig.xAxisLabelRotation), // rotation is a positive value }, brushMask: { fill: isDarkTheme ? 'rgb(30,31,35,80%)' : 'rgb(247,247,247,50%)', diff --git a/src/platform/plugins/shared/console/public/application/components/variables/variables_editor.tsx b/src/platform/plugins/shared/console/public/application/components/variables/variables_editor.tsx index 197fdec7f49c7..c432d1153ad69 100644 --- a/src/platform/plugins/shared/console/public/application/components/variables/variables_editor.tsx +++ b/src/platform/plugins/shared/console/public/application/components/variables/variables_editor.tsx @@ -22,9 +22,12 @@ import { EuiCode, useGeneratedHtmlId, EuiConfirmModal, + EuiToolTip, type EuiBasicTableColumn, } from '@elastic/eui'; +import { NotificationsSetup } from '@kbn/core/public'; +import { useServicesContext } from '../../contexts'; import { VariableEditorForm } from './variables_editor_form'; import * as utils from './utils'; import { type DevToolsVariable } from './types'; @@ -34,6 +37,32 @@ export interface Props { variables: []; } +const sendToBrowserClipboard = async (text: string) => { + if (window.navigator?.clipboard) { + await window.navigator.clipboard.writeText(text); + return; + } + throw new Error('Could not copy to clipboard!'); +}; + +const copyToClipboard = async (text: string, notifications: NotificationsSetup) => { + try { + await sendToBrowserClipboard(text); + + notifications.toasts.addSuccess({ + title: i18n.translate('console.variabllesPage.copyToClipboardSuccess', { + defaultMessage: 'Variable name copied to clipboard', + }), + }); + } catch (e) { + notifications.toasts.addError(e, { + title: i18n.translate('console.variabllesPage.copyToClipboardFailed', { + defaultMessage: 'Could not copy variable name to clipboard', + }), + }); + } +}; + export const VariablesEditor = (props: Props) => { const isMounted = useRef(false); const [isAddingVariable, setIsAddingVariable] = useState(false); @@ -41,6 +70,10 @@ export const VariablesEditor = (props: Props) => { const [variables, setVariables] = useState(props.variables); const deleteModalTitleId = useGeneratedHtmlId(); + const { + services: { notifications }, + } = useServicesContext(); + // Use a ref to persist the BehaviorSubject across renders const itemIdToExpandedRowMap$ = useRef(new BehaviorSubject>({})); // Subscribe to the BehaviorSubject and update local state on change @@ -131,6 +164,34 @@ export const VariablesEditor = (props: Props) => { 'data-test-subj': 'variableValueCell', render: (value: string) => {value}, }, + { + field: 'id', + name: '', + width: '40px', + render: (id: string, variable: DevToolsVariable) => { + return ( + + copyToClipboard(`\$\{${variable.name}\}`, notifications)} + data-test-subj={`variableCopyButton-${variable.name}`} + /> + + ); + }, + }, { field: 'id', name: '', diff --git a/src/platform/plugins/shared/console/public/application/containers/editor/components/context_menu/context_menu.tsx b/src/platform/plugins/shared/console/public/application/containers/editor/components/context_menu/context_menu.tsx index daa1515d90e7c..6ee8eb2817770 100644 --- a/src/platform/plugins/shared/console/public/application/containers/editor/components/context_menu/context_menu.tsx +++ b/src/platform/plugins/shared/console/public/application/containers/editor/components/context_menu/context_menu.tsx @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { EuiButtonIcon, EuiContextMenuPanel, @@ -39,6 +39,10 @@ interface Props { getDocumentation: () => Promise; autoIndent: (ev: React.MouseEvent) => void; notifications: NotificationsSetup; + /* A function that returns true if any of the selected requests is an internal Kibana request + * (starting with the kbn: prefix). This is needed here as we display only the curl language + * for internal Kibana requests since the other languages are not supported yet. */ + getIsKbnRequestSelected: () => Promise; } const styles = { @@ -66,18 +70,30 @@ export const ContextMenu = ({ getDocumentation, autoIndent, notifications, + getIsKbnRequestSelected, }: Props) => { // Get default language from local storage const { services: { storage, esHostService }, } = useServicesContext(); - const defaultLanguage = storage.get(StorageKeys.DEFAULT_LANGUAGE, DEFAULT_LANGUAGE); const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [isRequestConverterLoading, setRequestConverterLoading] = useState(false); const [isLanguageSelectorVisible, setLanguageSelectorVisibility] = useState(false); + const [isKbnRequestSelected, setIsKbnRequestSelected] = useState(null); + const [defaultLanguage, setDefaultLanguage] = useState( + storage.get(StorageKeys.DEFAULT_LANGUAGE, DEFAULT_LANGUAGE) + ); const [currentLanguage, setCurrentLanguage] = useState(defaultLanguage); + useEffect(() => { + if (isKbnRequestSelected) { + setCurrentLanguage(DEFAULT_LANGUAGE); + } else { + setCurrentLanguage(defaultLanguage); + } + }, [defaultLanguage, isKbnRequestSelected]); + const copyText = async (text: string) => { if (window.navigator?.clipboard) { await window.navigator.clipboard.writeText(text); @@ -138,6 +154,10 @@ export const ContextMenu = ({ await copyText(requestsAsCode); }; + const checkIsKbnRequestSelected = async () => { + setIsKbnRequestSelected(await getIsKbnRequestSelected()); + }; + const onCopyAsSubmit = async (language?: string) => { const withLanguage = language || currentLanguage; @@ -165,7 +185,10 @@ export const ContextMenu = ({ storage.set(StorageKeys.DEFAULT_LANGUAGE, language); } - setCurrentLanguage(language); + setDefaultLanguage(language); + if (!isKbnRequestSelected) { + setCurrentLanguage(language); + } }; const closePopover = () => { @@ -193,7 +216,10 @@ export const ContextMenu = ({ const button = ( setIsPopoverOpen((prev) => !prev)} + onClick={() => { + setIsPopoverOpen((prev) => !prev); + checkIsKbnRequestSelected(); + }} data-test-subj="toggleConsoleMenu" aria-label={i18n.translate('console.requestOptionsButtonAriaLabel', { defaultMessage: 'Request options', @@ -238,17 +264,21 @@ export const ContextMenu = ({ - - {isRequestConverterLoading ? ( - - ) : ( - // The EuiContextMenuItem renders itself as a button already, so we need to - // force the link to not be a button in order to prevent A11Y issues. - - Change - - )} - + {!isKbnRequestSelected && ( + + {isRequestConverterLoading ? ( + + ) : ( + // The EuiContextMenuItem renders itself as a button already, so we need to + // force the link to not be a button in order to prevent A11Y issues. + + {i18n.translate('console.consoleMenu.changeLanguageButtonLabel', { + defaultMessage: 'Change', + })} + + )} + + )} , { + return actionsProvider.current!.isKbnRequestSelected(); + }, []); + const editorDidMountCallback = useCallback( (editor: monaco.editor.IStandaloneCodeEditor) => { const provider = new MonacoEditorActionsProvider(editor, setEditorActionsCss, isDevMode); @@ -195,6 +199,7 @@ export const MonacoEditor = ({ localStorageValue, value, setValue }: EditorProps getDocumentation={getDocumenationLink} autoIndent={autoIndentCallback} notifications={notifications} + getIsKbnRequestSelected={isKbnRequestSelectedCallback} /> diff --git a/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.test.ts b/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.test.ts index 96a0ff99a63b6..2971bc5b4dd3a 100644 --- a/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.test.ts +++ b/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.test.ts @@ -560,4 +560,87 @@ describe('Editor actions provider', () => { expect(editor.executeEdits).toHaveBeenCalledWith('restoreFromHistory', [expectedEdit]); }); }); + + describe('isKbnRequestSelected', () => { + beforeEach(() => { + /* + * The editor has the text + * "POST _search" on line 1 + * and "GET kbn:test" on line 2 + */ + mockGetParsedRequests.mockReturnValue([ + { + startOffset: 0, + method: 'POST', + url: '_search', + endOffset: 12, + }, + { + startOffset: 13, + method: 'GET', + url: 'kbn:test', + endOffset: 25, + }, + ]); + + editor.getModel.mockReturnValue({ + getPositionAt: (offset: number) => { + // mock this function for start and end offsets of the mocked requests + if (offset === 0) { + return { lineNumber: 1, column: 1 }; + } + if (offset === 12) { + return { lineNumber: 1, column: 12 }; + } + if (offset === 13) { + return { lineNumber: 2, column: 1 }; + } + if (offset === 25) { + return { lineNumber: 2, column: 13 }; + } + }, + getLineContent: (lineNumber: number) => { + // mock this function for line 1 and line 2 + if (lineNumber === 1) { + return 'POST _search'; + } + if (lineNumber === 2) { + return 'GET kbn:test'; + } + }, + } as unknown as monaco.editor.ITextModel); + }); + + it('returns false if no requests', async () => { + mockGetParsedRequests.mockResolvedValue([]); + expect(await editorActionsProvider.isKbnRequestSelected()).toEqual(false); + }); + + it('returns true if a Kibana request is selected', async () => { + editor.getSelection.mockReturnValue({ + startLineNumber: 2, + endLineNumber: 2, + } as monaco.Selection); + + expect(await editorActionsProvider.isKbnRequestSelected()).toEqual(true); + }); + + it('returns false if a non-Kibana request is selected', async () => { + editor.getSelection.mockReturnValue({ + startLineNumber: 1, + endLineNumber: 1, + } as monaco.Selection); + + expect(await editorActionsProvider.isKbnRequestSelected()).toEqual(false); + }); + + it('returns true if multiple requests are selected and one of them is a Kibana request', async () => { + editor.getSelection.mockReturnValue({ + startLineNumber: 1, + endLineNumber: 2, + } as monaco.Selection); + + expect(await editorActionsProvider.isKbnRequestSelected()).toEqual(true); + }); + }); }); diff --git a/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.ts b/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.ts index 6eee779489077..eec8e630c9125 100644 --- a/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.ts +++ b/src/platform/plugins/shared/console/public/application/containers/editor/monaco_editor_actions_provider.ts @@ -14,7 +14,7 @@ import { i18n } from '@kbn/i18n'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { XJson } from '@kbn/es-ui-shared-plugin/public'; import { isQuotaExceededError } from '../../../services/history'; -import { DEFAULT_VARIABLES } from '../../../../common/constants'; +import { DEFAULT_VARIABLES, KIBANA_API_PREFIX } from '../../../../common/constants'; import { getStorage, StorageKeys } from '../../../services'; import { sendRequest } from '../../hooks'; import { Actions } from '../../stores/request'; @@ -825,4 +825,16 @@ export class MonacoEditorActionsProvider { this.sendRequests(dispatch, context); } } + + /* + * Returns true if any of the selected requests is an internal Kibana request + * (starting with the kbn: prefix). Returns false otherwise + */ + public async isKbnRequestSelected(): Promise { + const requests = await this.getRequests(); + if (requests.length < 1) { + return false; + } + return requests.some((request) => request.url.startsWith(KIBANA_API_PREFIX)); + } } diff --git a/src/platform/plugins/shared/console/public/application/containers/main/main.tsx b/src/platform/plugins/shared/console/public/application/containers/main/main.tsx index 9cc1300eea5fb..5a013a43d52cb 100644 --- a/src/platform/plugins/shared/console/public/application/containers/main/main.tsx +++ b/src/platform/plugins/shared/console/public/application/containers/main/main.tsx @@ -7,6 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import '../../../index.scss'; import React, { useEffect, useState } from 'react'; import { EuiFlexGroup, diff --git a/src/platform/plugins/shared/console/public/index.ts b/src/platform/plugins/shared/console/public/index.ts index f3abd73eaa2ed..4b60958b15bdd 100644 --- a/src/platform/plugins/shared/console/public/index.ts +++ b/src/platform/plugins/shared/console/public/index.ts @@ -7,7 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import './index.scss'; import { PluginInitializerContext } from '@kbn/core/public'; import { ConsoleUIPlugin } from './plugin'; diff --git a/src/platform/plugins/shared/console/server/lib/proxy_request.test.ts b/src/platform/plugins/shared/console/server/lib/proxy_request.test.ts index 98068d84cd115..dd2b57d34f475 100644 --- a/src/platform/plugins/shared/console/server/lib/proxy_request.test.ts +++ b/src/platform/plugins/shared/console/server/lib/proxy_request.test.ts @@ -55,12 +55,18 @@ describe(`Console's send request`, () => { destroy: sinon.stub(), on() {}, once() {}, + protocol: 'http:', + host: 'nowhere.none', + method: 'POST', + path: '/_bulk', } as any; try { await sendProxyRequest({ timeout: 0 }); // immediately timeout fail('Should not reach here!'); } catch (e) { - expect(e.message).toEqual('Client request timeout'); + expect(e.message).toEqual( + 'Client request timeout for: http://nowhere.none with request POST /_bulk' + ); expect((fakeRequest.destroy as sinon.SinonStub).calledOnce).toBe(true); } }); diff --git a/src/platform/plugins/shared/console/server/lib/proxy_request.ts b/src/platform/plugins/shared/console/server/lib/proxy_request.ts index 9d083e4ff7af2..1459131ceabf2 100644 --- a/src/platform/plugins/shared/console/server/lib/proxy_request.ts +++ b/src/platform/plugins/shared/console/server/lib/proxy_request.ts @@ -55,12 +55,13 @@ export const proxyRequest = ({ finalUserHeaders.host = hostname; } + const parsedPort = port === '' ? undefined : parseInt(port, 10); const req = client.request({ method: method.toUpperCase(), // We support overriding this on a per request basis to support legacy proxy config. See ./proxy_config. rejectUnauthorized: typeof rejectUnauthorized === 'boolean' ? rejectUnauthorized : undefined, host: sanitizeHostname(hostname), - port: port === '' ? undefined : parseInt(port, 10), + port: parsedPort, protocol, path: `${pathname}${search || ''}`, headers: { @@ -96,7 +97,12 @@ export const proxyRequest = ({ req.destroy(); } if (!resolved) { - timeoutReject(Boom.gatewayTimeout('Client request timeout')); + const request = `${req.method} ${req.path}`; + const requestPath = `${req.protocol}//${req.host}${parsedPort ? `:${parsedPort}` : ''}`; + + timeoutReject( + Boom.gatewayTimeout(`Client request timeout for: ${requestPath} with request ${request}`) + ); } else { timeoutResolve(undefined); } diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.aliases.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.aliases.json index b72c32624eee9..64b563029fa11 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.aliases.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.aliases.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -23,6 +18,11 @@ "closed", "hidden", "none" + ], + "master_timeout": [ + "30s", + "-1", + "0" ] }, "methods": [ diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.allocation.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.allocation.json index abb1a519f6ced..d4c14a432f576 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.allocation.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.allocation.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -25,7 +20,12 @@ "tb", "pb" ], - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.component_templates.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.component_templates.json index 674cddc5b0404..509435c46843d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.component_templates.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.component_templates.json @@ -6,18 +6,18 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.count.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.count.json index 84df20188febe..c2a3c11eba2dc 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.count.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.count.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.fielddata.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.fielddata.json index 3ddfd9a11e737..d4c94e98065f1 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.fielddata.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.fielddata.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.health.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.health.json index 25425707dca3e..70fc424eb8de1 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.health.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.health.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.help.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.help.json index bb880e0ddcad6..7e92520fa395e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.help.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.help.json @@ -1,23 +1,5 @@ { "cat.help": { - "url_params": { - "format": [ - "text" - ], - "h": [], - "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], - "s": [], - "v": "__flag__", - "error_trace": "__flag__", - "filter_path": [], - "human": "__flag__", - "pretty": "__flag__" - }, "methods": [ "GET" ], diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.indices.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.indices.json index a9adaeb39531b..6d6eb559d4643 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.indices.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.indices.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -47,6 +42,11 @@ "m", "h", "d" + ], + "master_timeout": [ + "30s", + "-1", + "0" ] }, "methods": [ diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.master.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.master.json index ea542c8079dcd..9bc6dc8060cb0 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.master.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.master.json @@ -6,18 +6,18 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_data_frame_analytics.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_data_frame_analytics.json index 32a0e6ca8c4c2..b7c70f5e4f93f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_data_frame_analytics.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_data_frame_analytics.json @@ -23,11 +23,6 @@ "version" ], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [ "assignment_explanation", "create_time", @@ -61,8 +56,13 @@ "pb" ], "time": [ - "-1", - "0" + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" ] }, "methods": [ diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_datafeeds.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_datafeeds.json index 3250ac17cda8a..2440b4370ae4e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_datafeeds.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_datafeeds.json @@ -19,11 +19,6 @@ "s" ], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [ "ae", "bc", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_jobs.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_jobs.json index 568daa8e3c93f..6c042894fe8ae 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_jobs.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_jobs.json @@ -67,11 +67,6 @@ "state" ], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [ "assignment_explanation", "buckets.count", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_trained_models.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_trained_models.json index 20f3984788634..09088c48d375f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_trained_models.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.ml_trained_models.json @@ -21,11 +21,6 @@ "version" ], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [ "create_time", "created_by", @@ -57,7 +52,16 @@ "pb" ], "from": "", - "size": "" + "size": "", + "time": [ + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodeattrs.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodeattrs.json index 21cab800580fa..ce0bfb03ad1ff 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodeattrs.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodeattrs.json @@ -6,18 +6,18 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodes.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodes.json index f3b5af6e4b2df..de12ea97faa2f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodes.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.nodes.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -26,7 +21,21 @@ "pb" ], "full_id": "__flag__", - "include_unloaded_segments": "__flag__" + "include_unloaded_segments": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "time": [ + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.pending_tasks.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.pending_tasks.json index 65e66e3e55acf..3881a3283ce3e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.pending_tasks.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.pending_tasks.json @@ -6,18 +6,27 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "time": [ + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.plugins.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.plugins.json index ae1431e8c0201..8d4ee2338e4d8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.plugins.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.plugins.json @@ -6,18 +6,19 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "local": "__flag__" + "include_bootstrap": "__flag__", + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.recovery.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.recovery.json index 42ff670fb7235..fa4e71c9a6969 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.recovery.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.recovery.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -26,7 +21,16 @@ "tb", "pb" ], - "detailed": "__flag__" + "detailed": "__flag__", + "time": [ + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.repositories.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.repositories.json index 37c8dda060d9b..75ec54f89a096 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.repositories.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.repositories.json @@ -6,17 +6,18 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.segments.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.segments.json index 20440023dfd28..5160ddd43819a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.segments.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.segments.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -25,7 +20,12 @@ "tb", "pb" ], - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.shards.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.shards.json index 04a57d279f469..5b4b85d31bb85 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.shards.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.shards.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -24,6 +19,20 @@ "gb", "tb", "pb" + ], + "master_timeout": [ + "30s", + "-1", + "0" + ], + "time": [ + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" ] }, "methods": [ diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.snapshots.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.snapshots.json index 96c5df103996c..0b5468f892caa 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.snapshots.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.snapshots.json @@ -6,18 +6,27 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "ignore_unavailable": "__flag__" + "ignore_unavailable": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "time": [ + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.tasks.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.tasks.json index f2f99ec25cf82..1e8800f4767cf 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.tasks.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.tasks.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -19,8 +14,23 @@ "pretty": "__flag__", "actions": "", "detailed": "__flag__", - "node_id": "", - "parent_task_id": "" + "nodes": "", + "parent_task_id": "", + "time": [ + "nanos", + "micros", + "ms", + "s", + "m", + "h", + "d" + ], + "timeout": [ + "30s", + "-1", + "0" + ], + "wait_for_completion": "__flag__" }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.templates.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.templates.json index 0688e65ff0d90..fb2013e43827c 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.templates.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.templates.json @@ -6,18 +6,18 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.thread_pool.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.thread_pool.json index ddb2a3893c3f9..a7adebb22b09c 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.thread_pool.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.thread_pool.json @@ -6,11 +6,6 @@ ], "h": [], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [], "v": "__flag__", "error_trace": "__flag__", @@ -26,7 +21,12 @@ "h", "d" ], - "local": "__flag__" + "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.transforms.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.transforms.json index d214f8536223f..105ac7c7e8dd7 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.transforms.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cat.transforms.json @@ -40,11 +40,6 @@ "version" ], "help": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "s": [ "changes_last_detection_time", "checkpoint", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.delete_auto_follow_pattern.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.delete_auto_follow_pattern.json index 83b8b5745bf52..b9347be749d25 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.delete_auto_follow_pattern.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.delete_auto_follow_pattern.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "DELETE" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow.json index 0b54616f468e7..252dbf45ec1c7 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow.json @@ -5,6 +5,11 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], "wait_for_active_shards": [ "all", "index-setting" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_info.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_info.json index abe4a15374c4d..1cd6bd9c1a651 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_info.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_info.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_stats.json index 8b40599a7cb93..105066049b176 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.follow_stats.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.forget_follower.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.forget_follower.json index 4dcaae5c61661..adf6747309747 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.forget_follower.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.forget_follower.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.get_auto_follow_pattern.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.get_auto_follow_pattern.json index 7c40ed85382d1..d96f6426f31d8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.get_auto_follow_pattern.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.get_auto_follow_pattern.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_auto_follow_pattern.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_auto_follow_pattern.json index ec8dc922b562a..156959728dd1e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_auto_follow_pattern.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_auto_follow_pattern.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_follow.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_follow.json index 560f9739a6d30..9619f6b7f9f7d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_follow.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.pause_follow.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.put_auto_follow_pattern.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.put_auto_follow_pattern.json index 0f142821d8eca..6a64f42741da4 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.put_auto_follow_pattern.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.put_auto_follow_pattern.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "PUT" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_auto_follow_pattern.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_auto_follow_pattern.json index f6c0cb41bde49..0fa7f5d15300f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_auto_follow_pattern.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_auto_follow_pattern.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_follow.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_follow.json index 4ca7160f05099..5de925ed0a862 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_follow.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.resume_follow.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.stats.json index 4c287c1e2918d..29dae9737d726 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.stats.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.unfollow.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.unfollow.json index 80479e236eb1b..f42bc7ce379c8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.unfollow.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ccr.unfollow.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.allocation_explain.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.allocation_explain.json index 7f08550f1659e..654af816a886a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.allocation_explain.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.allocation_explain.json @@ -6,7 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "include_disk_info": "__flag__", - "include_yes_decisions": "__flag__" + "include_yes_decisions": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.delete_voting_config_exclusions.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.delete_voting_config_exclusions.json index e1fe9c5180127..009eea0adaa25 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.delete_voting_config_exclusions.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.delete_voting_config_exclusions.json @@ -5,6 +5,11 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], "wait_for_removal": "__flag__" }, "methods": [ diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.post_voting_config_exclusions.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.post_voting_config_exclusions.json index 9221716f4944e..c2ccf2b334e0e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.post_voting_config_exclusions.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/cluster.post_voting_config_exclusions.json @@ -7,6 +7,11 @@ "pretty": "__flag__", "node_names": [], "node_ids": [], + "master_timeout": [ + "30s", + "-1", + "0" + ], "timeout": [ "30s", "-1", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_check_in.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_check_in.json index 54be708a6e7fe..5e4779870c855 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_check_in.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_check_in.json @@ -1,12 +1,18 @@ { "connector.sync_job_check_in": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "PUT" ], "patterns": [ "_connector/_sync_job/{connector_sync_job_id}/_check_in" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/check-in-connector-sync-job-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/check-in-connector-sync-job-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_claim.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_claim.json index 7abe3c845a22d..00b71874fd416 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_claim.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_claim.json @@ -1,12 +1,18 @@ { "connector.sync_job_claim": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "PUT" ], "patterns": [ "_connector/_sync_job/{connector_sync_job_id}/_claim" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/claim-connector-sync-job-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/claim-connector-sync-job-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_error.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_error.json index c312d25bfb3ac..a292f0c60bbd3 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_error.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_error.json @@ -1,12 +1,18 @@ { "connector.sync_job_error": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "PUT" ], "patterns": [ "_connector/_sync_job/{connector_sync_job_id}/_error" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/set-connector-sync-job-error-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/set-connector-sync-job-error-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_update_stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_update_stats.json index f6b09c8a5b658..756b8ad2efbe8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_update_stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.sync_job_update_stats.json @@ -1,12 +1,18 @@ { "connector.sync_job_update_stats": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "PUT" ], "patterns": [ "_connector/_sync_job/{connector_sync_job_id}/_stats" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/set-connector-sync-job-stats-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/set-connector-sync-job-stats-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.update_features.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.update_features.json index fd9ef3fbcced0..4f03d4105ad4d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.update_features.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/connector.update_features.json @@ -1,12 +1,18 @@ { "connector.update_features": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "PUT" ], "patterns": [ "_connector/{connector_id}/_features" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/update-connector-features-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/update-connector-features-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.delete_dangling_index.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.delete_dangling_index.json index ac6c1edb598fa..b267e5560cfda 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.delete_dangling_index.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.delete_dangling_index.json @@ -21,7 +21,7 @@ "patterns": [ "_dangling/{index_uuid}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-gateway-dangling-indices.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/dangling-index-delete.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.import_dangling_index.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.import_dangling_index.json index 2e5281d432b92..dfbd42b22e86a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.import_dangling_index.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.import_dangling_index.json @@ -21,7 +21,7 @@ "patterns": [ "_dangling/{index_uuid}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-gateway-dangling-indices.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/dangling-index-import.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.list_dangling_indices.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.list_dangling_indices.json index 24614b377256f..af996b21e5060 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.list_dangling_indices.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/dangling_indices.list_dangling_indices.json @@ -12,7 +12,7 @@ "patterns": [ "_dangling" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-gateway-dangling-indices.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/dangling-indices-list.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.delete_policy.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.delete_policy.json index d0b4e25406f67..59a8a57194f42 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.delete_policy.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.delete_policy.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "DELETE" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.execute_policy.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.execute_policy.json index c9b5e560543c0..e55035166f5ab 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.execute_policy.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.execute_policy.json @@ -5,6 +5,11 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], "wait_for_completion": "__flag__" }, "methods": [ diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.get_policy.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.get_policy.json index 80777d53b8f5e..67e978c6c3413 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.get_policy.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.get_policy.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.put_policy.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.put_policy.json index 5a7fbb10f6ca9..3646b8035c864 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.put_policy.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.put_policy.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "PUT" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.stats.json index e91905ea607b0..2c3bcc6638a63 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/enrich.stats.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/eql.search.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/eql.search.json index 77cd26f4989ab..2275ebf0dc3d6 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/eql.search.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/eql.search.json @@ -6,6 +6,8 @@ "human": "__flag__", "pretty": "__flag__", "allow_no_indices": "__flag__", + "allow_partial_search_results": "__flag__", + "allow_partial_sequence_results": "__flag__", "expand_wildcards": [ "all", "open", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.get_features.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.get_features.json index 367e3b5af0431..2cdc490524754 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.get_features.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.get_features.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.reset_features.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.reset_features.json index 7c5886e3a53cd..de73b903c4e5d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.reset_features.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/features.reset_features.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.explain_lifecycle.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.explain_lifecycle.json index 10fc47f7b76a0..f66f90c096915 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.explain_lifecycle.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.explain_lifecycle.json @@ -11,11 +11,6 @@ "30s", "-1", "0" - ], - "timeout": [ - "30s", - "-1", - "0" ] }, "methods": [ diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.start.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.start.json index 8aaf75a55e638..53b4668717267 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.start.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.start.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.stop.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.stop.json index 96834bf9bd87e..b73a8c3756085 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.stop.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ilm.stop.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete.json index 845b9e60b861e..f2e04d8863d1a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete.json @@ -31,7 +31,7 @@ "patterns": [ "{index}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-delete-index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-delete-index.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json index fdff5139506fd..8741260f97314 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_alias.json @@ -23,7 +23,7 @@ "{index}/_alias/{name}", "{index}/_aliases/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-aliases.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-delete-alias.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_index_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_index_template.json index 8144a6adbc8a0..62022dc9b3ea3 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_index_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_index_template.json @@ -22,7 +22,7 @@ "patterns": [ "_index_template/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-delete-template.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-delete-template.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_template.json index 97f2be6b72999..2c4d5f52f6993 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.delete_template.json @@ -22,7 +22,7 @@ "patterns": [ "_template/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-delete-template-v1.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-delete-template-v1.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists.json index bf618abaad72f..23e8d64d3a95a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists.json @@ -24,7 +24,7 @@ "patterns": [ "{index}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-exists.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-exists.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists_template.json index 4089c0f8b6a36..b0b9f4415bfe7 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.exists_template.json @@ -8,6 +8,7 @@ "flat_settings": "__flag__", "local": "__flag__", "master_timeout": [ + "30s", "-1", "0" ] @@ -18,7 +19,7 @@ "patterns": [ "_template/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-template-exists-v1.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-template-exists-v1.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.field_usage_stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.field_usage_stats.json index fbe1263e392f1..16c37268fb0a3 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.field_usage_stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.field_usage_stats.json @@ -15,16 +15,6 @@ ], "ignore_unavailable": "__flag__", "fields": [], - "master_timeout": [ - "30s", - "-1", - "0" - ], - "timeout": [ - "30s", - "-1", - "0" - ], "wait_for_active_shards": [ "1", "all", @@ -37,7 +27,7 @@ "patterns": [ "{index}/_field_usage_stats" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/field-usage-stats.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/field-usage-stats.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.forcemerge.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.forcemerge.json index 1c126eea73478..1de8af0fa874a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.forcemerge.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.forcemerge.json @@ -26,7 +26,7 @@ "_forcemerge", "{index}/_forcemerge" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-forcemerge.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-forcemerge.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get.json index f556873352164..5933646b05d86 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get.json @@ -34,7 +34,7 @@ "patterns": [ "{index}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-get-index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-get-index.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_alias.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_alias.json index 236cd8b363c7e..fcbe1827da140 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_alias.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_alias.json @@ -29,7 +29,7 @@ "{index}/_alias/{name}", "{index}/_alias" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-aliases.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-get-alias.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_data_lifecycle_stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_data_lifecycle_stats.json new file mode 100644 index 0000000000000..4dac2621067be --- /dev/null +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_data_lifecycle_stats.json @@ -0,0 +1,21 @@ +{ + "indices.get_data_lifecycle_stats": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "methods": [ + "GET" + ], + "patterns": [ + "_lifecycle/stats" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/data-streams-get-lifecycle-stats.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_field_mapping.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_field_mapping.json index e48bc4525a3ce..0ea15837eb2d3 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_field_mapping.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_field_mapping.json @@ -24,7 +24,7 @@ "_mapping/field/{fields}", "{index}/_mapping/field/{fields}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-get-field-mapping.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-get-field-mapping.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_index_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_index_template.json index 18f1cdf510134..5812bc5119766 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_index_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_index_template.json @@ -21,7 +21,7 @@ "_index_template", "_index_template/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-get-template.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-get-template.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json index 46c2425b1ceb8..353d0ba0d0f7e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_mapping.json @@ -28,7 +28,7 @@ "_mapping", "{index}/_mapping" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-get-mapping.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-get-mapping.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_settings.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_settings.json index 3bbf55f534e34..f0b788762b454 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_settings.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_settings.json @@ -32,7 +32,7 @@ "{index}/_settings/{name}", "_settings/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-get-settings.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-get-settings.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_template.json index d257e18b62af4..64e46fbea3020 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.get_template.json @@ -20,7 +20,7 @@ "_template", "_template/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-get-template-v1.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-get-template-v1.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.open.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.open.json index 0125fc7f4d729..89bded387b8f9 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.open.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.open.json @@ -36,7 +36,7 @@ "patterns": [ "{index}/_open" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-open-close.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-open-close.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json index f9c661b283e3c..3b28f84d475dc 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_mapping.json @@ -33,7 +33,7 @@ "patterns": [ "{index}/_mapping" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-put-mapping.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-put-mapping.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_settings.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_settings.json index 828fe4e5ab621..b77c7d9bead52 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_settings.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_settings.json @@ -34,7 +34,7 @@ "_settings", "{index}/_settings" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-update-settings.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-update-settings.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_template.json index 4ad03e50b1791..5b7884caf5b93 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.put_template.json @@ -21,7 +21,7 @@ "patterns": [ "_template/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-templates-v1.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-templates-v1.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.recovery.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.recovery.json index 001553a2b41d9..74f129e5f0e4f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.recovery.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.recovery.json @@ -15,7 +15,7 @@ "_recovery", "{index}/_recovery" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-recovery.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-recovery.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.refresh.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.refresh.json index 8e631a9a4b567..ff6925fbbd018 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.refresh.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.refresh.json @@ -23,7 +23,7 @@ "_refresh", "{index}/_refresh" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-refresh.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-refresh.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.reload_search_analyzers.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.reload_search_analyzers.json index da5e63aecb7ea..1e396faaa2caa 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.reload_search_analyzers.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.reload_search_analyzers.json @@ -22,7 +22,7 @@ "patterns": [ "{index}/_reload_search_analyzers" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-reload-analyzers.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-reload-analyzers.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_cluster.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_cluster.json index 41344e43df884..49341ccae8b8d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_cluster.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_cluster.json @@ -22,7 +22,7 @@ "patterns": [ "_resolve/cluster/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-resolve-cluster-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-resolve-cluster-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_index.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_index.json index 790e5ecd171f1..5f1c37f0573b3 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_index.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.resolve_index.json @@ -21,7 +21,7 @@ "patterns": [ "_resolve/index/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-resolve-index-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-resolve-index-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.segments.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.segments.json index be2ffc744e7a0..ff06a4d6f456e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.segments.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.segments.json @@ -22,7 +22,7 @@ "_segments", "{index}/_segments" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-segments.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-segments.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.shard_stores.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.shard_stores.json index 3d64c11b6ab53..c706fec1b61e2 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.shard_stores.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.shard_stores.json @@ -28,7 +28,7 @@ "_shard_stores", "{index}/_shard_stores" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-shards-stores.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-shards-stores.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_index_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_index_template.json index 8c4cae8e6ddc5..b5123e07e15e5 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_index_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_index_template.json @@ -18,7 +18,7 @@ "patterns": [ "_index_template/_simulate_index/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-simulate-index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-simulate-index.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_template.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_template.json index d19188cbd4c41..a3201c14cd64b 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_template.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.simulate_template.json @@ -20,7 +20,7 @@ "_index_template/_simulate", "_index_template/_simulate/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-simulate-template.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-simulate-template.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.stats.json index 84bac12732b62..9823d3bc7b095 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.stats.json @@ -34,7 +34,7 @@ "{index}/_stats", "{index}/_stats/{metric}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-stats.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/indices-stats.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json index 9b9789d3d9772..a8b852f4389ef 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/indices.unfreeze.json @@ -34,7 +34,7 @@ "patterns": [ "{index}/_unfreeze" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/unfreeze-index-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/unfreeze-index-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/info.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/info.json index 9ac0e521ba9c5..235043c916674 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/info.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/info.json @@ -12,7 +12,7 @@ "patterns": [ "" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rest-api-root.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.delete_ip_location_database.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.delete_ip_location_database.json index c5008f8e7b9ac..aad18dca11867 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.delete_ip_location_database.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.delete_ip_location_database.json @@ -1,5 +1,21 @@ { "ingest.delete_ip_location_database": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] + }, "methods": [ "DELETE" ], diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_geoip_database.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_geoip_database.json index e57b36f09cbf7..648335792ce07 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_geoip_database.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_geoip_database.json @@ -4,12 +4,7 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ] + "pretty": "__flag__" }, "methods": [ "GET" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_ip_location_database.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_ip_location_database.json index bcdce161cbdf1..8a7a8945afb07 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_ip_location_database.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.get_ip_location_database.json @@ -1,5 +1,16 @@ { "ingest.get_ip_location_database": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] + }, "methods": [ "GET" ], diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.put_ip_location_database.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.put_ip_location_database.json index 93ab93da54972..b13578fb315b8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.put_ip_location_database.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ingest.put_ip_location_database.json @@ -1,5 +1,21 @@ { "ingest.put_ip_location_database": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] + }, "methods": [ "PUT" ], diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.delete.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.delete.json index 8bc6a567eca73..ce9e0d5312c68 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.delete.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.delete.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "DELETE" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post.json index d821aa66ef02b..e636442ebb9b2 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post.json @@ -5,7 +5,17 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "acknowledge": "__flag__" + "acknowledge": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "PUT", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_basic.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_basic.json index 3621e8f34c791..ed7caed78d2fe 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_basic.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_basic.json @@ -5,7 +5,17 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "acknowledge": "__flag__" + "acknowledge": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_trial.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_trial.json index 33ed6e1c59cf7..6f14c870c99cb 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_trial.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/license.post_start_trial.json @@ -6,7 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "acknowledge": "__flag__", - "type_query_string": "" + "type_query_string": "", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" @@ -14,7 +19,7 @@ "patterns": [ "_license/start_trial" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/start-trial.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/start-trial.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.delete_pipeline.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.delete_pipeline.json index 62c30e5d5879a..ac85f4a48032b 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.delete_pipeline.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.delete_pipeline.json @@ -12,7 +12,7 @@ "patterns": [ "_logstash/pipeline/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/logstash-api-delete-pipeline.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/logstash-api-delete-pipeline.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.get_pipeline.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.get_pipeline.json index 674de6e2bffe5..5f457aebf9598 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.get_pipeline.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.get_pipeline.json @@ -13,7 +13,7 @@ "_logstash/pipeline", "_logstash/pipeline/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/logstash-api-get-pipeline.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/logstash-api-get-pipeline.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.put_pipeline.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.put_pipeline.json index 280627516ccbf..a5d6e726bb044 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.put_pipeline.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/logstash.put_pipeline.json @@ -12,7 +12,7 @@ "patterns": [ "_logstash/pipeline/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/logstash-api-put-pipeline.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/logstash-api-put-pipeline.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.deprecations.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.deprecations.json index 9fe5235e31738..1b09911c6a405 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.deprecations.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.deprecations.json @@ -13,7 +13,7 @@ "_migration/deprecations", "{index}/_migration/deprecations" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/migration-api-deprecation.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/migration-api-deprecation.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.get_feature_upgrade_status.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.get_feature_upgrade_status.json index 58774c1c1ef5a..cd07f477ee04b 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.get_feature_upgrade_status.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.get_feature_upgrade_status.json @@ -12,7 +12,7 @@ "patterns": [ "_migration/system_features" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/migration-api-feature-upgrade.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/feature-migration-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.post_feature_upgrade.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.post_feature_upgrade.json index e7ae097da9650..629af9a98b623 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.post_feature_upgrade.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/migration.post_feature_upgrade.json @@ -12,7 +12,7 @@ "patterns": [ "_migration/system_features" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/migration-api-feature-upgrade.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/feature-migration-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ml.delete_trained_model.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ml.delete_trained_model.json index 05e9b42e2bded..f7981ad4b93cd 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ml.delete_trained_model.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/ml.delete_trained_model.json @@ -5,7 +5,12 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "force": "__flag__" + "force": "__flag__", + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "DELETE" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/monitoring.bulk.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/monitoring.bulk.json index 2b1bec6fb4c54..414a6d7b7d1ca 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/monitoring.bulk.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/monitoring.bulk.json @@ -22,7 +22,7 @@ ], "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/monitor-elasticsearch-cluster.html", "availability": { - "stack": true, + "stack": false, "serverless": false } } diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.clear_repositories_metering_archive.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.clear_repositories_metering_archive.json index f0135ed3fd39c..89bb9430661df 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.clear_repositories_metering_archive.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.clear_repositories_metering_archive.json @@ -12,7 +12,7 @@ "patterns": [ "_nodes/{node_id}/_repositories_metering/{max_archive_version}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/clear-repositories-metering-archive-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/clear-repositories-metering-archive-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.get_repositories_metering_info.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.get_repositories_metering_info.json index e1bd76a6cd60f..9cbcf37a64ae1 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.get_repositories_metering_info.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.get_repositories_metering_info.json @@ -12,7 +12,7 @@ "patterns": [ "_nodes/{node_id}/_repositories_metering" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/get-repositories-metering-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-repositories-metering-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.hot_threads.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.hot_threads.json index bde9f886b5383..c64bda9f90700 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.hot_threads.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.hot_threads.json @@ -14,11 +14,6 @@ "snapshots": [ "10" ], - "master_timeout": [ - "30s", - "-1", - "0" - ], "threads": [ "3" ], diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.info.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.info.json index b32e79cb89066..94e4d901a2846 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.info.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.info.json @@ -6,11 +6,6 @@ "human": "__flag__", "pretty": "__flag__", "flat_settings": "__flag__", - "master_timeout": [ - "30s", - "-1", - "0" - ], "timeout": [ "30s", "-1", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.stats.json index b3d7abda297fe..8ce7e1e44bf5c 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/nodes.stats.json @@ -15,11 +15,6 @@ "indices", "shards" ], - "master_timeout": [ - "30s", - "-1", - "0" - ], "timeout": [ "30s", "-1", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_rule.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_rule.json index 4255ae1672064..e887721673162 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_rule.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_rule.json @@ -12,7 +12,7 @@ "patterns": [ "_query_rules/{ruleset_id}/_rule/{rule_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-query-rule.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-query-rule.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_ruleset.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_ruleset.json index d4f34e7d76716..3ee857c048d85 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_ruleset.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.delete_ruleset.json @@ -12,7 +12,7 @@ "patterns": [ "_query_rules/{ruleset_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-query-ruleset.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-query-ruleset.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_rule.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_rule.json index fdd424c2a2d1b..0dced0c1d3a4e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_rule.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_rule.json @@ -12,7 +12,7 @@ "patterns": [ "_query_rules/{ruleset_id}/_rule/{rule_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-query-rule.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-query-rule.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_ruleset.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_ruleset.json index 23cff910d815e..4b271ce3a0d5e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_ruleset.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.get_ruleset.json @@ -12,7 +12,7 @@ "patterns": [ "_query_rules/{ruleset_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-query-ruleset.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-query-ruleset.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.list_rulesets.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.list_rulesets.json index c20f8050c5c91..940a4f774a4d6 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.list_rulesets.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.list_rulesets.json @@ -14,7 +14,7 @@ "patterns": [ "_query_rules" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/list-query-rulesets.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/list-query-rulesets.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_rule.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_rule.json index 2653a15dab650..d3f5b67dfe207 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_rule.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_rule.json @@ -12,7 +12,7 @@ "patterns": [ "_query_rules/{ruleset_id}/_rule/{rule_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-query-rule.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/put-query-rule.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_ruleset.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_ruleset.json index a4c0ad3c72d94..8f94c9cee71a7 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_ruleset.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.put_ruleset.json @@ -12,7 +12,7 @@ "patterns": [ "_query_rules/{ruleset_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-query-ruleset.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/put-query-ruleset.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.test.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.test.json index 9b603e23818ac..23309cd60365c 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.test.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/query_rules.test.json @@ -12,7 +12,7 @@ "patterns": [ "_query_rules/{ruleset_id}/_test" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/test-query-ruleset.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/test-query-ruleset.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.delete_job.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.delete_job.json index d8e44fd3ed5c9..9e8ebfa6c3452 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.delete_job.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.delete_job.json @@ -12,7 +12,7 @@ "patterns": [ "_rollup/job/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-delete-job.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-delete-job.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_jobs.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_jobs.json index a4bf785822c3b..74e02c025250f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_jobs.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_jobs.json @@ -13,7 +13,7 @@ "_rollup/job/{id}", "_rollup/job" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-get-job.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-get-job.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_caps.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_caps.json index f3b50f92312d1..4649ddb0735da 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_caps.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_caps.json @@ -13,7 +13,7 @@ "_rollup/data/{id}", "_rollup/data" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-get-rollup-caps.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-get-rollup-caps.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_index_caps.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_index_caps.json index e6999b91eda6a..e7a9680e16a79 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_index_caps.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.get_rollup_index_caps.json @@ -12,7 +12,7 @@ "patterns": [ "{index}/_rollup/data" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-get-rollup-index-caps.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-get-rollup-index-caps.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.put_job.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.put_job.json index 0a7841cf199ba..acce461adddbf 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.put_job.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.put_job.json @@ -12,7 +12,7 @@ "patterns": [ "_rollup/job/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-put-job.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-put-job.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.rollup_search.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.rollup_search.json index 7db62d712066c..25eac8113c7e9 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.rollup_search.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.rollup_search.json @@ -15,7 +15,7 @@ "patterns": [ "{index}/_rollup_search" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-search.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-search.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.start_job.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.start_job.json index da3c94de904b7..4459962f0903b 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.start_job.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.start_job.json @@ -12,7 +12,7 @@ "patterns": [ "_rollup/job/{id}/_start" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-start-job.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-start-job.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json index ecdb9372b22e8..0938a9da559c4 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/rollup.stop_job.json @@ -18,7 +18,7 @@ "patterns": [ "_rollup/job/{id}/_stop" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/rollup-stop-job.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/rollup-stop-job.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.post_behavioral_analytics_event.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.post_behavioral_analytics_event.json index 983421e2e30d2..e08199c4c18df 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.post_behavioral_analytics_event.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.post_behavioral_analytics_event.json @@ -1,12 +1,26 @@ { "search_application.post_behavioral_analytics_event": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "debug": "__flag__" + }, + "url_components": { + "event_type": [ + "page_view", + "search", + "search_click" + ] + }, "methods": [ "POST" ], "patterns": [ "_application/analytics/{collection_name}/event/{event_type}" ], - "documentation": "http://todo.com/tbd", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/post-analytics-collection-event.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.render_query.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.render_query.json index 68288f6bc0f6e..e2f607cdf52c0 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.render_query.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_application.render_query.json @@ -1,12 +1,18 @@ { "search_application.render_query": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "POST" ], "patterns": [ "_application/search_application/{name}/_render_query" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/search-application-render-query.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/search-application-render-query.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_shards.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_shards.json index 93bb86abe387b..ccc8dd653d0b6 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_shards.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/search_shards.json @@ -15,6 +15,11 @@ ], "ignore_unavailable": "__flag__", "local": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], "preference": "", "routing": "" }, diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.cache_stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.cache_stats.json index b28c45baad38c..79443dd2ead35 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.cache_stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.cache_stats.json @@ -17,7 +17,7 @@ "_searchable_snapshots/cache/stats", "_searchable_snapshots/{node_id}/cache/stats" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/searchable-snapshots-apis.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/searchable-snapshots-api-cache-stats.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.clear_cache.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.clear_cache.json index e1a46ac66e279..1705e5f5b2da1 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.clear_cache.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.clear_cache.json @@ -22,7 +22,7 @@ "_searchable_snapshots/cache/clear", "{index}/_searchable_snapshots/cache/clear" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/searchable-snapshots-apis.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/searchable-snapshots-api-clear-cache.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.mount.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.mount.json index f5392588762ba..3812410af9540 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.mount.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.mount.json @@ -21,7 +21,7 @@ "patterns": [ "_snapshot/{repository}/{snapshot}/_mount" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/searchable-snapshots-api-mount-snapshot.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/searchable-snapshots-api-mount-snapshot.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.stats.json index 05c40d652d556..5caa5c8df07cb 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/searchable_snapshots.stats.json @@ -18,7 +18,7 @@ "_searchable_snapshots/stats", "{index}/_searchable_snapshots/stats" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/searchable-snapshots-apis.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/searchable-snapshots-api-stats.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.bulk_update_api_keys.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.bulk_update_api_keys.json index 6895efb587994..a9ad1fe4d2f5f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.bulk_update_api_keys.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.bulk_update_api_keys.json @@ -1,12 +1,18 @@ { "security.bulk_update_api_keys": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "POST" ], "patterns": [ "_security/api_key/_bulk_update" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-bulk-update-api-keys.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/security-api-bulk-update-api-keys.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.delegate_pki.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.delegate_pki.json new file mode 100644 index 0000000000000..43e76eaa43d49 --- /dev/null +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.delegate_pki.json @@ -0,0 +1,21 @@ +{ + "security.delegate_pki": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, + "methods": [ + "POST" + ], + "patterns": [ + "_security/delegate_pki" + ], + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/security-api-delegate-pki-authentication.html", + "availability": { + "stack": true, + "serverless": false + } + } +} diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.get_settings.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.get_settings.json index f91793b92cc8c..80d8446870f54 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.get_settings.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.get_settings.json @@ -1,12 +1,22 @@ { "security.get_settings": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "master_timeout": [ + "-1", + "0" + ] + }, "methods": [ "GET" ], "patterns": [ "_security/settings" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-settings.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/security-api-get-settings.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_authenticate.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_authenticate.json index cd53074297666..51ba54d283404 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_authenticate.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_authenticate.json @@ -1,12 +1,18 @@ { "security.oidc_authenticate": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "POST" ], "patterns": [ "_security/oidc/authenticate" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-oidc-authenticate.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/security-api-oidc-authenticate.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_logout.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_logout.json index 3353df757121d..d9a12c78857b9 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_logout.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_logout.json @@ -1,12 +1,18 @@ { "security.oidc_logout": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "POST" ], "patterns": [ "_security/oidc/logout" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-oidc-logout.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/security-api-oidc-logout.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_prepare_authentication.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_prepare_authentication.json index 372af153b6954..e63ad0bee3bab 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_prepare_authentication.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.oidc_prepare_authentication.json @@ -1,12 +1,18 @@ { "security.oidc_prepare_authentication": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__" + }, "methods": [ "POST" ], "patterns": [ "_security/oidc/prepare" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-oidc-prepare-authentication.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/security-api-oidc-prepare-authentication.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.query_role.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.query_role.json index 7648662f973c0..7ad1224ceafd7 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.query_role.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.query_role.json @@ -16,7 +16,7 @@ "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-query-role.html", "availability": { "stack": true, - "serverless": false + "serverless": true } } } diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.update_settings.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.update_settings.json index 609adc164cc0f..c8b5dbddfe959 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.update_settings.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/security.update_settings.json @@ -1,12 +1,26 @@ { "security.update_settings": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "master_timeout": [ + "-1", + "0" + ], + "timeout": [ + "-1", + "0" + ] + }, "methods": [ "PUT" ], "patterns": [ "_security/settings" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-update-settings.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/security-api-update-settings.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.delete_node.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.delete_node.json index 692822e2dadc4..545454cddd961 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.delete_node.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.delete_node.json @@ -30,7 +30,7 @@ "patterns": [ "_nodes/{node_id}/shutdown" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-shutdown.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.get_node.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.get_node.json index 287bda52097cd..17f3de6d339d5 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.get_node.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.get_node.json @@ -13,15 +13,6 @@ "m", "h", "d" - ], - "timeout": [ - "nanos", - "micros", - "ms", - "s", - "m", - "h", - "d" ] }, "methods": [ @@ -31,7 +22,7 @@ "_nodes/shutdown", "_nodes/{node_id}/shutdown" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-shutdown.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.put_node.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.put_node.json index a2985683a48a9..e9b9abd83cbac 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.put_node.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/shutdown.put_node.json @@ -30,7 +30,7 @@ "patterns": [ "_nodes/{node_id}/shutdown" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/put-shutdown.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/simulate.ingest.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/simulate.ingest.json index 9f7c9a4e91b3d..015680b28c75d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/simulate.ingest.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/simulate.ingest.json @@ -1,5 +1,12 @@ { "simulate.ingest": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "pipeline": "" + }, "methods": [ "GET", "POST" @@ -8,7 +15,7 @@ "_ingest/_simulate", "_ingest/{index}/_simulate" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/simulate-ingest-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/simulate-ingest-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.delete_lifecycle.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.delete_lifecycle.json index f6ecb9163f7e7..d9a8de1b741bb 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.delete_lifecycle.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.delete_lifecycle.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "DELETE" @@ -12,7 +22,7 @@ "patterns": [ "_slm/policy/{policy_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-delete-policy.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-delete-policy.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_lifecycle.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_lifecycle.json index 0b3cc87935e37..9601872e3e6fd 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_lifecycle.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_lifecycle.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "PUT" @@ -12,7 +22,7 @@ "patterns": [ "_slm/policy/{policy_id}/_execute" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute-lifecycle.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-execute-lifecycle.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_retention.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_retention.json index 0938026354237..71c1f06dc7fea 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_retention.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.execute_retention.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" @@ -12,7 +22,7 @@ "patterns": [ "_slm/_execute_retention" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute-retention.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-execute-retention.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_lifecycle.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_lifecycle.json index a2b3b8300314f..ab9e513bb7c61 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_lifecycle.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_lifecycle.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" @@ -13,7 +23,7 @@ "_slm/policy/{policy_id}", "_slm/policy" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-get-policy.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-get-policy.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_stats.json index 10789aa3934fe..b7776219f5a1d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_stats.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" @@ -12,7 +22,7 @@ "patterns": [ "_slm/stats" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-api-get-stats.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-get-stats.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_status.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_status.json index 0bc8a51258e54..3aa39e5227cb1 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_status.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.get_status.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "GET" @@ -12,7 +22,7 @@ "patterns": [ "_slm/status" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-get-status.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-get-status.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.put_lifecycle.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.put_lifecycle.json index cf700d2b8b198..9105426efb55a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.put_lifecycle.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.put_lifecycle.json @@ -22,7 +22,7 @@ "patterns": [ "_slm/policy/{policy_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put-policy.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-put-policy.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.start.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.start.json index 6f1eaab8ba1f4..878b7d1d93706 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.start.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.start.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" @@ -12,7 +22,7 @@ "patterns": [ "_slm/start" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-start.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-start.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.stop.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.stop.json index 6241e9b0751ae..38ad43bdc2ae7 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.stop.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/slm.stop.json @@ -4,7 +4,17 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ], + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" @@ -12,7 +22,7 @@ "patterns": [ "_slm/stop" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-stop.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/slm-api-stop.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.cleanup_repository.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.cleanup_repository.json index abab30e3e3e19..072c430b20062 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.cleanup_repository.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.cleanup_repository.json @@ -22,7 +22,7 @@ "patterns": [ "_snapshot/{repository}/_cleanup" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/clean-up-snapshot-repo-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/clean-up-snapshot-repo-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.clone.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.clone.json index ea4183eebe768..1601984497e5c 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.clone.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.clone.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] @@ -20,7 +22,7 @@ "patterns": [ "_snapshot/{repository}/{snapshot}/_clone/{target_snapshot}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/clone-snapshot-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create.json index 38a55a5f6d59c..b116f3ba5ec0a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create.json @@ -19,7 +19,7 @@ "patterns": [ "_snapshot/{repository}/{snapshot}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/create-snapshot-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create_repository.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create_repository.json index c3adb5e8e9ed7..6b4083bc5c1c4 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create_repository.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.create_repository.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ], @@ -22,7 +24,7 @@ "patterns": [ "_snapshot/{repository}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/put-snapshot-repo-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete.json index ae71d1e53c028..60d5a1a33cce8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete.json @@ -6,6 +6,7 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ] @@ -16,7 +17,7 @@ "patterns": [ "_snapshot/{repository}/{snapshot}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-snapshot-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete_repository.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete_repository.json index 3b9504afc2d74..4e1d1617a7eca 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete_repository.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.delete_repository.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] @@ -20,7 +22,7 @@ "patterns": [ "_snapshot/{repository}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-snapshot-repo-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get.json index eeef215f6b422..bc339a6ad9dbb 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get.json @@ -5,16 +5,24 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", + "after": "", + "from_sort_value": "", "ignore_unavailable": "__flag__", + "index_details": "__flag__", + "index_names": "__flag__", + "include_repository": "__flag__", "master_timeout": [ "30s", "-1", "0" ], - "verbose": "__flag__", - "index_details": "__flag__", - "index_names": "__flag__", - "include_repository": "__flag__", + "order": [ + "asc", + "desc" + ], + "offset": "", + "size": "", + "slm_policy_filter": "", "sort": [ "start_time", "duration", @@ -24,15 +32,7 @@ "shard_count", "failed_shard_count" ], - "size": "", - "order": [ - "asc", - "desc" - ], - "after": "", - "offset": "", - "from_sort_value": "", - "slm_policy_filter": "" + "verbose": "__flag__" }, "methods": [ "GET" @@ -40,7 +40,7 @@ "patterns": [ "_snapshot/{repository}/{snapshot}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-snapshot-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get_repository.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get_repository.json index d1d8e3fa2d1c2..86d36776e4fa5 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get_repository.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.get_repository.json @@ -7,6 +7,7 @@ "pretty": "__flag__", "local": "__flag__", "master_timeout": [ + "to 30s", "-1", "0" ] @@ -18,7 +19,7 @@ "_snapshot", "_snapshot/{repository}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-snapshot-repo-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.repository_verify_integrity.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.repository_verify_integrity.json index d23a9bba4b323..0da9b9a8ff8f8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.repository_verify_integrity.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.repository_verify_integrity.json @@ -5,14 +5,22 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", + "blob_thread_pool_concurrency": [ + "1" + ], + "index_snapshot_verification_concurrency": [ + "1" + ], + "index_verification_concurrency": "", + "max_bytes_per_sec": [ + "10mb" + ], + "max_failed_shard_snapshots": [ + "10000" + ], "meta_thread_pool_concurrency": "", - "blob_thread_pool_concurrency": "", "snapshot_verification_concurrency": "", - "index_verification_concurrency": "", - "index_snapshot_verification_concurrency": "", - "max_failed_shard_snapshots": "", - "verify_blob_contents": "__flag__", - "max_bytes_per_sec": "" + "verify_blob_contents": "__flag__" }, "methods": [ "POST" @@ -20,7 +28,7 @@ "patterns": [ "_snapshot/{repository}/_verify_integrity" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/verify-repo-integrity-api.html", "availability": { "stack": false, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.restore.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.restore.json index 67e25e9866649..c624d843afd1c 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.restore.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.restore.json @@ -6,6 +6,7 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], @@ -17,7 +18,7 @@ "patterns": [ "_snapshot/{repository}/{snapshot}/_restore" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/restore-snapshot-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.status.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.status.json index 1b63ce16cde66..d061e53943855 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.status.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.status.json @@ -7,6 +7,7 @@ "pretty": "__flag__", "ignore_unavailable": "__flag__", "master_timeout": [ + "30s", "-1", "0" ] @@ -19,7 +20,7 @@ "_snapshot/{repository}/_status", "_snapshot/{repository}/{snapshot}/_status" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-snapshot-status-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.verify_repository.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.verify_repository.json index 7b38ce343a446..37c2cee465ae3 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.verify_repository.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/snapshot.verify_repository.json @@ -6,10 +6,12 @@ "human": "__flag__", "pretty": "__flag__", "master_timeout": [ + "30s", "-1", "0" ], "timeout": [ + "30s", "-1", "0" ] @@ -20,7 +22,7 @@ "patterns": [ "_snapshot/{repository}/_verify" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-snapshots.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/verify-snapshot-repo-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json index f66c1e55c31e4..4152e2e867167 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.clear_cursor.json @@ -12,7 +12,7 @@ "patterns": [ "_sql/close" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/clear-sql-cursor-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/clear-sql-cursor-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.delete_async.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.delete_async.json index 184d2f2a16445..f42644185859a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.delete_async.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.delete_async.json @@ -12,7 +12,7 @@ "patterns": [ "_sql/async/delete/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-async-sql-search-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-async-sql-search-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async.json index 4a24f3f2b1563..87e84ad78609d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async.json @@ -24,7 +24,7 @@ "patterns": [ "_sql/async/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-async-sql-search-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-async-sql-search-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json index 7d4a714a1e77d..157b8bbe1a4e7 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.get_async_status.json @@ -12,7 +12,7 @@ "patterns": [ "_sql/async/status/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-async-sql-search-status-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-async-sql-search-status-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.query.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.query.json index 48ea948fd22ae..473130825cfd6 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.query.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.query.json @@ -22,7 +22,7 @@ "patterns": [ "_sql" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/sql-search-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.translate.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.translate.json index fda9def4a1b5b..788951b069505 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.translate.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/sql.translate.json @@ -13,7 +13,7 @@ "patterns": [ "_sql/translate" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-translate-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/sql-translate-api.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym.json index 9c2b72d8d3a6c..5859502dc1bb3 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym.json @@ -12,7 +12,7 @@ "patterns": [ "_synonyms/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-synonyms-set.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-synonyms-set.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym_rule.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym_rule.json index fc5b150337d89..5fb58764cd3d8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym_rule.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.delete_synonym_rule.json @@ -12,7 +12,7 @@ "patterns": [ "_synonyms/{set_id}/{rule_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/delete-synonym-rule.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/delete-synonym-rule.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym.json index b180ea625639a..810c945348ca5 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym.json @@ -16,7 +16,7 @@ "patterns": [ "_synonyms/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-synonyms-set.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-synonyms-set.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym_rule.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym_rule.json index b6c0a7c2e523c..2f0ecc17987d4 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym_rule.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonym_rule.json @@ -12,7 +12,7 @@ "patterns": [ "_synonyms/{set_id}/{rule_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/get-synonym-rule.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-synonym-rule.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonyms_sets.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonyms_sets.json index 894bf417ef41b..7198e076d3f84 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonyms_sets.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.get_synonyms_sets.json @@ -16,7 +16,7 @@ "patterns": [ "_synonyms" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/list-synonyms-sets.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/get-synonyms-set.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym.json index 519e2df3a7d69..574a1cdf490dd 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym.json @@ -12,7 +12,7 @@ "patterns": [ "_synonyms/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-synonyms-set.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/put-synonyms-set.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym_rule.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym_rule.json index 96dec0f4b5d40..768f366f8b240 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym_rule.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/synonyms.put_synonym_rule.json @@ -12,7 +12,7 @@ "patterns": [ "_synonyms/{set_id}/{rule_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/master/put-synonym-rule.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/put-synonym-rule.html", "availability": { "stack": true, "serverless": true diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/tasks.list.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/tasks.list.json index 3e934056209c7..7f64923715b41 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/tasks.list.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/tasks.list.json @@ -14,11 +14,6 @@ ], "nodes": [], "parent_task_id": "", - "master_timeout": [ - "30s", - "-1", - "0" - ], "timeout": [ "30s", "-1", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_field_structure.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_field_structure.json index 08d0ca5f33c4f..13340f508af4e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_field_structure.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_field_structure.json @@ -1,12 +1,46 @@ { "text_structure.find_field_structure": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "column_names": "", + "delimiter": "", + "documents_to_sample": [ + "1000" + ], + "ecs_compatibility": [ + "disabled", + "v1" + ], + "explain": "__flag__", + "field": "", + "format": [ + "delimited", + "ndjson", + "semi_structured_text", + "xml" + ], + "grok_pattern": "", + "index": "", + "quote": "", + "should_trim_fields": "__flag__", + "timeout": [ + "25s", + "-1", + "0" + ], + "timestamp_field": "", + "timestamp_format": "" + }, "methods": [ "GET" ], "patterns": [ "_text_structure/find_field_structure" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/find-field-structure.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/find-field-structure.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_message_structure.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_message_structure.json index 6d01c9d1fc96f..3615817608d90 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_message_structure.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_message_structure.json @@ -1,5 +1,34 @@ { "text_structure.find_message_structure": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "column_names": "", + "delimiter": "", + "ecs_compatibility": [ + "disabled", + "v1" + ], + "explain": "__flag__", + "format": [ + "delimited", + "ndjson", + "semi_structured_text", + "xml" + ], + "grok_pattern": "", + "quote": "", + "should_trim_fields": "__flag__", + "timeout": [ + "25s", + "-1", + "0" + ], + "timestamp_field": "", + "timestamp_format": "" + }, "methods": [ "GET", "POST" @@ -7,7 +36,7 @@ "patterns": [ "_text_structure/find_message_structure" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/find-message-structure.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/find-message-structure.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_structure.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_structure.json index 7b0248d640819..6c5c62085a637 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_structure.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.find_structure.json @@ -4,7 +4,9 @@ "charset": "", "column_names": "", "delimiter": "", - "ecs_compatibility": "", + "ecs_compatibility": [ + "disabled" + ], "explain": "__flag__", "format": "", "grok_pattern": "", @@ -31,7 +33,7 @@ "patterns": [ "_text_structure/find_structure" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/find-structure.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/find-structure.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.test_grok_pattern.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.test_grok_pattern.json index a22f3d9891646..7d2754c7784da 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.test_grok_pattern.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/text_structure.test_grok_pattern.json @@ -5,7 +5,9 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "ecs_compatibility": "" + "ecs_compatibility": [ + "disabled" + ] }, "methods": [ "GET", diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/transform.reset_transform.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/transform.reset_transform.json index dfc0e1a446c98..bd9ea79afe927 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/transform.reset_transform.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/transform.reset_transform.json @@ -5,7 +5,12 @@ "filter_path": [], "human": "__flag__", "pretty": "__flag__", - "force": "__flag__" + "force": "__flag__", + "timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.ack_watch.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.ack_watch.json index b021e63d20dc1..20080f17a6688 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.ack_watch.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.ack_watch.json @@ -14,7 +14,7 @@ "_watcher/watch/{watch_id}/_ack", "_watcher/watch/{watch_id}/_ack/{action_id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-ack-watch.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-ack-watch.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.activate_watch.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.activate_watch.json index 7e02bf603581c..ae351ec2b593a 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.activate_watch.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.activate_watch.json @@ -13,7 +13,7 @@ "patterns": [ "_watcher/watch/{watch_id}/_activate" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-activate-watch.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-activate-watch.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.deactivate_watch.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.deactivate_watch.json index 7528c0aefb75c..92ea41463bbf1 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.deactivate_watch.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.deactivate_watch.json @@ -13,7 +13,7 @@ "patterns": [ "_watcher/watch/{watch_id}/_deactivate" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-deactivate-watch.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-deactivate-watch.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.delete_watch.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.delete_watch.json index ca086d1ae47a8..6e67e91ea451d 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.delete_watch.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.delete_watch.json @@ -12,7 +12,7 @@ "patterns": [ "_watcher/watch/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-delete-watch.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-delete-watch.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.execute_watch.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.execute_watch.json index 5059d98b578f1..a723f9c32d37f 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.execute_watch.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.execute_watch.json @@ -15,7 +15,7 @@ "_watcher/watch/{id}/_execute", "_watcher/watch/_execute" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-execute-watch.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-execute-watch.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_settings.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_settings.json index 5149f0ba020a3..b0cf872b02ab8 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_settings.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_settings.json @@ -1,12 +1,22 @@ { "watcher.get_settings": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "master_timeout": [ + "-1", + "0" + ] + }, "methods": [ "GET" ], "patterns": [ "_watcher/settings" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-get-settings.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-get-settings.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_watch.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_watch.json index a7f197170c8e4..c80ae022ac9af 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_watch.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.get_watch.json @@ -12,7 +12,7 @@ "patterns": [ "_watcher/watch/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-get-watch.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-get-watch.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.put_watch.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.put_watch.json index 4ca82e48e2427..a8be4de2255a5 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.put_watch.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.put_watch.json @@ -17,7 +17,7 @@ "patterns": [ "_watcher/watch/{id}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-put-watch.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-put-watch.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.query_watches.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.query_watches.json index 64c65a755c13b..4302406d93a1e 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.query_watches.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.query_watches.json @@ -13,7 +13,7 @@ "patterns": [ "_watcher/_query/watches" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-query-watches.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-query-watches.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.start.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.start.json index 85b9b6b7ffb36..7bce97ed1e192 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.start.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.start.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" @@ -12,7 +17,7 @@ "patterns": [ "_watcher/_start" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-start.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-start.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stats.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stats.json index 35d5e21669a39..4d5adb6c72d6c 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stats.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stats.json @@ -28,7 +28,7 @@ "_watcher/stats", "_watcher/stats/{metric}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-stats.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-stats.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stop.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stop.json index 1ea4956c1b114..7455b406af590 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stop.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.stop.json @@ -4,7 +4,12 @@ "error_trace": "__flag__", "filter_path": [], "human": "__flag__", - "pretty": "__flag__" + "pretty": "__flag__", + "master_timeout": [ + "30s", + "-1", + "0" + ] }, "methods": [ "POST" @@ -12,7 +17,7 @@ "patterns": [ "_watcher/_stop" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-stop.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-stop.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.update_settings.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.update_settings.json index fdc03672ee1a7..8dfd8c9674a48 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.update_settings.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/watcher.update_settings.json @@ -1,12 +1,26 @@ { "watcher.update_settings": { + "url_params": { + "error_trace": "__flag__", + "filter_path": [], + "human": "__flag__", + "pretty": "__flag__", + "master_timeout": [ + "-1", + "0" + ], + "timeout": [ + "-1", + "0" + ] + }, "methods": [ "PUT" ], "patterns": [ "_watcher/settings" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api-update-settings.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/watcher-api-update-settings.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.info.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.info.json index 4181deb315ff7..8525afbdf49da 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.info.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.info.json @@ -18,7 +18,7 @@ "patterns": [ "_xpack" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/info-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/info-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.usage.json b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.usage.json index 626f8271e6501..342680eb06544 100644 --- a/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.usage.json +++ b/src/platform/plugins/shared/console/server/lib/spec_definitions/json/generated/xpack.usage.json @@ -17,7 +17,7 @@ "patterns": [ "_xpack/usage" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/usage-api.html", + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/{branch}/usage-api.html", "availability": { "stack": true, "serverless": false diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/actions_module.ts b/src/platform/plugins/shared/dashboard/public/dashboard_actions/actions_module.ts new file mode 100644 index 0000000000000..8747ff18f8f74 --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/actions_module.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { ClonePanelAction } from './clone_panel_action'; +export { ExpandPanelAction } from './expand_panel_action'; +export { FiltersNotificationAction } from './filters_notification_action'; +export { ExportCSVAction } from './export_csv_action'; +export { AddToLibraryAction } from './add_to_library_action'; +export { LegacyAddToLibraryAction } from './legacy_add_to_library_action'; +export { CopyToDashboardAction } from './copy_to_dashboard_action'; +export { UnlinkFromLibraryAction } from './unlink_from_library_action'; +export { LegacyUnlinkFromLibraryAction } from './legacy_unlink_from_library_action'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx index 90da6c3297cbd..28113d8fea92e 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/add_to_library_action.tsx @@ -39,9 +39,7 @@ import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import { coreServices } from '../services/kibana_services'; import { dashboardAddToLibraryActionStrings } from './_dashboard_actions_strings'; -import { DASHBOARD_ACTION_GROUP } from '.'; - -export const ACTION_ADD_TO_LIBRARY = 'saveToLibrary'; +import { ACTION_ADD_TO_LIBRARY, DASHBOARD_ACTION_GROUP } from './constants'; export type AddPanelToLibraryActionApi = CanAccessViewMode & HasType & diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx index 4eae444dfecb7..2f016c7fd872b 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/clone_panel_action.tsx @@ -20,10 +20,8 @@ import { HasUniqueId, } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { DASHBOARD_ACTION_GROUP } from '.'; import { dashboardClonePanelActionStrings } from './_dashboard_actions_strings'; - -export const ACTION_CLONE_PANEL = 'clonePanel'; +import { ACTION_CLONE_PANEL, DASHBOARD_ACTION_GROUP } from './constants'; export type ClonePanelActionApi = CanAccessViewMode & HasUniqueId & diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/constants.ts b/src/platform/plugins/shared/dashboard/public/dashboard_actions/constants.ts new file mode 100644 index 0000000000000..0135ed4f69a3c --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export const DASHBOARD_ACTION_GROUP = { id: 'dashboard_actions', order: 10 } as const; + +export const ACTION_ADD_TO_LIBRARY = 'saveToLibrary'; +export const ACTION_CLONE_PANEL = 'clonePanel'; +export const ACTION_COPY_TO_DASHBOARD = 'copyToDashboard'; +export const ACTION_EXPAND_PANEL = 'togglePanel'; +export const ACTION_EXPORT_CSV = 'ACTION_EXPORT_CSV'; +export const ACTION_LEGACY_ADD_TO_LIBRARY = 'legacySaveToLibrary'; +export const ACTION_LEGACY_UNLINK_FROM_LIBRARY = 'legacyUnlinkFromLibrary'; +export const ACTION_UNLINK_FROM_LIBRARY = 'unlinkFromLibrary'; +export const BADGE_FILTERS_NOTIFICATION = 'ACTION_FILTERS_NOTIFICATION'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx index 9b3e9a536a86a..7917eecc4d3fa 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx @@ -23,15 +23,12 @@ import { import { toMountPoint } from '@kbn/react-kibana-mount'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { DashboardApi } from '../dashboard_api/types'; -import { DASHBOARD_CONTAINER_TYPE } from '../dashboard_container'; +import { type DashboardApi, DASHBOARD_API_TYPE } from '../dashboard_api/types'; import { coreServices } from '../services/kibana_services'; import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; import { dashboardCopyToDashboardActionStrings } from './_dashboard_actions_strings'; -import { DASHBOARD_ACTION_GROUP } from '.'; import { CopyToDashboardModal } from './copy_to_dashboard_modal'; - -export const ACTION_COPY_TO_DASHBOARD = 'copyToDashboard'; +import { ACTION_COPY_TO_DASHBOARD, DASHBOARD_ACTION_GROUP } from './constants'; export interface DashboardCopyToCapabilities { canCreateNew: boolean; @@ -41,7 +38,7 @@ export interface DashboardCopyToCapabilities { export type CopyToDashboardAPI = HasType & HasUniqueId & HasParentApi< - { type: typeof DASHBOARD_CONTAINER_TYPE } & PublishesSavedObjectId & + { type: typeof DASHBOARD_API_TYPE } & PublishesSavedObjectId & Pick >; @@ -49,7 +46,7 @@ const apiIsCompatible = (api: unknown): api is CopyToDashboardAPI => { return ( apiHasUniqueId(api) && apiHasParentApi(api) && - apiIsOfType(api.parentApi, DASHBOARD_CONTAINER_TYPE) && + apiIsOfType(api.parentApi, DASHBOARD_API_TYPE) && (api?.parentApi as unknown as Pick) ?.getDashboardPanelFromId !== undefined && apiPublishesSavedObjectId(api.parentApi) diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx index 858b241ad7e5c..3c78088a7c098 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx @@ -23,7 +23,7 @@ import { apiHasSnapshottableState } from '@kbn/presentation-containers/interface import { LazyDashboardPicker, withSuspense } from '@kbn/presentation-util-plugin/public'; import { omit } from 'lodash'; import React, { useCallback, useMemo, useState } from 'react'; -import { CREATE_NEW_DASHBOARD_URL, createDashboardEditUrl } from '../dashboard_constants'; +import { CREATE_NEW_DASHBOARD_URL, createDashboardEditUrl } from '../utils/urls'; import { embeddableService } from '../services/kibana_services'; import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; import { dashboardCopyToDashboardActionStrings } from './_dashboard_actions_strings'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx index a207d181d26cc..1e50decc9cadc 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/expand_panel_action.tsx @@ -17,11 +17,9 @@ import { } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import { skip } from 'rxjs'; -import { DASHBOARD_ACTION_GROUP } from '.'; import { dashboardExpandPanelActionStrings } from './_dashboard_actions_strings'; - -export const ACTION_EXPAND_PANEL = 'togglePanel'; +import { ACTION_EXPAND_PANEL, DASHBOARD_ACTION_GROUP } from './constants'; export type ExpandPanelActionApi = HasUniqueId & HasParentApi; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx index 94dbf9e3087aa..e323c4d1c77ea 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/export_csv_action.tsx @@ -25,8 +25,7 @@ import { } from '@kbn/presentation-publishing'; import { coreServices, fieldFormatService } from '../services/kibana_services'; import { dashboardExportCsvActionStrings } from './_dashboard_actions_strings'; - -export const ACTION_EXPORT_CSV = 'ACTION_EXPORT_CSV'; +import { ACTION_EXPORT_CSV } from './constants'; export type ExportContext = EmbeddableApiContext & { // used for testing diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_action.tsx index 9662c8956dcc8..fe19b68ff7a08 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_action.tsx @@ -28,8 +28,7 @@ import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import { coreServices } from '../services/kibana_services'; import { dashboardFilterNotificationActionStrings } from './_dashboard_actions_strings'; import { FiltersNotificationPopover } from './filters_notification_popover'; - -export const BADGE_FILTERS_NOTIFICATION = 'ACTION_FILTERS_NOTIFICATION'; +import { BADGE_FILTERS_NOTIFICATION } from './constants'; export type FiltersNotificationActionApi = HasUniqueId & Partial & diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts b/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts deleted file mode 100644 index 1b9f2091fbce6..0000000000000 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/index.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { CONTEXT_MENU_TRIGGER, PANEL_NOTIFICATION_TRIGGER } from '@kbn/embeddable-plugin/public'; -import { DashboardStartDependencies } from '../plugin'; -import { AddToLibraryAction } from './add_to_library_action'; -import { LegacyAddToLibraryAction } from './legacy_add_to_library_action'; -import { ClonePanelAction } from './clone_panel_action'; -import { CopyToDashboardAction } from './copy_to_dashboard_action'; -import { ExpandPanelAction } from './expand_panel_action'; -import { ExportCSVAction } from './export_csv_action'; -import { FiltersNotificationAction } from './filters_notification_action'; -import { UnlinkFromLibraryAction } from './unlink_from_library_action'; -import { LegacyUnlinkFromLibraryAction } from './legacy_unlink_from_library_action'; - -interface BuildAllDashboardActionsProps { - allowByValueEmbeddables?: boolean; - plugins: DashboardStartDependencies; -} - -export const DASHBOARD_ACTION_GROUP = { id: 'dashboard_actions', order: 10 } as const; - -export const buildAllDashboardActions = async ({ - plugins, - allowByValueEmbeddables, -}: BuildAllDashboardActionsProps) => { - const { uiActions, share } = plugins; - - const clonePanelAction = new ClonePanelAction(); - uiActions.registerAction(clonePanelAction); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, clonePanelAction.id); - const expandPanelAction = new ExpandPanelAction(); - uiActions.registerAction(expandPanelAction); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, expandPanelAction.id); - - const panelLevelFiltersNotificationAction = new FiltersNotificationAction(); - uiActions.registerAction(panelLevelFiltersNotificationAction); - uiActions.attachAction(PANEL_NOTIFICATION_TRIGGER, panelLevelFiltersNotificationAction.id); - - if (share) { - const ExportCSVPlugin = new ExportCSVAction(); - uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, ExportCSVPlugin); - } - - if (allowByValueEmbeddables) { - const addToLibraryAction = new AddToLibraryAction(); - uiActions.registerAction(addToLibraryAction); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, addToLibraryAction.id); - - const legacyAddToLibraryAction = new LegacyAddToLibraryAction(); - uiActions.registerAction(legacyAddToLibraryAction); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, legacyAddToLibraryAction.id); - - const unlinkFromLibraryAction = new UnlinkFromLibraryAction(); - uiActions.registerAction(unlinkFromLibraryAction); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, unlinkFromLibraryAction.id); - - const legacyUnlinkFromLibraryAction = new LegacyUnlinkFromLibraryAction(); - uiActions.registerAction(legacyUnlinkFromLibraryAction); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, legacyUnlinkFromLibraryAction.id); - - const copyToDashboardAction = new CopyToDashboardAction(); - uiActions.registerAction(copyToDashboardAction); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, copyToDashboardAction.id); - } -}; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx index 6cc46b6af51e3..c263aafffad77 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx @@ -18,12 +18,10 @@ import { HasLegacyLibraryTransforms, } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { DASHBOARD_ACTION_GROUP } from '.'; import { dashboardAddToLibraryActionStrings } from './_dashboard_actions_strings'; import { coreServices } from '../services/kibana_services'; - -export const ACTION_LEGACY_ADD_TO_LIBRARY = 'legacySaveToLibrary'; +import { ACTION_LEGACY_ADD_TO_LIBRARY, DASHBOARD_ACTION_GROUP } from './constants'; export type LegacyAddPanelToLibraryActionApi = CanAccessViewMode & HasLegacyLibraryTransforms & diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx index 668f02dee3159..9c37ee31a89a1 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx @@ -20,10 +20,8 @@ import { HasLegacyLibraryTransforms, } from '@kbn/presentation-publishing'; import { dashboardUnlinkFromLibraryActionStrings } from './_dashboard_actions_strings'; -import { DASHBOARD_ACTION_GROUP } from '.'; import { coreServices } from '../services/kibana_services'; - -export const ACTION_LEGACY_UNLINK_FROM_LIBRARY = 'legacyUnlinkFromLibrary'; +import { ACTION_LEGACY_UNLINK_FROM_LIBRARY, DASHBOARD_ACTION_GROUP } from './constants'; export type LegacyUnlinkPanelFromLibraryActionApi = CanAccessViewMode & HasLegacyLibraryTransforms & diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/register_actions.ts b/src/platform/plugins/shared/dashboard/public/dashboard_actions/register_actions.ts new file mode 100644 index 0000000000000..48f5b8f93562a --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/register_actions.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { CONTEXT_MENU_TRIGGER, PANEL_NOTIFICATION_TRIGGER } from '@kbn/embeddable-plugin/public'; +import { DashboardStartDependencies } from '../plugin'; +import { + ACTION_ADD_TO_LIBRARY, + ACTION_CLONE_PANEL, + ACTION_COPY_TO_DASHBOARD, + ACTION_EXPAND_PANEL, + ACTION_EXPORT_CSV, + ACTION_LEGACY_ADD_TO_LIBRARY, + ACTION_LEGACY_UNLINK_FROM_LIBRARY, + ACTION_UNLINK_FROM_LIBRARY, + BADGE_FILTERS_NOTIFICATION, +} from './constants'; + +export const registerActions = async ({ + plugins, + allowByValueEmbeddables, +}: { + allowByValueEmbeddables?: boolean; + plugins: DashboardStartDependencies; +}) => { + const { uiActions, share } = plugins; + + uiActions.registerActionAsync(ACTION_CLONE_PANEL, async () => { + const { ClonePanelAction } = await import('./actions_module'); + return new ClonePanelAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_CLONE_PANEL); + + uiActions.registerActionAsync(ACTION_EXPAND_PANEL, async () => { + const { ExpandPanelAction } = await import('./actions_module'); + return new ExpandPanelAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_EXPAND_PANEL); + + uiActions.registerActionAsync(BADGE_FILTERS_NOTIFICATION, async () => { + const { FiltersNotificationAction } = await import('./actions_module'); + return new FiltersNotificationAction(); + }); + uiActions.attachAction(PANEL_NOTIFICATION_TRIGGER, BADGE_FILTERS_NOTIFICATION); + + if (share) { + uiActions.registerActionAsync(ACTION_EXPORT_CSV, async () => { + const { ExportCSVAction } = await import('./actions_module'); + return new ExportCSVAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_EXPORT_CSV); + } + + if (allowByValueEmbeddables) { + uiActions.registerActionAsync(ACTION_ADD_TO_LIBRARY, async () => { + const { AddToLibraryAction } = await import('./actions_module'); + return new AddToLibraryAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_ADD_TO_LIBRARY); + + uiActions.registerActionAsync(ACTION_LEGACY_ADD_TO_LIBRARY, async () => { + const { LegacyAddToLibraryAction } = await import('./actions_module'); + return new LegacyAddToLibraryAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_LEGACY_ADD_TO_LIBRARY); + + uiActions.registerActionAsync(ACTION_UNLINK_FROM_LIBRARY, async () => { + const { UnlinkFromLibraryAction } = await import('./actions_module'); + return new UnlinkFromLibraryAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_UNLINK_FROM_LIBRARY); + + uiActions.registerActionAsync(ACTION_LEGACY_UNLINK_FROM_LIBRARY, async () => { + const { LegacyUnlinkFromLibraryAction } = await import('./actions_module'); + return new LegacyUnlinkFromLibraryAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_LEGACY_UNLINK_FROM_LIBRARY); + + uiActions.registerActionAsync(ACTION_COPY_TO_DASHBOARD, async () => { + const { CopyToDashboardAction } = await import('./actions_module'); + return new CopyToDashboardAction(); + }); + uiActions.attachAction(CONTEXT_MENU_TRIGGER, ACTION_COPY_TO_DASHBOARD); + } +}; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/unlink_from_library_action.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/unlink_from_library_action.tsx index ac7da809871cf..43ff33c2238e5 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/unlink_from_library_action.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/unlink_from_library_action.tsx @@ -30,9 +30,7 @@ import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import { coreServices } from '../services/kibana_services'; import { dashboardUnlinkFromLibraryActionStrings } from './_dashboard_actions_strings'; -import { DASHBOARD_ACTION_GROUP } from '.'; - -export const ACTION_UNLINK_FROM_LIBRARY = 'unlinkFromLibrary'; +import { ACTION_UNLINK_FROM_LIBRARY, DASHBOARD_ACTION_GROUP } from './constants'; export type UnlinkPanelFromLibraryActionApi = CanAccessViewMode & (HasLibraryTransforms | HasInPlaceLibraryTransforms) & diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/default_dashboard_input.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/default_dashboard_input.ts new file mode 100644 index 0000000000000..c69d0364eb4a0 --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/default_dashboard_input.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { DashboardContainerInput } from '../../common'; + +export const DEFAULT_DASHBOARD_INPUT: Omit = { + viewMode: 'view', + timeRestore: false, + query: { query: '', language: 'kuery' }, + description: '', + filters: [], + panels: {}, + title: '', + tags: [], + executionContext: { + type: 'dashboard', + }, + + // options + useMargins: true, + syncColors: false, + syncCursor: true, + syncTooltips: false, + hidePanelTitles: false, +}; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts index 8344f699ec3fa..4c92119b46733 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/get_dashboard_api.ts @@ -20,7 +20,8 @@ import { import { initializeTrackPanel } from './track_panel'; import { initializeTrackOverlay } from './track_overlay'; import { initializeUnsavedChangesManager } from './unsaved_changes_manager'; -import { DASHBOARD_APP_ID, DEFAULT_DASHBOARD_INPUT } from '../dashboard_constants'; +import { DASHBOARD_APP_ID } from '../plugin_constants'; +import { DEFAULT_DASHBOARD_INPUT } from './default_dashboard_input'; import { LoadDashboardReturn } from '../services/dashboard_content_management_service/types'; import { initializePanelsManager } from './panels_manager'; import { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/get_serialized_state.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/get_serialized_state.ts index 5c0377adf175d..bb7699b078d6d 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/get_serialized_state.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/get_serialized_state.ts @@ -21,8 +21,11 @@ import { embeddableService, savedObjectsTaggingService, } from '../services/kibana_services'; -import { LATEST_DASHBOARD_CONTAINER_VERSION } from '../dashboard_container'; import { DashboardState } from './types'; +import { LATEST_VERSION } from '../../common/content_management'; +import { convertNumberToDashboardVersion } from '../services/dashboard_content_management_service/lib/dashboard_versioning'; + +const LATEST_DASHBOARD_CONTAINER_VERSION = convertNumberToDashboardVersion(LATEST_VERSION); export const convertTimeToUTCString = (time?: string | Moment): undefined | string => { if (moment(time).isValid()) { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/load_dashboard_api.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/load_dashboard_api.ts index 00fd32fd56ac1..0bd2da734ba8d 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/load_dashboard_api.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/load_dashboard_api.ts @@ -19,7 +19,7 @@ import { getDashboardBackupService, } from '../services/dashboard_backup_service'; import { UnsavedPanelState } from '../dashboard_container/types'; -import { DEFAULT_DASHBOARD_INPUT } from '../dashboard_constants'; +import { DEFAULT_DASHBOARD_INPUT } from './default_dashboard_input'; export async function loadDashboardApi({ getCreationOptions, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/open_save_modal.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_api/open_save_modal.tsx index 567fd1dcf98f6..0e211041b5104 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/open_save_modal.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/open_save_modal.tsx @@ -18,7 +18,7 @@ import { DashboardSaveOptions } from '../dashboard_container/types'; import { coreServices, dataService, savedObjectsTaggingService } from '../services/kibana_services'; import { getDashboardContentManagementService } from '../services/dashboard_content_management_service'; import { DashboardState } from './types'; -import { DASHBOARD_CONTENT_ID, SAVED_OBJECT_POST_TIME } from '../dashboard_constants'; +import { DASHBOARD_CONTENT_ID, SAVED_OBJECT_POST_TIME } from '../utils/telemetry_constants'; import { extractTitleAndCount } from '../dashboard_container/embeddable/api/lib/extract_title_and_count'; import { DashboardSaveModal } from '../dashboard_container/embeddable/api/overlays/save_modal'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts index 5188a604631b4..d2b1c0117214c 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/panels_manager.ts @@ -35,18 +35,15 @@ import { DashboardPanelMap, DashboardPanelState, prefixReferencesFromPanel } fro import type { initializeTrackPanel } from './track_panel'; import { getPanelAddedSuccessString } from '../dashboard_app/_dashboard_app_strings'; import { runPanelPlacementStrategy } from '../dashboard_container/panel_placement/place_new_panel_strategies'; -import { - DASHBOARD_UI_METRIC_ID, - DEFAULT_PANEL_HEIGHT, - DEFAULT_PANEL_WIDTH, - PanelPlacementStrategy, -} from '../dashboard_constants'; +import { DEFAULT_PANEL_HEIGHT, DEFAULT_PANEL_WIDTH } from '../../common/content_management'; +import { DASHBOARD_UI_METRIC_ID } from '../utils/telemetry_constants'; import { getDashboardPanelPlacementSetting } from '../dashboard_container/panel_placement/panel_placement_registry'; import { UnsavedPanelState } from '../dashboard_container/types'; import { DashboardState } from './types'; import { arePanelLayoutsEqual } from './are_panel_layouts_equal'; import { dashboardClonePanelActionStrings } from '../dashboard_actions/_dashboard_actions_strings'; -import { placeClonePanel } from '../dashboard_container/panel_placement'; +import { placeClonePanel } from '../dashboard_container/panel_placement/place_clone_panel_strategy'; +import { PanelPlacementStrategy } from '../plugin_constants'; export function initializePanelsManager( incomingEmbeddable: EmbeddablePackageState | undefined, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts index 9cb93269f4b4b..e81a9dbba275b 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/settings_manager.ts @@ -11,7 +11,7 @@ import fastIsEqual from 'fast-deep-equal'; import { StateComparators, initializeTitles } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; import { DashboardSettings, DashboardState } from './types'; -import { DEFAULT_DASHBOARD_INPUT } from '../dashboard_constants'; +import { DEFAULT_DASHBOARD_INPUT } from './default_dashboard_input'; export function initializeSettingsManager(initialState?: DashboardState) { const syncColors$ = new BehaviorSubject( diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts index acc6d0569d2db..5cb7a40dcc52c 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts @@ -45,7 +45,8 @@ import moment, { Moment } from 'moment'; import { cleanFiltersForSerialize } from '../utils/clean_filters_for_serialize'; import { dataService } from '../services/kibana_services'; import { DashboardCreationOptions, DashboardState } from './types'; -import { DEFAULT_DASHBOARD_INPUT, GLOBAL_STATE_STORAGE_KEY } from '../dashboard_constants'; +import { DEFAULT_DASHBOARD_INPUT } from './default_dashboard_input'; +import { GLOBAL_STATE_STORAGE_KEY } from '../utils/urls'; export function initializeUnifiedSearchManager( initialState: DashboardState, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx index ba6ec626f2348..c34893cc19da7 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.test.tsx @@ -9,17 +9,16 @@ import { MemoryHistory, createMemoryHistory } from 'history'; import React, { useEffect } from 'react'; - import { render, waitFor } from '@testing-library/react'; import type { DashboardRendererProps } from '../dashboard_container/external_api/dashboard_renderer'; -import { LazyDashboardRenderer } from '../dashboard_container/external_api/lazy_dashboard_renderer'; +import { DashboardRenderer } from '../dashboard_container/external_api/dashboard_renderer'; import { DashboardTopNav } from '../dashboard_top_nav'; import { buildMockDashboardApi } from '../mocks'; import { dataService } from '../services/kibana_services'; import { DashboardApp } from './dashboard_app'; -jest.mock('../dashboard_container/external_api/lazy_dashboard_renderer'); +jest.mock('../dashboard_container/external_api/dashboard_renderer'); jest.mock('../dashboard_top_nav'); describe('Dashboard App', () => { @@ -41,7 +40,7 @@ describe('Dashboard App', () => { * and hitting errors that aren't relevant */ (DashboardTopNav as jest.Mock).mockImplementation(() => <>Top nav); - (LazyDashboardRenderer as jest.Mock).mockImplementation( + (DashboardRenderer as jest.Mock).mockImplementation( ({ onApiAvailable }: DashboardRendererProps) => { // we need overwrite the onApiAvailable prop to get access to the dashboard API in this test useEffect(() => { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.tsx index 39616653eea25..dce6b62d88026 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_app.tsx @@ -18,13 +18,9 @@ import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; import { createKbnUrlStateStorage, withNotifyOnErrors } from '@kbn/kibana-utils-plugin/public'; import { ViewMode } from '@kbn/presentation-publishing'; -import { DashboardApi, DashboardCreationOptions, DashboardRenderer } from '..'; +import { DashboardApi, DashboardCreationOptions } from '..'; import { SharedDashboardState } from '../../common'; -import { - DASHBOARD_APP_ID, - DASHBOARD_STATE_STORAGE_KEY, - createDashboardEditUrl, -} from '../dashboard_constants'; +import { DASHBOARD_APP_ID } from '../plugin_constants'; import { DashboardRedirect } from '../dashboard_container/types'; import { DashboardTopNav } from '../dashboard_top_nav'; import { @@ -51,6 +47,8 @@ import { removeSearchSessionIdFromURL, } from './url/search_sessions_integration'; import { loadAndRemoveDashboardState, startSyncingExpandedPanelState } from './url/url_utils'; +import { DashboardRenderer } from '../dashboard_container/external_api/dashboard_renderer'; +import { DASHBOARD_STATE_STORAGE_KEY, createDashboardEditUrl } from '../utils/urls'; export interface DashboardAppProps { history: History; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_router.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_router.tsx index 6b59bf03a4bcd..9eddf9eef8d13 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_router.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/dashboard_router.tsx @@ -18,14 +18,7 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { HashRouter, Redirect, RouteComponentProps } from 'react-router-dom'; -import { - CREATE_NEW_DASHBOARD_URL, - createDashboardEditUrl, - createDashboardListingFilterUrl, - DASHBOARD_APP_ID, - LANDING_PAGE_PATH, - VIEW_DASHBOARD_URL, -} from '../dashboard_constants'; +import { DASHBOARD_APP_ID, LANDING_PAGE_PATH } from '../plugin_constants'; import { RedirectToProps } from '../dashboard_container/types'; import { coreServices, dataService, embeddableService } from '../services/kibana_services'; import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; @@ -35,6 +28,12 @@ import { DashboardMountContext } from './hooks/dashboard_mount_context'; import { DashboardListingPage } from './listing_page/dashboard_listing_page'; import { DashboardNoMatch } from './listing_page/dashboard_no_match'; import { DashboardEmbedSettings, DashboardMountContextProps } from './types'; +import { + CREATE_NEW_DASHBOARD_URL, + VIEW_DASHBOARD_URL, + createDashboardEditUrl, + createDashboardListingFilterUrl, +} from '../utils/urls'; export const dashboardUrlParams = { showTopMenu: 'show-top-menu', diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx index fbcdb82ec3410..b25ea2016e8e4 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx @@ -10,7 +10,7 @@ import { useCallback, useMemo, useState } from 'react'; import { DashboardCreationOptions } from '../..'; -import { createDashboardEditUrl } from '../../dashboard_constants'; +import { createDashboardEditUrl } from '../../utils/urls'; import { LoadDashboardReturn } from '../../services/dashboard_content_management_service/types'; import { screenshotModeService, spacesService } from '../../services/kibana_services'; import { useDashboardMountContext } from './dashboard_mount_context'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx index d68c4a76e9f78..072d7263aab92 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx @@ -15,7 +15,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { LANDING_PAGE_PATH } from '../../dashboard_constants'; +import { LANDING_PAGE_PATH } from '../../plugin_constants'; import { coreServices, urlForwardingService } from '../../services/kibana_services'; import { useDashboardMountContext } from '../hooks/dashboard_mount_context'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.test.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.test.ts index 7226602a12754..109892d408ba6 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.test.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.test.ts @@ -11,7 +11,7 @@ import { getDashboardListItemLink } from './get_dashboard_list_item_link'; import { createHashHistory } from 'history'; import { FilterStateStore } from '@kbn/es-query'; import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; -import { GLOBAL_STATE_STORAGE_KEY } from '../../dashboard_constants'; +import { GLOBAL_STATE_STORAGE_KEY } from '../../utils/urls'; const DASHBOARD_ID = '13823000-99b9-11ea-9eb6-d9e8adceb647'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts index aa932ebd8bf3a..6ae30796f45a3 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts @@ -10,12 +10,9 @@ import type { QueryState } from '@kbn/data-plugin/public'; import { IKbnUrlStateStorage, setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; -import { - DASHBOARD_APP_ID, - GLOBAL_STATE_STORAGE_KEY, - createDashboardEditUrl, -} from '../../dashboard_constants'; +import { DASHBOARD_APP_ID } from '../../plugin_constants'; import { coreServices } from '../../services/kibana_services'; +import { GLOBAL_STATE_STORAGE_KEY, createDashboardEditUrl } from '../../utils/urls'; export const getDashboardListItemLink = ( kbnUrlStateStorage: IKbnUrlStateStorage, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/get_dashboard_locator_params.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/get_dashboard_locator_params.ts index e5217bc81647a..dfa0aa8c71a39 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/get_dashboard_locator_params.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/get_dashboard_locator_params.ts @@ -10,7 +10,7 @@ import { isFilterPinned, type Query } from '@kbn/es-query'; import type { HasParentApi, PublishesUnifiedSearch } from '@kbn/presentation-publishing'; import type { DashboardDrilldownOptions } from '@kbn/presentation-util-plugin/public'; -import type { DashboardLocatorParams } from '../../dashboard_container'; +import type { DashboardLocatorParams } from '../../dashboard_container/types'; export const getDashboardLocatorParamsFromEmbeddable = ( api: Partial>>, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/locator.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/locator.ts index e955507f6a73a..9dfccfde4e2ea 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/locator.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/locator/locator.ts @@ -16,7 +16,7 @@ import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public' import type { GlobalQueryStateFromUrl } from '@kbn/data-plugin/public'; import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; -import { DASHBOARD_APP_ID, SEARCH_SESSION_ID } from '../../dashboard_constants'; +import { DASHBOARD_APP_ID, SEARCH_SESSION_ID } from '../../plugin_constants'; import { DashboardLocatorParams } from '../..'; /** diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx index 4e2aea60ad758..fd5e947a33baa 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx @@ -17,7 +17,7 @@ import { BaseVisType, VisTypeAlias } from '@kbn/visualizations-plugin/public'; import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; import { useDashboardApi } from '../../dashboard_api/use_dashboard_api'; -import { DASHBOARD_UI_METRIC_ID } from '../../dashboard_constants'; +import { DASHBOARD_UI_METRIC_ID } from '../../utils/telemetry_constants'; import { dataService, embeddableService, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx index de7a1584dc9bf..63be6836ba80f 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx @@ -9,7 +9,7 @@ import { Capabilities } from '@kbn/core/public'; import { convertPanelMapToPanelsArray, DashboardContainerInput } from '../../../../common'; -import { DashboardLocatorParams } from '../../../dashboard_container'; +import { DashboardLocatorParams } from '../../../dashboard_container/types'; import { shareService } from '../../../services/kibana_services'; import { showPublicUrlSwitch, ShowShareModal, ShowShareModalProps } from './show_share_modal'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx index d8b4c341cf678..e9b22c4f3d87f 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx @@ -20,7 +20,7 @@ import { getStateFromKbnUrl, setStateToKbnUrl, unhashUrl } from '@kbn/kibana-uti import { FormattedMessage } from '@kbn/i18n-react'; import { convertPanelMapToPanelsArray, DashboardPanelMap } from '../../../../common'; -import { DashboardLocatorParams } from '../../../dashboard_container'; +import { DashboardLocatorParams } from '../../../dashboard_container/types'; import { getDashboardBackupService, PANELS_CONTROL_GROUP_KEY, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx index 6f3d9c1cf5654..1cb5ef6dad964 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx @@ -15,7 +15,6 @@ import useMountedState from 'react-use/lib/useMountedState'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { UI_SETTINGS } from '../../../common'; import { useDashboardApi } from '../../dashboard_api/use_dashboard_api'; -import { CHANGE_CHECK_DEBOUNCE } from '../../dashboard_constants'; import { openSettingsFlyout } from '../../dashboard_container/embeddable/api'; import { confirmDiscardUnsavedChanges } from '../../dashboard_listing/confirm_overlays'; import { getDashboardBackupService } from '../../services/dashboard_backup_service'; @@ -73,9 +72,7 @@ export const useDashboardMenuItems = ({ */ const quickSaveDashboard = useCallback(() => { setIsSaveInProgress(true); - dashboardApi - .runQuickSave() - .then(() => setTimeout(() => setIsSaveInProgress(false), CHANGE_CHECK_DEBOUNCE)); + dashboardApi.runQuickSave().then(() => setTimeout(() => setIsSaveInProgress(false), 100)); }, [dashboardApi]); /** diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts index 9992ac661614e..64e10faa39dd0 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/search_sessions_integration.ts @@ -19,8 +19,8 @@ import { replaceUrlHashQuery } from '@kbn/kibana-utils-plugin/common'; import type { Query } from '@kbn/es-query'; import { SearchSessionInfoProvider } from '@kbn/data-plugin/public'; import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; -import { SEARCH_SESSION_ID } from '../../dashboard_constants'; -import { DashboardLocatorParams } from '../../dashboard_container'; +import { SEARCH_SESSION_ID } from '../../plugin_constants'; +import { DashboardLocatorParams } from '../../dashboard_container/types'; import { convertPanelMapToPanelsArray } from '../../../common'; import { dataService } from '../../services/kibana_services'; import { DashboardApi } from '../../dashboard_api/types'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts index 87faf87b026f8..b739df4f91e94 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/url/url_utils.ts @@ -24,7 +24,7 @@ import { import type { DashboardPanel } from '../../../server/content_management'; import type { SavedDashboardPanel } from '../../../server/dashboard_saved_object'; import { DashboardApi } from '../../dashboard_api/types'; -import { DASHBOARD_STATE_STORAGE_KEY, createDashboardEditUrl } from '../../dashboard_constants'; +import { DASHBOARD_STATE_STORAGE_KEY, createDashboardEditUrl } from '../../utils/urls'; import { migrateLegacyQuery } from '../../services/dashboard_content_management_service/lib/load_dashboard_state'; import { coreServices } from '../../services/kibana_services'; import { getPanelTooOldErrorString } from '../_dashboard_app_strings'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_constants.ts b/src/platform/plugins/shared/dashboard/public/dashboard_constants.ts deleted file mode 100644 index 190b6653341a1..0000000000000 --- a/src/platform/plugins/shared/dashboard/public/dashboard_constants.ts +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { DashboardContainerInput } from '../common'; - -// ------------------------------------------------------------------ -// URL Constants -// ------------------------------------------------------------------ -export const DASHBOARD_STATE_STORAGE_KEY = '_a'; -export const GLOBAL_STATE_STORAGE_KEY = '_g'; -export const LANDING_PAGE_PATH = '/list'; -export const CREATE_NEW_DASHBOARD_URL = '/create'; -export const VIEW_DASHBOARD_URL = '/view'; -export const PRINT_DASHBOARD_URL = '/print'; - -export const getFullPath = (aliasId?: string, id?: string) => - `/app/dashboards#${createDashboardEditUrl(aliasId || id)}`; - -export const getFullEditPath = (id?: string, editMode?: boolean) => { - return `/app/dashboards#${createDashboardEditUrl(id, editMode)}`; -}; - -export function createDashboardEditUrl(id?: string, editMode?: boolean) { - if (!id) { - return `${CREATE_NEW_DASHBOARD_URL}`; - } - const edit = editMode ? `?${DASHBOARD_STATE_STORAGE_KEY}=(viewMode:edit)` : ''; - return `${VIEW_DASHBOARD_URL}/${id}${edit}`; -} - -export function createDashboardListingFilterUrl(filter: string | undefined) { - return filter ? `${LANDING_PAGE_PATH}?filter="${filter}"` : LANDING_PAGE_PATH; -} - -// ------------------------------------------------------------------ -// Telemetry & Events -// ------------------------------------------------------------------ -export const DASHBOARD_LOADED_EVENT = 'dashboard_loaded'; -export const SAVED_OBJECT_LOADED_TIME = 'saved_object_loaded_time'; -export const SAVED_OBJECT_DELETE_TIME = 'saved_object_delete_time'; -export const SAVED_OBJECT_POST_TIME = 'saved_object_post_time'; -export const DASHBOARD_UI_METRIC_ID = 'dashboard'; - -// ------------------------------------------------------------------ -// IDs -// ------------------------------------------------------------------ -export const DASHBOARD_APP_ID = 'dashboards'; -export const LEGACY_DASHBOARD_APP_ID = 'dashboard'; -export const SEARCH_SESSION_ID = 'searchSessionId'; - -// ------------------------------------------------------------------ -// Grid -// ------------------------------------------------------------------ -export const DEFAULT_PANEL_HEIGHT = 15; -export const DASHBOARD_MARGIN_SIZE = 8; -export const DASHBOARD_GRID_HEIGHT = 20; -export const DASHBOARD_GRID_COLUMN_COUNT = 48; -export const DEFAULT_PANEL_WIDTH = DASHBOARD_GRID_COLUMN_COUNT / 2; - -export const CHANGE_CHECK_DEBOUNCE = 100; - -export enum PanelPlacementStrategy { - /** Place on the very top of the Dashboard, add the height of this panel to all other panels. */ - placeAtTop = 'placeAtTop', - /** Look for the smallest y and x value where the default panel will fit. */ - findTopLeftMostOpenSpace = 'findTopLeftMostOpenSpace', -} - -// ------------------------------------------------------------------ -// Content Management -// ------------------------------------------------------------------ -export { CONTENT_ID as DASHBOARD_CONTENT_ID } from '../common/content_management/constants'; - -export const DASHBOARD_CACHE_SIZE = 20; // only store a max of 20 dashboards -export const DASHBOARD_CACHE_TTL = 1000 * 60 * 5; // time to live = 5 minutes - -// ------------------------------------------------------------------ -// Default State -// ------------------------------------------------------------------ -export const DEFAULT_DASHBOARD_INPUT: Omit = { - viewMode: 'view', - timeRestore: false, - query: { query: '', language: 'kuery' }, - description: '', - filters: [], - panels: {}, - title: '', - tags: [], - executionContext: { - type: 'dashboard', - }, - - // options - useMargins: true, - syncColors: false, - syncCursor: true, - syncTooltips: false, - hidePanelTitles: false, -}; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/_dashboard_container_strings.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/_dashboard_container_strings.ts deleted file mode 100644 index b553d45468273..0000000000000 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/_dashboard_container_strings.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { i18n } from '@kbn/i18n'; - -/* - Empty Screen -*/ -export const emptyScreenStrings = { - // Edit mode - getEditModeTitle: () => - i18n.translate('dashboard.emptyScreen.editModeTitle', { - defaultMessage: 'This dashboard is empty. Let\u2019s fill it up!', - }), - getEditModeSubtitle: () => - i18n.translate('dashboard.emptyScreen.editModeSubtitle', { - defaultMessage: 'Create a visualization of your data, or add one from the library.', - }), - getAddFromLibraryButtonTitle: () => - i18n.translate('dashboard.emptyScreen.addFromLibrary', { - defaultMessage: 'Add from library', - }), - getCreateVisualizationButtonTitle: () => - i18n.translate('dashboard.emptyScreen.createVisualization', { - defaultMessage: 'Create visualization', - }), - - // View Mode with permissions - getViewModeWithPermissionsTitle: () => - i18n.translate('dashboard.emptyScreen.viewModeTitle', { - defaultMessage: 'Add visualizations to your dashboard', - }), - getViewModeWithPermissionsSubtitle: () => - i18n.translate('dashboard.emptyScreen.viewModeSubtitle', { - defaultMessage: 'Enter edit mode, and then start adding your visualizations.', - }), - getEditLinkTitle: () => - i18n.translate('dashboard.emptyScreen.editDashboard', { - defaultMessage: 'Edit dashboard', - }), - - // View Mode without permissions - getViewModeWithoutPermissionsTitle: () => - i18n.translate('dashboard.emptyScreen.noPermissionsTitle', { - defaultMessage: 'This dashboard is empty.', - }), - getViewModeWithoutPermissionsSubtitle: () => - i18n.translate('dashboard.emptyScreen.noPermissionsSubtitle', { - defaultMessage: 'You need additional privileges to edit this dashboard.', - }), -}; - -export const dashboardSaveToastStrings = { - getSuccessString: (dashTitle: string) => - i18n.translate('dashboard.dashboardWasSavedSuccessMessage', { - defaultMessage: `Dashboard ''{dashTitle}'' was saved`, - values: { dashTitle }, - }), - getFailureString: (dashTitle: string, errorMessage: string) => - i18n.translate('dashboard.dashboardWasNotSavedDangerMessage', { - defaultMessage: `Dashboard ''{dashTitle}'' was not saved. Error: {errorMessage}`, - values: { - dashTitle, - errorMessage, - }, - }), -}; - -export const dashboardSavedObjectErrorStrings = { - getDashboardGridError: (message: string) => - i18n.translate('dashboard.loadingError.dashboardGridErrorMessage', { - defaultMessage: 'Unable to load dashboard: {message}', - values: { message }, - }), - getErrorDeletingDashboardToast: () => - i18n.translate('dashboard.deleteError.toastDescription', { - defaultMessage: 'Error encountered while deleting dashboard', - }), -}; - -export const backupServiceStrings = { - viewModeStorageError: (message: string) => - i18n.translate('dashboard.viewmodeBackup.error', { - defaultMessage: 'Error encountered while backing up view mode: {message}', - values: { message }, - }), - getPanelsGetError: (message: string) => - i18n.translate('dashboard.panelStorageError.getError', { - defaultMessage: 'Error encountered while fetching unsaved changes: {message}', - values: { message }, - }), - getPanelsSetError: (message: string) => - i18n.translate('dashboard.panelStorageError.setError', { - defaultMessage: 'Error encountered while setting unsaved changes: {message}', - values: { message }, - }), - getPanelsClearError: (message: string) => - i18n.translate('dashboard.panelStorageError.clearError', { - defaultMessage: 'Error encountered while clearing unsaved changes: {message}', - values: { message }, - }), -}; - -export const panelPlacementStrings = { - getUnknownStrategyError: (strategy: string) => - i18n.translate('dashboard.panelPlacement.unknownStrategyError', { - defaultMessage: 'Unknown panel placement strategy: {strategy}', - values: { strategy }, - }), - getPanelPlacementSettingsExistsError: (panelType: string) => - i18n.translate('dashboard.panelPlacement.panelPlacementSettingsExistsError', { - defaultMessage: 'Panel placement settings for embeddable type {panelType} already exists', - values: { panelType }, - }), -}; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx index 73d225dca3b40..36c2e1c0c16bb 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx @@ -9,7 +9,7 @@ import React, { useCallback, useMemo } from 'react'; import useObservable from 'react-use/lib/useObservable'; - +import { i18n } from '@kbn/i18n'; import { EuiButton, EuiButtonEmpty, @@ -23,7 +23,7 @@ import { METRIC_TYPE } from '@kbn/analytics'; import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; import { useDashboardApi } from '../../../dashboard_api/use_dashboard_api'; -import { DASHBOARD_UI_METRIC_ID } from '../../../dashboard_constants'; +import { DASHBOARD_UI_METRIC_ID } from '../../../utils/telemetry_constants'; import { coreServices, dataService, @@ -32,7 +32,6 @@ import { visualizationsService, } from '../../../services/kibana_services'; import { getDashboardCapabilities } from '../../../utils/get_dashboard_capabilities'; -import { emptyScreenStrings } from '../../_dashboard_container_strings'; import { addFromLibrary } from '../../embeddable/api'; export function DashboardEmptyScreen() { @@ -87,19 +86,31 @@ export function DashboardEmptyScreen() { const title = (() => { const titleString = showEditPrompt - ? emptyScreenStrings.getEditModeTitle() + ? i18n.translate('dashboard.emptyScreen.editModeTitle', { + defaultMessage: 'This dashboard is empty. Let\u2019s fill it up!', + }) : showWriteControls - ? emptyScreenStrings.getViewModeWithPermissionsTitle() - : emptyScreenStrings.getViewModeWithoutPermissionsTitle(); + ? i18n.translate('dashboard.emptyScreen.viewModeTitle', { + defaultMessage: 'Add visualizations to your dashboard', + }) + : i18n.translate('dashboard.emptyScreen.noPermissionsTitle', { + defaultMessage: 'This dashboard is empty.', + }); return

{titleString}

; })(); const body = (() => { const bodyString = showEditPrompt - ? emptyScreenStrings.getEditModeSubtitle() + ? i18n.translate('dashboard.emptyScreen.editModeSubtitle', { + defaultMessage: 'Create a visualization of your data, or add one from the library.', + }) : showWriteControls - ? emptyScreenStrings.getViewModeWithPermissionsSubtitle() - : emptyScreenStrings.getViewModeWithoutPermissionsSubtitle(); + ? i18n.translate('dashboard.emptyScreen.viewModeSubtitle', { + defaultMessage: 'Enter edit mode, and then start adding your visualizations.', + }) + : i18n.translate('dashboard.emptyScreen.noPermissionsSubtitle', { + defaultMessage: 'You need additional privileges to edit this dashboard.', + }); return ( {bodyString} @@ -113,7 +124,9 @@ export function DashboardEmptyScreen() { goToLens()}> - {emptyScreenStrings.getCreateVisualizationButtonTitle()} + {i18n.translate('dashboard.emptyScreen.createVisualization', { + defaultMessage: 'Create visualization', + })} @@ -122,7 +135,9 @@ export function DashboardEmptyScreen() { iconType="folderOpen" onClick={() => addFromLibrary(dashboardApi)} > - {emptyScreenStrings.getAddFromLibraryButtonTitle()} + {i18n.translate('dashboard.emptyScreen.addFromLibrary', { + defaultMessage: 'Add from library', + })} @@ -131,7 +146,9 @@ export function DashboardEmptyScreen() { if (showWriteControls) { return ( dashboardApi.setViewMode('edit')}> - {emptyScreenStrings.getEditLinkTitle()} + {i18n.translate('dashboard.emptyScreen.editDashboard', { + defaultMessage: 'Edit dashboard', + })} ); } diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/constants.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/constants.ts new file mode 100644 index 0000000000000..84ee86d0b0237 --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/constants.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export const DASHBOARD_GRID_HEIGHT = 20; +export const DASHBOARD_MARGIN_SIZE = 8; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx index f4a109fb14c38..ccd7f8aa0fac9 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx @@ -15,13 +15,10 @@ import { GridLayout, type GridLayoutData } from '@kbn/grid-layout'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { DashboardPanelState } from '../../../../common'; +import { DASHBOARD_GRID_COLUMN_COUNT } from '../../../../common/content_management/constants'; import { arePanelLayoutsEqual } from '../../../dashboard_api/are_panel_layouts_equal'; import { useDashboardApi } from '../../../dashboard_api/use_dashboard_api'; -import { - DASHBOARD_GRID_COLUMN_COUNT, - DASHBOARD_GRID_HEIGHT, - DASHBOARD_MARGIN_SIZE, -} from '../../../dashboard_constants'; +import { DASHBOARD_GRID_HEIGHT, DASHBOARD_MARGIN_SIZE } from './constants'; import { DashboardGridItem } from './dashboard_grid_item'; export const DashboardGrid = ({ dashboardContainer }: { dashboardContainer?: HTMLElement }) => { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx index dd111bc9f6fc2..e1d50a8d6c1d7 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx @@ -15,7 +15,7 @@ import { css } from '@emotion/react'; import { ReactEmbeddableRenderer } from '@kbn/embeddable-plugin/public'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; -import { DASHBOARD_MARGIN_SIZE } from '../../../dashboard_constants'; +import { DASHBOARD_MARGIN_SIZE } from './constants'; import { useDashboardInternalApi } from '../../../dashboard_api/use_dashboard_internal_api'; import { DashboardPanelState } from '../../../../common'; import { useDashboardApi } from '../../../dashboard_api/use_dashboard_api'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx index 9636a9a09bdf6..dbc90cd2c58ed 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx @@ -97,7 +97,6 @@ export const DashboardViewport = ({ dashboardContainer }: { dashboardContainer?:
{viewMode !== 'print' ? ( diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts index edccfd7fb2804..4f93ff058f7dd 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts @@ -13,9 +13,9 @@ import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { PresentationContainer } from '@kbn/presentation-containers'; import { PublishesPhaseEvents, apiPublishesPhaseEvents } from '@kbn/presentation-publishing'; -import { DASHBOARD_LOADED_EVENT } from '../../../../dashboard_constants'; import { coreServices } from '../../../../services/kibana_services'; import { DashboardLoadType } from '../../../types'; +import { DASHBOARD_LOADED_EVENT } from '../../../../utils/telemetry_constants'; export interface PerformanceState { firstLoad: boolean; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/index.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/index.ts deleted file mode 100644 index 02b84b619aaf9..0000000000000 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { LATEST_VERSION } from '../../common/content_management'; -import { convertNumberToDashboardVersion } from '../services/dashboard_content_management_service/lib/dashboard_versioning'; - -export const DASHBOARD_CONTAINER_TYPE = 'dashboard'; - -export const LATEST_DASHBOARD_CONTAINER_VERSION = convertNumberToDashboardVersion(LATEST_VERSION); - -export { LazyDashboardRenderer } from './external_api/lazy_dashboard_renderer'; -export type { DashboardLocatorParams } from './types'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/index.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/index.ts index 3706aefca3512..36e9c75369bbb 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/index.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/index.ts @@ -7,8 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export { placeClonePanel } from './place_clone_panel_strategy'; - export { registerDashboardPanelPlacementSetting } from './panel_placement_registry'; export type { GetPanelPlacementSettings } from './types'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/panel_placement_registry.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/panel_placement_registry.ts index db13f6d1aac69..a1e345beae87b 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/panel_placement_registry.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/panel_placement_registry.ts @@ -7,8 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { i18n } from '@kbn/i18n'; import { GetPanelPlacementSettings } from './types'; -import { panelPlacementStrings } from '../_dashboard_container_strings'; const registry = new Map>(); @@ -17,7 +17,12 @@ export const registerDashboardPanelPlacementSetting = ) => { if (registry.has(embeddableType)) { - throw new Error(panelPlacementStrings.getPanelPlacementSettingsExistsError(embeddableType)); + throw new Error( + i18n.translate('dashboard.panelPlacement.panelPlacementSettingsExistsError', { + defaultMessage: 'Panel placement settings for embeddable type {panelType} already exists', + values: { panelType: embeddableType }, + }) + ); } registry.set(embeddableType, getPanelPlacementSettings as GetPanelPlacementSettings); }; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_clone_panel_strategy.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_clone_panel_strategy.ts index bdf5a39df34b8..e11fa1d175925 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_clone_panel_strategy.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_clone_panel_strategy.ts @@ -13,7 +13,7 @@ import { PanelNotFoundError } from '@kbn/embeddable-plugin/public'; import { DashboardPanelState } from '../../../common'; import type { GridData } from '../../../server/content_management'; import { PanelPlacementProps, PanelPlacementReturn } from './types'; -import { DASHBOARD_GRID_COLUMN_COUNT } from '../../dashboard_constants'; +import { DASHBOARD_GRID_COLUMN_COUNT } from '../../../common/content_management'; interface IplacementDirection { grid: Omit; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_new_panel_strategies.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_new_panel_strategies.ts index a6c0aaba43467..ee912f003a1d5 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_new_panel_strategies.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/place_new_panel_strategies.ts @@ -8,8 +8,9 @@ */ import { cloneDeep } from 'lodash'; -import { DASHBOARD_GRID_COLUMN_COUNT, PanelPlacementStrategy } from '../../dashboard_constants'; -import { panelPlacementStrings } from '../_dashboard_container_strings'; +import { i18n } from '@kbn/i18n'; +import { DASHBOARD_GRID_COLUMN_COUNT } from '../../../common/content_management'; +import { PanelPlacementStrategy } from '../../plugin_constants'; import { PanelPlacementProps, PanelPlacementReturn } from './types'; export const runPanelPlacementStrategy = ( @@ -100,6 +101,11 @@ export const runPanelPlacementStrategy = ( otherPanels: currentPanels, }; default: - throw new Error(panelPlacementStrings.getUnknownStrategyError(strategy)); + throw new Error( + i18n.translate('dashboard.panelPlacement.unknownStrategyError', { + defaultMessage: 'Unknown panel placement strategy: {strategy}', + values: { strategy }, + }) + ); } }; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/types.ts b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/types.ts index 93f9d2d7fc78e..67f42261c75a1 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/types.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_container/panel_placement/types.ts @@ -10,7 +10,7 @@ import { MaybePromise } from '@kbn/utility-types'; import { DashboardPanelState } from '../../../common'; import type { GridData } from '../../../server/content_management'; -import { PanelPlacementStrategy } from '../../dashboard_constants'; +import { PanelPlacementStrategy } from '../../plugin_constants'; export interface PanelPlacementSettings { strategy?: PanelPlacementStrategy; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_listing/dashboard_listing.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_listing/dashboard_listing.tsx index b50f977672675..dbbca1c9237d1 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_listing/dashboard_listing.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_listing/dashboard_listing.tsx @@ -15,7 +15,8 @@ import { TableListViewKibanaProvider } from '@kbn/content-management-table-list- import { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; -import { DASHBOARD_APP_ID, DASHBOARD_CONTENT_ID } from '../dashboard_constants'; +import { DASHBOARD_APP_ID } from '../plugin_constants'; +import { DASHBOARD_CONTENT_ID } from '../utils/telemetry_constants'; import { coreServices, savedObjectsTaggingService, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx index 23d29898e49c2..d7b72263bb93f 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx @@ -21,7 +21,7 @@ import { DASHBOARD_CONTENT_ID, SAVED_OBJECT_DELETE_TIME, SAVED_OBJECT_LOADED_TIME, -} from '../../dashboard_constants'; +} from '../../utils/telemetry_constants'; import { getDashboardBackupService } from '../../services/dashboard_backup_service'; import { getDashboardContentManagementService } from '../../services/dashboard_content_management_service'; import { getDashboardRecentlyAccessedService } from '../../services/dashboard_recently_accessed_service'; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx index 0511c13f9032d..71f28d94fe2d3 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx @@ -39,7 +39,7 @@ import { useDashboardMountContext } from '../dashboard_app/hooks/dashboard_mount import { DashboardEditingToolbar } from '../dashboard_app/top_nav/dashboard_editing_toolbar'; import { useDashboardMenuItems } from '../dashboard_app/top_nav/use_dashboard_menu_items'; import { DashboardEmbedSettings } from '../dashboard_app/types'; -import { LEGACY_DASHBOARD_APP_ID, getFullEditPath } from '../dashboard_constants'; +import { LEGACY_DASHBOARD_APP_ID } from '../plugin_constants'; import { openSettingsFlyout } from '../dashboard_container/embeddable/api'; import { DashboardRedirect } from '../dashboard_container/types'; import { SaveDashboardReturn } from '../services/dashboard_content_management_service/types'; @@ -52,6 +52,7 @@ import { } from '../services/kibana_services'; import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; import './_dashboard_top_nav.scss'; +import { getFullEditPath } from '../utils/urls'; export interface InternalDashboardTopNavProps { customLeadingBreadCrumbs?: EuiBreadcrumb[]; diff --git a/src/platform/plugins/shared/dashboard/public/index.ts b/src/platform/plugins/shared/dashboard/public/index.ts index 458d1cc35ddde..c04fba87a851d 100644 --- a/src/platform/plugins/shared/dashboard/public/index.ts +++ b/src/platform/plugins/shared/dashboard/public/index.ts @@ -11,18 +11,15 @@ import { PluginInitializerContext } from '@kbn/core/public'; import { DashboardPlugin } from './plugin'; export { - createDashboardEditUrl, DASHBOARD_APP_ID, LEGACY_DASHBOARD_APP_ID, - DASHBOARD_GRID_COLUMN_COUNT, PanelPlacementStrategy, -} from './dashboard_constants'; +} from './plugin_constants'; +export { DASHBOARD_GRID_COLUMN_COUNT } from '../common/content_management'; export type { DashboardApi, DashboardCreationOptions } from './dashboard_api/types'; -export { - LazyDashboardRenderer as DashboardRenderer, - DASHBOARD_CONTAINER_TYPE, - type DashboardLocatorParams, -} from './dashboard_container'; +export { DASHBOARD_API_TYPE } from './dashboard_api/types'; +export { LazyDashboardRenderer as DashboardRenderer } from './dashboard_container/external_api/lazy_dashboard_renderer'; +export type { DashboardLocatorParams } from './dashboard_container/types'; export type { DashboardSetup, DashboardStart, DashboardFeatureFlagConfig } from './plugin'; export { DashboardListingTable } from './dashboard_listing'; diff --git a/src/platform/plugins/shared/dashboard/public/plugin.tsx b/src/platform/plugins/shared/dashboard/public/plugin.tsx index c8b2244d6865b..2755c443ca083 100644 --- a/src/platform/plugins/shared/dashboard/public/plugin.tsx +++ b/src/platform/plugins/shared/dashboard/public/plugin.tsx @@ -72,14 +72,14 @@ import { LANDING_PAGE_PATH, LEGACY_DASHBOARD_APP_ID, SEARCH_SESSION_ID, -} from './dashboard_constants'; +} from './plugin_constants'; import { GetPanelPlacementSettings, registerDashboardPanelPlacementSetting, } from './dashboard_container/panel_placement'; import type { FindDashboardsService } from './services/dashboard_content_management_service/types'; import { setKibanaServices, untilPluginStartServicesReady } from './services/kibana_services'; -import { buildAllDashboardActions } from './dashboard_actions'; +import { registerActions } from './dashboard_actions/register_actions'; export interface DashboardFeatureFlagConfig { allowByValueEmbeddables: boolean; @@ -127,10 +127,20 @@ export interface DashboardStartDependencies { } export interface DashboardSetup { + /** + * @deprecated + * + * Use `shareStartService.url.locators.get(DASHBOARD_APP_LOCATOR)` instead. + */ locator?: DashboardAppLocator; } export interface DashboardStart { + /** + * @deprecated + * + * Use `shareStartService.url.locators.get(DASHBOARD_APP_LOCATOR)` instead. + */ locator?: DashboardAppLocator; dashboardFeatureFlagConfig: DashboardFeatureFlagConfig; findDashboardsService: () => Promise; @@ -327,7 +337,7 @@ export class DashboardPlugin setKibanaServices(core, plugins); untilPluginStartServicesReady().then(() => { - buildAllDashboardActions({ + registerActions({ plugins, allowByValueEmbeddables: this.dashboardFeatureFlagConfig?.allowByValueEmbeddables, }); diff --git a/src/platform/plugins/shared/dashboard/public/plugin_constants.ts b/src/platform/plugins/shared/dashboard/public/plugin_constants.ts new file mode 100644 index 0000000000000..935bfef027c99 --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/plugin_constants.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export const LANDING_PAGE_PATH = '/list'; + +export const DASHBOARD_APP_ID = 'dashboards'; +export const LEGACY_DASHBOARD_APP_ID = 'dashboard'; +export const SEARCH_SESSION_ID = 'searchSessionId'; + +export enum PanelPlacementStrategy { + /** Place on the very top of the Dashboard, add the height of this panel to all other panels. */ + placeAtTop = 'placeAtTop', + /** Look for the smallest y and x value where the default panel will fit. */ + findTopLeftMostOpenSpace = 'findTopLeftMostOpenSpace', +} diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_backup_service.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_backup_service.ts index eab90df27b6a7..30930e4970be2 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_backup_service.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_backup_service.ts @@ -10,15 +10,15 @@ import { isEqual } from 'lodash'; import { firstValueFrom } from 'rxjs'; +import { i18n } from '@kbn/i18n'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { set } from '@kbn/safer-lodash-set'; import { ViewMode } from '@kbn/presentation-publishing'; -import { backupServiceStrings } from '../dashboard_container/_dashboard_container_strings'; import { UnsavedPanelState } from '../dashboard_container/types'; import { coreServices, spacesService } from './kibana_services'; import { DashboardState } from '../dashboard_api/types'; -import { DEFAULT_DASHBOARD_INPUT } from '../dashboard_constants'; +import { DEFAULT_DASHBOARD_INPUT } from '../dashboard_api/default_dashboard_input'; export const DASHBOARD_PANELS_UNSAVED_ID = 'unsavedDashboard'; export const PANELS_CONTROL_GROUP_KEY = 'controlGroup'; @@ -28,6 +28,12 @@ const DASHBOARD_VIEWMODE_LOCAL_KEY = 'dashboardViewMode'; // this key is named `panels` for BWC reasons, but actually contains the entire dashboard state const DASHBOARD_STATE_SESSION_KEY = 'dashboardStateManagerPanels'; +const getPanelsGetError = (message: string) => + i18n.translate('dashboard.panelStorageError.getError', { + defaultMessage: 'Error encountered while fetching unsaved changes: {message}', + values: { message }, + }); + interface DashboardBackupServiceType { clearState: (id?: string) => void; getState: (id: string | undefined) => @@ -75,7 +81,10 @@ class DashboardBackupService implements DashboardBackupServiceType { this.localStorage.set(DASHBOARD_VIEWMODE_LOCAL_KEY, viewMode); } catch (e) { coreServices.notifications.toasts.addDanger({ - title: backupServiceStrings.viewModeStorageError(e.message), + title: i18n.translate('dashboard.viewmodeBackup.error', { + defaultMessage: 'Error encountered while backing up view mode: {message}', + values: { message: e.message }, + }), 'data-test-subj': 'dashboardViewmodeBackupFailure', }); } @@ -102,7 +111,10 @@ class DashboardBackupService implements DashboardBackupServiceType { } } catch (e) { coreServices.notifications.toasts.addDanger({ - title: backupServiceStrings.getPanelsClearError(e.message), + title: i18n.translate('dashboard.panelStorageError.clearError', { + defaultMessage: 'Error encountered while clearing unsaved changes: {message}', + values: { message: e.message }, + }), 'data-test-subj': 'dashboardPanelsClearFailure', }); } @@ -120,7 +132,7 @@ class DashboardBackupService implements DashboardBackupServiceType { return { dashboardState, panels }; } catch (e) { coreServices.notifications.toasts.addDanger({ - title: backupServiceStrings.getPanelsGetError(e.message), + title: getPanelsGetError(e.message), 'data-test-subj': 'dashboardPanelsGetFailure', }); } @@ -141,7 +153,10 @@ class DashboardBackupService implements DashboardBackupServiceType { this.sessionStorage.set(DASHBOARD_PANELS_SESSION_KEY, panelsStorage, true); } catch (e) { coreServices.notifications.toasts.addDanger({ - title: backupServiceStrings.getPanelsSetError(e.message), + title: i18n.translate('dashboard.panelStorageError.setError', { + defaultMessage: 'Error encountered while setting unsaved changes: {message}', + values: { message: e.message }, + }), 'data-test-subj': 'dashboardPanelsSetFailure', }); } @@ -181,7 +196,7 @@ class DashboardBackupService implements DashboardBackupServiceType { return this.oldDashboardsWithUnsavedChanges; } catch (e) { coreServices.notifications.toasts.addDanger({ - title: backupServiceStrings.getPanelsGetError(e.message), + title: getPanelsGetError(e.message), 'data-test-subj': 'dashboardPanelsGetFailure', }); return []; diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/dashboard_content_management_cache.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/dashboard_content_management_cache.ts index e72e3f23fdaba..4e2bb79d1659a 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/dashboard_content_management_cache.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/dashboard_content_management_cache.ts @@ -9,7 +9,9 @@ import LRUCache from 'lru-cache'; import type { DashboardGetOut } from '../../../server/content_management'; -import { DASHBOARD_CACHE_SIZE, DASHBOARD_CACHE_TTL } from '../../dashboard_constants'; + +const DASHBOARD_CACHE_SIZE = 20; // only store a max of 20 dashboards +const DASHBOARD_CACHE_TTL = 1000 * 60 * 5; // time to live = 5 minutes export class DashboardContentManagementCache { private cache: LRUCache; diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.ts index 2865663dec3c0..0da2d3e713a84 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.ts @@ -8,7 +8,7 @@ */ import type { DashboardSearchIn, DashboardSearchOut } from '../../../../server/content_management'; -import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; +import { DASHBOARD_CONTENT_ID } from '../../../utils/telemetry_constants'; import { extractTitleAndCount } from '../../../dashboard_container/embeddable/api/lib/extract_title_and_count'; import { contentManagementService } from '../../kibana_services'; diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/delete_dashboards.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/delete_dashboards.ts index 976a5579b1988..7a7b97461c8cb 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/delete_dashboards.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/delete_dashboards.ts @@ -8,7 +8,7 @@ */ import type { DeleteIn, DeleteResult } from '@kbn/content-management-plugin/common'; -import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; +import { DASHBOARD_CONTENT_ID } from '../../../utils/telemetry_constants'; import { getDashboardContentManagementCache } from '..'; import { contentManagementService } from '../../kibana_services'; diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts index 4afdefb8d13e1..2da4b6a93efbf 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts @@ -19,7 +19,7 @@ import type { DashboardSearchOptions, } from '../../../../server/content_management'; import { getDashboardContentManagementCache } from '..'; -import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; +import { DASHBOARD_CONTENT_ID } from '../../../utils/telemetry_constants'; import { contentManagementService } from '../../kibana_services'; export interface SearchDashboardsArgs { diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.ts index f0fe47b54ba90..dd8b2511e19b5 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.ts @@ -18,7 +18,8 @@ import { cleanFiltersForSerialize } from '../../../utils/clean_filters_for_seria import { getDashboardContentManagementCache } from '..'; import { convertPanelsArrayToPanelMap, injectReferences } from '../../../../common'; import type { DashboardGetIn, DashboardGetOut } from '../../../../server/content_management'; -import { DASHBOARD_CONTENT_ID, DEFAULT_DASHBOARD_INPUT } from '../../../dashboard_constants'; +import { DASHBOARD_CONTENT_ID } from '../../../utils/telemetry_constants'; +import { DEFAULT_DASHBOARD_INPUT } from '../../../dashboard_api/default_dashboard_input'; import { contentManagementService, dataService, diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.ts index 5c14732ed939b..c7ef2e661c147 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.ts @@ -7,6 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { i18n } from '@kbn/i18n'; import { getDashboardContentManagementCache } from '..'; import type { DashboardCreateIn, @@ -14,8 +15,7 @@ import type { DashboardUpdateIn, DashboardUpdateOut, } from '../../../../server/content_management'; -import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; -import { dashboardSaveToastStrings } from '../../../dashboard_container/_dashboard_container_strings'; +import { DASHBOARD_CONTENT_ID } from '../../../utils/telemetry_constants'; import { getDashboardBackupService } from '../../dashboard_backup_service'; import { contentManagementService, coreServices } from '../../kibana_services'; import { SaveDashboardProps, SaveDashboardReturn } from '../types'; @@ -67,7 +67,10 @@ export const saveDashboardState = async ({ if (newId) { coreServices.notifications.toasts.addSuccess({ - title: dashboardSaveToastStrings.getSuccessString(dashboardState.title), + title: i18n.translate('dashboard.dashboardWasSavedSuccessMessage', { + defaultMessage: `Dashboard ''{title}'' was saved`, + values: { title: dashboardState.title }, + }), className: 'eui-textBreakWord', 'data-test-subj': 'saveDashboardSuccess', }); @@ -85,7 +88,13 @@ export const saveDashboardState = async ({ return { id: newId, references }; } catch (error) { coreServices.notifications.toasts.addDanger({ - title: dashboardSaveToastStrings.getFailureString(dashboardState.title, error.message), + title: i18n.translate('dashboard.dashboardWasNotSavedDangerMessage', { + defaultMessage: `Dashboard ''{title}'' was not saved. Error: {errorMessage}`, + values: { + title: dashboardState.title, + errorMessage: error.message, + }, + }), 'data-test-subj': 'saveDashboardFailure', }); return { error }; diff --git a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/update_dashboard_meta.ts b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/update_dashboard_meta.ts index 60f61b64caeec..87322d7f6b619 100644 --- a/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/update_dashboard_meta.ts +++ b/src/platform/plugins/shared/dashboard/public/services/dashboard_content_management_service/lib/update_dashboard_meta.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; +import { DASHBOARD_CONTENT_ID } from '../../../utils/telemetry_constants'; import type { DashboardAttributes, DashboardUpdateIn, diff --git a/src/platform/plugins/shared/dashboard/public/utils/telemetry_constants.ts b/src/platform/plugins/shared/dashboard/public/utils/telemetry_constants.ts new file mode 100644 index 0000000000000..d0c658fae03cf --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/utils/telemetry_constants.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export const DASHBOARD_LOADED_EVENT = 'dashboard_loaded'; +export const SAVED_OBJECT_LOADED_TIME = 'saved_object_loaded_time'; +export const SAVED_OBJECT_DELETE_TIME = 'saved_object_delete_time'; +export const SAVED_OBJECT_POST_TIME = 'saved_object_post_time'; +export const DASHBOARD_UI_METRIC_ID = 'dashboard'; + +export { CONTENT_ID as DASHBOARD_CONTENT_ID } from '../../common/content_management/constants'; diff --git a/src/platform/plugins/shared/dashboard/public/utils/urls.ts b/src/platform/plugins/shared/dashboard/public/utils/urls.ts new file mode 100644 index 0000000000000..4e78946ee64ec --- /dev/null +++ b/src/platform/plugins/shared/dashboard/public/utils/urls.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { LANDING_PAGE_PATH } from '../plugin_constants'; + +export const DASHBOARD_STATE_STORAGE_KEY = '_a'; +export const GLOBAL_STATE_STORAGE_KEY = '_g'; +export const CREATE_NEW_DASHBOARD_URL = '/create'; +export const VIEW_DASHBOARD_URL = '/view'; +export const PRINT_DASHBOARD_URL = '/print'; + +export const getFullPath = (aliasId?: string, id?: string) => + `/app/dashboards#${createDashboardEditUrl(aliasId || id)}`; + +export const getFullEditPath = (id?: string, editMode?: boolean) => { + return `/app/dashboards#${createDashboardEditUrl(id, editMode)}`; +}; + +export function createDashboardEditUrl(id?: string, editMode?: boolean) { + if (!id) { + return `${CREATE_NEW_DASHBOARD_URL}`; + } + const edit = editMode ? `?${DASHBOARD_STATE_STORAGE_KEY}=(viewMode:edit)` : ''; + return `${VIEW_DASHBOARD_URL}/${id}${edit}`; +} + +export function createDashboardListingFilterUrl(filter: string | undefined) { + return filter ? `${LANDING_PAGE_PATH}?filter="${filter}"` : LANDING_PAGE_PATH; +} diff --git a/src/platform/plugins/shared/data/public/query/timefilter/types.ts b/src/platform/plugins/shared/data/public/query/timefilter/types.ts index f07b01abfe2ac..a28609cfc5891 100644 --- a/src/platform/plugins/shared/data/public/query/timefilter/types.ts +++ b/src/platform/plugins/shared/data/public/query/timefilter/types.ts @@ -22,8 +22,8 @@ export interface TimefilterConfig { export type InputTimeRange = | TimeRange | { - from: Moment; - to: Moment; + from: Moment | string; + to: Moment | string; }; export type { TimeRangeBounds } from '../../../common'; diff --git a/src/platform/plugins/shared/data/server/config.ts b/src/platform/plugins/shared/data/server/config.ts index 71460d6a4c293..2df10db015671 100644 --- a/src/platform/plugins/shared/data/server/config.ts +++ b/src/platform/plugins/shared/data/server/config.ts @@ -13,7 +13,7 @@ export const searchSessionsConfigSchema = schema.object({ /** * Turns the feature on \ off (incl. removing indicator and management screens) */ - enabled: schema.boolean({ defaultValue: true }), + enabled: schema.boolean({ defaultValue: false }), /** * notTouchedTimeout controls how long user can save a session after all searches completed. diff --git a/src/platform/plugins/shared/discover/public/application/main/state_management/utils/build_state_subscribe.ts b/src/platform/plugins/shared/discover/public/application/main/state_management/utils/build_state_subscribe.ts index f809dd2fe3ff4..182ca600b111f 100644 --- a/src/platform/plugins/shared/discover/public/application/main/state_management/utils/build_state_subscribe.ts +++ b/src/platform/plugins/shared/discover/public/application/main/state_management/utils/build_state_subscribe.ts @@ -85,10 +85,9 @@ export const buildStateSubscribe = } } - const { hideChart, interval, breakdownField, sampleSize, sort, dataSource } = prevState; + const { interval, breakdownField, sampleSize, sort, dataSource } = prevState; // Cast to boolean to avoid false positives when comparing // undefined and false, which would trigger a refetch - const chartDisplayChanged = Boolean(nextState.hideChart) !== Boolean(hideChart); const chartIntervalChanged = nextState.interval !== interval && !isEsqlMode; const breakdownFieldChanged = nextState.breakdownField !== breakdownField; const sampleSizeChanged = nextState.sampleSize !== sampleSize; @@ -137,7 +136,6 @@ export const buildStateSubscribe = } if ( - chartDisplayChanged || chartIntervalChanged || breakdownFieldChanged || sampleSizeChanged || @@ -146,7 +144,6 @@ export const buildStateSubscribe = queryChanged ) { const logData = { - chartDisplayChanged: logEntry(chartDisplayChanged, hideChart, nextState.hideChart), chartIntervalChanged: logEntry(chartIntervalChanged, interval, nextState.interval), breakdownFieldChanged: logEntry( breakdownFieldChanged, diff --git a/src/platform/plugins/shared/telemetry/README.md b/src/platform/plugins/shared/telemetry/README.md index 6b57eeda9dc80..b77051d14b963 100644 --- a/src/platform/plugins/shared/telemetry/README.md +++ b/src/platform/plugins/shared/telemetry/README.md @@ -65,3 +65,7 @@ class MyPlugin { } } ``` + +### Local EBT shipper + +When developing any EBT events, sometimes, developers are not sure if their event will be as useful as they think. Setting the dev-only configuration `telemetry.localShipper: true`, all the EBT events will be indexed in the local ES under the indices `ebt-kibana-browser` and `ebt-kibana-server`. diff --git a/src/platform/plugins/shared/telemetry/common/local_shipper.ts b/src/platform/plugins/shared/telemetry/common/local_shipper.ts new file mode 100644 index 0000000000000..bbfd44ca81a5c --- /dev/null +++ b/src/platform/plugins/shared/telemetry/common/local_shipper.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +/** + * The telemetry local EBT indices. + */ +export const TELEMETRY_LOCAL_EBT_INDICES = { + BROWSER: 'ebt-kibana-browser', + SERVER: 'ebt-kibana-server', +}; diff --git a/src/platform/plugins/shared/telemetry/public/local_shipper/index.ts b/src/platform/plugins/shared/telemetry/public/local_shipper/index.ts new file mode 100644 index 0000000000000..7c8748649b199 --- /dev/null +++ b/src/platform/plugins/shared/telemetry/public/local_shipper/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { initializeLocalShipper } from './initialize_local_shipper'; diff --git a/src/platform/plugins/shared/telemetry/public/local_shipper/initialize_local_shipper.ts b/src/platform/plugins/shared/telemetry/public/local_shipper/initialize_local_shipper.ts new file mode 100644 index 0000000000000..9695157d26b99 --- /dev/null +++ b/src/platform/plugins/shared/telemetry/public/local_shipper/initialize_local_shipper.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { CoreSetup } from '@kbn/core/public'; +import { LocalEBTShipper } from './local_ebt_shipper'; + +export function initializeLocalShipper({ analytics, getStartServices }: CoreSetup) { + analytics.registerShipper(LocalEBTShipper, { + getHttpStart: () => getStartServices().then(([{ http }]) => http), + }); +} diff --git a/src/platform/plugins/shared/telemetry/public/local_shipper/local_ebt_shipper.ts b/src/platform/plugins/shared/telemetry/public/local_shipper/local_ebt_shipper.ts new file mode 100644 index 0000000000000..f3e587155070d --- /dev/null +++ b/src/platform/plugins/shared/telemetry/public/local_shipper/local_ebt_shipper.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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { AnalyticsClientInitContext, Event, IShipper } from '@kbn/core-analytics-browser'; +import type { HttpStart } from '@kbn/core-http-browser'; + +export interface LocalShipperConfig { + getHttpStart: () => Promise; +} + +export class LocalEBTShipper implements IShipper { + public static shipperName = 'local_ebt_shipper_browser'; + constructor( + private readonly config: LocalShipperConfig, + private readonly initContext: AnalyticsClientInitContext + ) {} + + public reportEvents = (events: Event[]) => { + this.config + .getHttpStart() + .then((http) => + http.post('/internal/telemetry/ebt_local_shipper', { + body: JSON.stringify({ events }), + version: '1', + }) + ) + .catch((err) => { + this.initContext.logger.error(err); + }); + }; + + public optIn = () => { + // This shipper doesn't need to update anything internal on optIn changes + }; + public flush = async () => { + // This shipper doesn't hold any queues. Nothing to flush in this method. + }; + public shutdown = () => { + // This shipper doesn't hold any internal queues or instantiated properties. No need to clean up anything in this method. + }; +} diff --git a/src/platform/plugins/shared/telemetry/public/mocks.ts b/src/platform/plugins/shared/telemetry/public/mocks.ts index ad7926cc4211f..1168c3d61fd6f 100644 --- a/src/platform/plugins/shared/telemetry/public/mocks.ts +++ b/src/platform/plugins/shared/telemetry/public/mocks.ts @@ -46,6 +46,7 @@ export function mockTelemetryService({ telemetryNotifyUserAboutOptInDefault: true, userCanChangeSettings: true, labels: {}, + localShipper: false, ...configOverride, }; diff --git a/src/platform/plugins/shared/telemetry/public/plugin.ts b/src/platform/plugins/shared/telemetry/public/plugin.ts index c510a73acea9e..ffb02ccb1d555 100644 --- a/src/platform/plugins/shared/telemetry/public/plugin.ts +++ b/src/platform/plugins/shared/telemetry/public/plugin.ts @@ -123,6 +123,8 @@ export interface TelemetryPluginConfig { labels: Record; /** Whether to use Serverless-specific channels when reporting Snapshot Telemetry */ appendServerlessChannelsSuffix: boolean; + /** Should use the local EBT shipper to persist events in the local ES */ + localShipper: boolean; } function getTelemetryConstants(docLinks: DocLinksStart): TelemetryConstants { @@ -155,9 +157,10 @@ export class TelemetryPlugin } public setup( - { analytics, http, notifications, getStartServices }: CoreSetup, + coreSetup: CoreSetup, { screenshotMode, home }: TelemetryPluginSetupDependencies ): TelemetryPluginSetup { + const { analytics, http, notifications, getStartServices } = coreSetup; const config = this.config; const currentKibanaVersion = this.currentKibanaVersion; this.telemetryService = new TelemetryService({ @@ -202,6 +205,13 @@ export class TelemetryPlugin buildShipperUrl: createBuildShipperUrl(sendTo), }); + if (config.localShipper) { + // Make it async to exclude the shipper from the initial page load since this config will likely be false most of the time. + import('./local_shipper') + .then(({ initializeLocalShipper }) => initializeLocalShipper(coreSetup)) + .catch(() => {}); + } + this.telemetrySender = new TelemetrySender(this.telemetryService, async () => { await this.refreshConfig(http); analytics.optIn({ diff --git a/src/platform/plugins/shared/telemetry/schema/oss_platform.json b/src/platform/plugins/shared/telemetry/schema/oss_platform.json index f42fca117a966..efcc205a7eb37 100644 --- a/src/platform/plugins/shared/telemetry/schema/oss_platform.json +++ b/src/platform/plugins/shared/telemetry/schema/oss_platform.json @@ -2360,6 +2360,268 @@ } } }, + "elasticsearchIndices": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "Always `main`" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 90 days" + } + }, + "views": { + "type": "array", + "items": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "The application view being tracked" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application sub view since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application sub view is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 90 days" + } + } + } + } + } + } + }, + "elasticsearchStart": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "Always `main`" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 90 days" + } + }, + "views": { + "type": "array", + "items": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "The application view being tracked" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application sub view since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application sub view is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 90 days" + } + } + } + } + } + } + }, "enterpriseSearchAnalytics": { "properties": { "appId": { diff --git a/src/platform/plugins/shared/telemetry/server/config/config.ts b/src/platform/plugins/shared/telemetry/server/config/config.ts index d4afcb350af12..a263342872945 100644 --- a/src/platform/plugins/shared/telemetry/server/config/config.ts +++ b/src/platform/plugins/shared/telemetry/server/config/config.ts @@ -41,6 +41,14 @@ const configSchema = schema.object({ }), // Used for extra enrichment of telemetry labels: labelsSchema, + // Allows shipping telemetry to a local index in ES + localShipper: schema.conditional( + schema.contextRef('dist'), + schema.literal(false), // Only allow changing it if it's not a distributable release + schema.boolean({ defaultValue: false }), + schema.literal(false), + { defaultValue: false } + ), }); export type TelemetryConfigType = TypeOf; @@ -56,6 +64,7 @@ export const config: PluginConfigDescriptor = { sendUsageTo: true, hidePrivacyStatement: true, labels: true, + localShipper: true, }, dynamicConfig: { labels: true, diff --git a/src/platform/plugins/shared/telemetry/server/local_shipper/index.ts b/src/platform/plugins/shared/telemetry/server/local_shipper/index.ts new file mode 100644 index 0000000000000..7c8748649b199 --- /dev/null +++ b/src/platform/plugins/shared/telemetry/server/local_shipper/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { initializeLocalShipper } from './initialize_local_shipper'; diff --git a/src/platform/plugins/shared/telemetry/server/local_shipper/initialize_local_shipper.ts b/src/platform/plugins/shared/telemetry/server/local_shipper/initialize_local_shipper.ts new file mode 100644 index 0000000000000..02a9007f02f6f --- /dev/null +++ b/src/platform/plugins/shared/telemetry/server/local_shipper/initialize_local_shipper.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { Subject, firstValueFrom } from 'rxjs'; + +import type { CoreSetup, ElasticsearchClient, Logger } from '@kbn/core/server'; +import { schema } from '@kbn/config-schema'; +import { TELEMETRY_LOCAL_EBT_INDICES } from '../../common/local_shipper'; +import { LocalEBTShipper } from './local_ebt_shipper'; +import { registerIndexMappings } from './register_mappings'; + +const esClient$ = new Subject(); + +export function initializeLocalShipper(logger: Logger, { analytics, http }: CoreSetup) { + const getElasticsearchClient = () => firstValueFrom(esClient$); + const elasticsearchClientWithDelay = getElasticsearchClient().then(async (esClient) => { + // Wait 5s after the ES client has been resolved to give time for the indices to be created + await new Promise((resolve) => setTimeout(resolve, 5000)); + return esClient; + }); + const getElasticsearchClientWithDelay = () => elasticsearchClientWithDelay; + + // Using void because it won't reject + void registerIndexMappings(getElasticsearchClient, logger.get('index-setup')); + analytics.registerShipper(LocalEBTShipper, { + getElasticsearchClient: getElasticsearchClientWithDelay, + }); + + registerRoute(http, getElasticsearchClientWithDelay); +} + +function registerRoute( + http: CoreSetup['http'], + getElasticsearchClient: () => Promise +) { + http + .createRouter() + .versioned.post({ + path: '/internal/telemetry/ebt_local_shipper', + access: 'internal', + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: schema.object({ + events: schema.arrayOf(schema.any()), + }), + }, + }, + }, + async (context, request, response) => { + esClient$.next((await context.core).elasticsearch.client.asCurrentUser); // Hack to obtain an ES client with permissions to write to data indices + + const esClient = await getElasticsearchClient(); + + try { + await esClient.bulk({ + index: TELEMETRY_LOCAL_EBT_INDICES.BROWSER, + operations: request.body.events.flatMap((doc) => [{ create: {} }, doc]), + }); + + return response.ok(); + } catch (error) { + return response.customError({ statusCode: 500, body: error }); + } + } + ); +} diff --git a/src/platform/plugins/shared/telemetry/server/local_shipper/local_ebt_shipper.ts b/src/platform/plugins/shared/telemetry/server/local_shipper/local_ebt_shipper.ts new file mode 100644 index 0000000000000..afcb9f4d86a36 --- /dev/null +++ b/src/platform/plugins/shared/telemetry/server/local_shipper/local_ebt_shipper.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { AnalyticsClientInitContext, Event, IShipper } from '@kbn/core-analytics-server'; +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { TELEMETRY_LOCAL_EBT_INDICES } from '../../common/local_shipper'; + +export interface LocalShipperConfig { + getElasticsearchClient: () => Promise; +} + +export class LocalEBTShipper implements IShipper { + public static shipperName = 'local_ebt_shipper_server'; + + constructor( + private readonly config: LocalShipperConfig, + private readonly initContext: AnalyticsClientInitContext + ) {} + + public reportEvents = (events: Event[]) => { + this.config + .getElasticsearchClient() + .then((esClient) => + esClient.bulk({ + index: TELEMETRY_LOCAL_EBT_INDICES.SERVER, + operations: events.flatMap((doc) => [{ create: {} }, doc]), + }) + ) + .catch((err) => { + this.initContext.logger.error(err); + }); + }; + + public optIn = () => { + // This shipper doesn't need to update anything internal on optIn changes + }; + public flush = async () => { + // This shipper doesn't hold any queues. Nothing to flush in this method. + }; + public shutdown = () => { + // This shipper doesn't hold any internal queues or instantiated properties. No need to clean up anything in this method. + }; +} diff --git a/src/platform/plugins/shared/telemetry/server/local_shipper/register_mappings.ts b/src/platform/plugins/shared/telemetry/server/local_shipper/register_mappings.ts new file mode 100644 index 0000000000000..f224ca332fd1d --- /dev/null +++ b/src/platform/plugins/shared/telemetry/server/local_shipper/register_mappings.ts @@ -0,0 +1,181 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { Logger } from '@kbn/logging'; +import type { IndicesPutIndexTemplateIndexTemplateMapping } from '@elastic/elasticsearch/lib/api/types'; +import { TELEMETRY_LOCAL_EBT_INDICES } from '../../common/local_shipper'; + +export async function registerIndexMappings( + getElasticsearchClient: () => Promise, + logger: Logger +) { + try { + const esClient = await getElasticsearchClient(); + + await registerIngestPipeline(getElasticsearchClient); + const indices = Object.entries(MAPPINGS); + + await Promise.all( + indices.map(async ([index, template]) => { + await esClient.indices.putIndexTemplate({ + name: index, + index_patterns: `${index}*`, + template, + }); + }) + ); + } catch (err) { + logger.error(err); + } +} + +async function registerIngestPipeline(getElasticsearchClient: () => Promise) { + const esClient = await getElasticsearchClient(); + await esClient.ingest.putPipeline({ + id: 'ebt-kibana-browser', + processors: [ + { + user_agent: { + target_field: 'context.parsed_user_agent', + field: 'context.user_agent', + ignore_missing: true, + ignore_failure: true, + }, + }, + ], + on_failure: [ + { set: { field: 'original-error', value: '{{ _ingest.on_failure_message }}' } }, + { set: { field: 'original-index', value: '{{ _index }}' } }, + { set: { field: 'original-body', value: '{{ _ingest }}' } }, + { set: { field: '_index', value: 'failed-docs' } }, + ], + }); +} + +const MAPPINGS: Record = { + [TELEMETRY_LOCAL_EBT_INDICES.SERVER]: { + mappings: { + properties: { + timestamp: { type: 'date' }, + event_type: { type: 'keyword' }, + // Using "flattened" for flexibility + properties: { type: 'flattened' }, + context: { + properties: { + cluster_uuid: { type: 'keyword' }, + cluster_name: { type: 'keyword' }, + cluster_version: { type: 'version' }, + cluster_build_flavor: { type: 'keyword' }, + kibana_uuid: { type: 'keyword' }, + pid: { type: 'long' }, + isDev: { type: 'boolean' }, + isDistributable: { type: 'boolean' }, + version: { type: 'version' }, + branch: { type: 'keyword' }, + buildSha: { type: 'keyword' }, + buildNum: { type: 'long' }, + overall_status_level: { type: 'keyword' }, + overall_status_summary: { + type: 'text', + fields: { keyword: { type: 'keyword' } }, + }, + license_id: { type: 'keyword' }, + license_status: { type: 'keyword' }, + license_type: { type: 'keyword' }, + cloudId: { type: 'keyword' }, + organizationId: { type: 'keyword' }, + deploymentId: { type: 'keyword' }, + cloudTrialEndDate: { type: 'date' }, + cloudIsElasticStaffOwned: { type: 'boolean' }, + projectId: { type: 'keyword' }, + projectType: { type: 'keyword' }, + orchestratorTarget: { type: 'keyword' }, + labels: { type: 'flattened' }, + }, + }, + }, + }, + }, + [TELEMETRY_LOCAL_EBT_INDICES.BROWSER]: { + settings: { + default_pipeline: 'ebt-kibana-browser', + }, + mappings: { + properties: { + timestamp: { type: 'date' }, + event_type: { type: 'keyword' }, + // Using "flattened" for flexibility + properties: { type: 'flattened' }, + context: { + properties: { + cluster_uuid: { type: 'keyword' }, + cluster_name: { type: 'keyword' }, + cluster_version: { type: 'version' }, + cluster_build_flavor: { type: 'keyword' }, + isDev: { type: 'boolean' }, + isDistributable: { type: 'boolean' }, + version: { type: 'version' }, + branch: { type: 'keyword' }, + buildSha: { type: 'keyword' }, + buildNum: { type: 'long' }, + session_id: { type: 'keyword' }, + user_agent: { type: 'keyword' }, + parsed_user_agent: { + properties: { + name: { type: 'keyword' }, + original: { type: 'keyword' }, + version: { type: 'keyword' }, + os: { + properties: { + name: { type: 'keyword' }, + version: { type: 'version' }, + full: { type: 'keyword' }, + }, + }, + device: { + properties: { + name: { type: 'keyword' }, + }, + }, + }, + }, + preferred_language: { type: 'keyword' }, + preferred_languages: { type: 'keyword' }, + viewport_width: { type: 'long' }, + viewport_height: { type: 'long' }, + page_title: { type: 'text' }, + page_url: { type: 'keyword' }, + pageName: { type: 'keyword' }, + applicationId: { type: 'keyword' }, + page: { type: 'keyword' }, + entityId: { type: 'keyword' }, + discoverProfiles: { type: 'keyword' }, + cloudId: { type: 'keyword' }, + organizationId: { type: 'keyword' }, + deploymentId: { type: 'keyword' }, + cloudTrialEndDate: { type: 'date' }, + cloudIsElasticStaffOwned: { type: 'boolean' }, + projectId: { type: 'keyword' }, + projectType: { type: 'keyword' }, + orchestratorTarget: { type: 'keyword' }, + license_id: { type: 'keyword' }, + license_status: { type: 'keyword' }, + license_type: { type: 'keyword' }, + spaceSolution: { type: 'keyword' }, + prebuiltRulesPackageVersion: { type: 'keyword' }, + userId: { type: 'keyword' }, + isElasticCloudUser: { type: 'boolean' }, + labels: { type: 'flattened' }, + }, + }, + }, + }, + }, +}; diff --git a/src/platform/plugins/shared/telemetry/server/mocks.ts b/src/platform/plugins/shared/telemetry/server/mocks.ts index 79d583dde5559..fe22e45a343c2 100644 --- a/src/platform/plugins/shared/telemetry/server/mocks.ts +++ b/src/platform/plugins/shared/telemetry/server/mocks.ts @@ -8,6 +8,7 @@ */ import { URL } from 'url'; +import { Observable } from 'rxjs'; import { TelemetryPluginStart, TelemetryPluginSetup } from './plugin'; export type Setup = jest.Mocked; @@ -30,6 +31,7 @@ function createSetupContract(): Setup { function createStartContract(): Start { const startContract: Start = { getIsOptedIn: jest.fn(), + isOptedIn$: new Observable(), }; return startContract; diff --git a/src/platform/plugins/shared/telemetry/server/plugin.test.ts b/src/platform/plugins/shared/telemetry/server/plugin.test.ts index 131711076595b..389e7789770c3 100644 --- a/src/platform/plugins/shared/telemetry/server/plugin.test.ts +++ b/src/platform/plugins/shared/telemetry/server/plugin.test.ts @@ -15,6 +15,7 @@ import { telemetryCollectionManagerPluginMock } from '@kbn/telemetry-collection- import { buildShipperHeaders } from '../common/ebt_v3_endpoint'; import { TelemetryPlugin } from './plugin'; import type { NodeRoles } from '@kbn/core-node-server'; +import { Observable } from 'rxjs'; describe('TelemetryPlugin', () => { describe('setup', () => { @@ -108,11 +109,11 @@ describe('TelemetryPlugin', () => { telemetryCollectionManager: telemetryCollectionManagerPluginMock.createSetupContract(), }); - plugin.start(coreMock.createStart(), { + const returnedStartDependencies = plugin.start(coreMock.createStart(), { telemetryCollectionManager: telemetryCollectionManagerPluginMock.createStartContract(), }); - return { startFetcherMock }; + return { startFetcherMock, returnedStartDependencies }; } afterEach(() => { @@ -128,6 +129,12 @@ describe('TelemetryPlugin', () => { const { startFetcherMock } = createPluginForNodeRole({ ui: false }); expect(startFetcherMock).toHaveBeenCalledTimes(0); }); + + it('exposes isOptedIn$ Observable', () => { + const { returnedStartDependencies } = createPluginForNodeRole({ ui: true }); + expect(returnedStartDependencies).toHaveProperty('isOptedIn$'); + expect(returnedStartDependencies.isOptedIn$).toBeInstanceOf(Observable); + }); }); }); }); diff --git a/src/platform/plugins/shared/telemetry/server/plugin.ts b/src/platform/plugins/shared/telemetry/server/plugin.ts index 465a5b034e7b2..a96d2fa01deb8 100644 --- a/src/platform/plugins/shared/telemetry/server/plugin.ts +++ b/src/platform/plugins/shared/telemetry/server/plugin.ts @@ -21,6 +21,7 @@ import { tap, shareReplay, map, + first, } from 'rxjs'; import { ElasticV3ServerShipper } from '@elastic/ebt/shippers/elastic_v3/server'; @@ -91,9 +92,23 @@ export interface TelemetryPluginStart { * Resolves `false` if the user explicitly opted out of sending usage data to Elastic * or did not choose to opt-in or out -yet- after a minor or major upgrade (only when previously opted-out). * - * @track-adoption + * @deprecated Use {@link TelemetryPluginStart.isOptedIn$ | isOptedIn$} instead. */ getIsOptedIn: () => Promise; + + /** + * An Observable object that can be subscribed to for changes in global telemetry config. + * + * Pushes `true` when sending usage to Elastic is enabled. + * Pushes `false` when the user explicitly opts out of sending usage data to Elastic. + * + * Additionally, pushes the actual value on Kibana startup, except if the (previously opted-out) user + * haven't chosen yet to opt-in or out after a minor or major upgrade. In that case, pushing the new + * value waits until the user decides. + * + * @track-adoption + */ + isOptedIn$: Observable; } export class TelemetryPlugin implements Plugin { @@ -157,9 +172,11 @@ export class TelemetryPlugin implements Plugin { const optInStatusMsg = optedIn ? 'enabled' : 'disabled'; this.logger.info( @@ -219,6 +236,17 @@ export class TelemetryPlugin implements Plugin savedObjects.registerType(opts)); this.registerUsageCollectors(usageCollection); + config$ + .pipe( + filter((cfg) => cfg.localShipper === true), + first(), + map(async () => { + const { initializeLocalShipper } = await import('./local_shipper'); + initializeLocalShipper(this.logger.get('local-shipper'), coreSetup); + }) + ) + .subscribe(); + return { getTelemetryUrl: async () => { const { appendServerlessChannelsSuffix, sendUsageTo } = await firstValueFrom(config$); @@ -256,6 +284,7 @@ export class TelemetryPlugin implements Plugin this.isOptedIn === true, + isOptedIn$: this.isOptedIn$, }; } diff --git a/src/platform/plugins/shared/telemetry/tsconfig.json b/src/platform/plugins/shared/telemetry/tsconfig.json index 79fdafb2f991b..c43f8a55702c9 100644 --- a/src/platform/plugins/shared/telemetry/tsconfig.json +++ b/src/platform/plugins/shared/telemetry/tsconfig.json @@ -36,6 +36,10 @@ "@kbn/core-node-server", "@kbn/security-plugin-types-server", "@kbn/core-user-profile-browser-mocks", + "@kbn/core-analytics-browser", + "@kbn/core-analytics-server", + "@kbn/core-elasticsearch-server", + "@kbn/logging", ], "exclude": [ "target/**/*", diff --git a/src/platform/plugins/shared/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap b/src/platform/plugins/shared/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap index 7f2b847062ce6..b982901360034 100644 --- a/src/platform/plugins/shared/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap +++ b/src/platform/plugins/shared/telemetry_management_section/public/components/__snapshots__/telemetry_management_section.test.tsx.snap @@ -269,9 +269,12 @@ exports[`TelemetryManagementSectionComponent renders null because allowChangingO "appendServerlessChannelsSuffix": false, "banner": true, "labels": Object {}, + "localShipper": false, "optIn": true, "sendUsageFrom": "browser", "sendUsageTo": "staging", + "telemetryNotifyUserAboutOptInDefault": true, + "userCanChangeSettings": true, }, "fetchExample": [Function], "fetchLastReported": [Function], @@ -315,7 +318,6 @@ exports[`TelemetryManagementSectionComponent renders null because allowChangingO }, "isScreenshotMode": false, "notifications": Object { - "showErrorDialog": [MockFunction], "toasts": Object { "add": [MockFunction], "addDanger": [MockFunction], @@ -327,7 +329,7 @@ exports[`TelemetryManagementSectionComponent renders null because allowChangingO "remove": [MockFunction], }, }, - "reportOptInStatus": [Function], + "reportOptInStatus": [MockFunction], "reportOptInStatusChange": false, "setOptIn": [Function], "setUserHasSeenNotice": [Function], diff --git a/src/platform/plugins/shared/telemetry_management_section/public/components/telemetry_management_section.test.tsx b/src/platform/plugins/shared/telemetry_management_section/public/components/telemetry_management_section.test.tsx index be0b919b4c6d1..02c7fc5216e2e 100644 --- a/src/platform/plugins/shared/telemetry_management_section/public/components/telemetry_management_section.test.tsx +++ b/src/platform/plugins/shared/telemetry_management_section/public/components/telemetry_management_section.test.tsx @@ -10,7 +10,7 @@ import React from 'react'; import { mountWithIntl, shallowWithIntl } from '@kbn/test-jest-helpers'; import TelemetryManagementSection from './telemetry_management_section'; -import { TelemetryService } from '@kbn/telemetry-plugin/public/services'; +import { mockTelemetryService } from '@kbn/telemetry-plugin/public/mocks'; import { coreMock } from '@kbn/core/public/mocks'; import { render } from '@testing-library/react'; import type { DocLinksStart } from '@kbn/core/public'; @@ -21,10 +21,9 @@ describe('TelemetryManagementSectionComponent', () => { const docLinks = { legal: { privacyStatement: 'https://some-host/some-url' }, } as unknown as DocLinksStart['links']; - const coreSetup = coreMock.createSetup(); it('renders as expected', () => { - const telemetryService = new TelemetryService({ + const telemetryService = mockTelemetryService({ config: { appendServerlessChannelsSuffix: false, sendUsageTo: 'staging', @@ -37,8 +36,6 @@ describe('TelemetryManagementSectionComponent', () => { isScreenshotMode: false, reportOptInStatusChange: false, currentKibanaVersion: 'mock_kibana_version', - notifications: coreStart.notifications, - http: coreSetup.http, }); expect( @@ -55,7 +52,7 @@ describe('TelemetryManagementSectionComponent', () => { }); it('renders null because query does not match the SEARCH_TERMS', () => { - const telemetryService = new TelemetryService({ + const telemetryService = mockTelemetryService({ config: { appendServerlessChannelsSuffix: false, banner: true, @@ -67,9 +64,7 @@ describe('TelemetryManagementSectionComponent', () => { }, isScreenshotMode: false, reportOptInStatusChange: false, - notifications: coreStart.notifications, currentKibanaVersion: 'mock_kibana_version', - http: coreSetup.http, }); const component = render( @@ -106,7 +101,7 @@ describe('TelemetryManagementSectionComponent', () => { }); it('renders because query matches the SEARCH_TERMS', () => { - const telemetryService = new TelemetryService({ + const telemetryService = mockTelemetryService({ config: { appendServerlessChannelsSuffix: false, banner: true, @@ -118,9 +113,7 @@ describe('TelemetryManagementSectionComponent', () => { }, isScreenshotMode: false, reportOptInStatusChange: false, - notifications: coreStart.notifications, currentKibanaVersion: 'mock_kibana_version', - http: coreSetup.http, }); const component = mountWithIntl( @@ -147,7 +140,7 @@ describe('TelemetryManagementSectionComponent', () => { }); it('renders null because allowChangingOptInStatus is false', () => { - const telemetryService = new TelemetryService({ + const telemetryService = mockTelemetryService({ config: { appendServerlessChannelsSuffix: false, banner: true, @@ -159,9 +152,7 @@ describe('TelemetryManagementSectionComponent', () => { }, isScreenshotMode: false, reportOptInStatusChange: false, - notifications: coreStart.notifications, currentKibanaVersion: 'mock_kibana_version', - http: coreSetup.http, }); const component = mountWithIntl( @@ -182,7 +173,7 @@ describe('TelemetryManagementSectionComponent', () => { }); it('shows the OptInExampleFlyout', () => { - const telemetryService = new TelemetryService({ + const telemetryService = mockTelemetryService({ config: { appendServerlessChannelsSuffix: false, banner: true, @@ -194,9 +185,7 @@ describe('TelemetryManagementSectionComponent', () => { }, isScreenshotMode: false, reportOptInStatusChange: false, - notifications: coreStart.notifications, currentKibanaVersion: 'mock_kibana_version', - http: coreSetup.http, }); const component = mountWithIntl( @@ -222,7 +211,7 @@ describe('TelemetryManagementSectionComponent', () => { }); it('toggles the OptIn button', async () => { - const telemetryService = new TelemetryService({ + const telemetryService = mockTelemetryService({ config: { appendServerlessChannelsSuffix: false, banner: true, @@ -234,9 +223,7 @@ describe('TelemetryManagementSectionComponent', () => { }, isScreenshotMode: false, reportOptInStatusChange: false, - notifications: coreStart.notifications, currentKibanaVersion: 'mock_kibana_version', - http: coreSetup.http, }); const component = mountWithIntl( @@ -269,7 +256,7 @@ describe('TelemetryManagementSectionComponent', () => { }); it('test the wrapper (for coverage purposes)', () => { - const telemetryService = new TelemetryService({ + const telemetryService = mockTelemetryService({ config: { appendServerlessChannelsSuffix: false, banner: true, @@ -281,9 +268,7 @@ describe('TelemetryManagementSectionComponent', () => { }, isScreenshotMode: false, reportOptInStatusChange: false, - notifications: coreStart.notifications, currentKibanaVersion: 'mock_kibana_version', - http: coreSetup.http, }); expect( diff --git a/src/platform/plugins/shared/usage_collection/common/constants.ts b/src/platform/plugins/shared/usage_collection/common/constants.ts index 1638f86a9ab46..f85b1c377225f 100644 --- a/src/platform/plugins/shared/usage_collection/common/constants.ts +++ b/src/platform/plugins/shared/usage_collection/common/constants.ts @@ -10,3 +10,4 @@ export const KIBANA_STATS_TYPE = 'kibana_stats'; export const DEFAULT_MAXIMUM_WAIT_TIME_FOR_ALL_COLLECTORS_IN_S = 1; export const MAIN_APP_DEFAULT_VIEW_ID = 'main'; +export const USAGE_COUNTERS_BACKOFF_DELAY_IN_MS = 500; diff --git a/src/platform/plugins/shared/usage_collection/server/config.ts b/src/platform/plugins/shared/usage_collection/server/config.ts index 2e654717aa089..256e936b31f34 100644 --- a/src/platform/plugins/shared/usage_collection/server/config.ts +++ b/src/platform/plugins/shared/usage_collection/server/config.ts @@ -14,7 +14,7 @@ import { DEFAULT_MAXIMUM_WAIT_TIME_FOR_ALL_COLLECTORS_IN_S } from '../common/con export const configSchema = schema.object({ usageCounters: schema.object({ enabled: schema.boolean({ defaultValue: true }), - retryCount: schema.number({ defaultValue: 1 }), + retryCount: schema.number({ defaultValue: 3 }), bufferDuration: schema.duration({ defaultValue: '5s' }), }), uiCounters: schema.object({ diff --git a/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counter.ts b/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counter.ts index 641f0c46ffebd..460571be1b7a5 100644 --- a/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counter.ts +++ b/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counter.ts @@ -58,7 +58,6 @@ export class UsageCounter implements IUsageCounter { incrementBy = 1, namespace, } = params; - this.counter$.next({ domainId: this.domainId, counterName, diff --git a/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.test.ts b/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.test.ts index 1041cfb5ce36f..9165ab98e5d4d 100644 --- a/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.test.ts +++ b/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.test.ts @@ -25,9 +25,10 @@ const registerUsageCountersRollupsMock = registerUsageCountersRollups as jest.Mo typeof registerUsageCountersRollups >; -const tick = () => { +// optionally advance test timers after a delay +const tickWithDelay = (delay = 1) => { jest.useRealTimers(); - return new Promise((resolve) => setTimeout(resolve, 1)); + return new Promise((resolve) => setTimeout(resolve, delay)); }; describe('UsageCountersService', () => { @@ -188,51 +189,62 @@ describe('UsageCountersService', () => { ] `); }); - - it('retries errors by `retryCount` times before failing to store', async () => { - const usageCountersService = new UsageCountersService({ - logger, - retryCount: 1, - bufferDurationMs, - }); - - const mockRepository = coreStart.savedObjects.createInternalRepository(); - const mockError = new Error('failed.'); - const mockIncrementCounter = jest.fn().mockImplementation((_, key) => { - switch (key) { - case 'test-counter:counterA:count:server:20210409': - throw mockError; - case 'test-counter:counterB:count:server:20210409': - return 'pass'; - default: - throw new Error(`unknown key ${key}`); - } - }); - - mockRepository.incrementCounter = mockIncrementCounter; - - coreStart.savedObjects.createInternalRepository.mockReturnValue(mockRepository); - const { createUsageCounter } = usageCountersService.setup(coreSetup); - jest.useFakeTimers(); - const usageCounter = createUsageCounter('test-counter'); - - usageCountersService.start(coreStart); - usageCounter.incrementCounter({ counterName: 'counterA' }); - usageCounter.incrementCounter({ counterName: 'counterB' }); - jest.runOnlyPendingTimers(); - - // wait for retries to kick in on next scheduler call - await tick(); - // number of incrementCounter calls + number of retries - expect(mockIncrementCounter).toBeCalledTimes(2 + 1); - expect(logger.debug).toHaveBeenNthCalledWith(1, 'Store counters into savedObjects', { - kibana: { - usageCounters: { - results: [mockError, 'pass'], + // requires extended test runtime because of exponential backoff delay for retries + it( + 'retries errors by `retryCount` times before failing to store', + async () => { + const retryConst = 2; + const usageCountersService = new UsageCountersService({ + logger, + retryCount: retryConst, + bufferDurationMs: 50000, + }); + + const mockRepository = coreStart.savedObjects.createInternalRepository(); + const mockError = new Error('failed'); + const mockIncrementCounter = jest.fn().mockImplementation((_, key) => { + switch (key) { + case 'test-counter:counterA:count:server:20210409': + throw mockError; + case 'test-counter:counterB:count:server:20210409': + return 'pass'; + default: + throw new Error(`unknown key ${key}`); + } + }); + + mockRepository.incrementCounter = mockIncrementCounter; + + coreStart.savedObjects.createInternalRepository.mockReturnValue(mockRepository); + const { createUsageCounter } = usageCountersService.setup(coreSetup); + jest.useFakeTimers(); + const usageCounter = createUsageCounter('test-counter'); + + usageCountersService.start(coreStart); + usageCounter.incrementCounter({ counterName: 'counterA' }); + usageCounter.incrementCounter({ counterName: 'counterB' }); + jest.runOnlyPendingTimers(); + + // wait for retries to kick in on next scheduler call + await tickWithDelay(5000); + // number of incrementCounter calls + number of retries + expect(mockIncrementCounter).toBeCalledTimes(2 + retryConst); + // assert counterA increment error warning logs + expect(logger.warn).toHaveBeenNthCalledWith( + 2, + `${mockError}, retrying attempt ${retryConst}` + ); + expect(logger.warn).toHaveBeenNthCalledWith(3, mockError); + expect(logger.debug).toHaveBeenNthCalledWith(1, 'Store counters into savedObjects', { + kibana: { + usageCounters: { + results: [mockError, 'pass'], + }, }, - }, - }); - }); + }); + }, + 10 * 1000 + ); it('buffers counters within `bufferDurationMs` time', async () => { const usageCountersService = new UsageCountersService({ @@ -264,7 +276,7 @@ describe('UsageCountersService', () => { jest.runOnlyPendingTimers(); // wait for debounce to kick in on next scheduler call - await tick(); + await tickWithDelay(); expect(mockIncrementCounter).toBeCalledTimes(2); expect(mockIncrementCounter.mock.results.map(({ value }) => value)).toMatchInlineSnapshot(` Array [ diff --git a/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.ts b/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.ts index d80c5f4d4df9f..f8aeec05f9624 100644 --- a/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.ts +++ b/src/platform/plugins/shared/usage_collection/server/usage_counters/usage_counters_service.ts @@ -33,6 +33,7 @@ import { } from './saved_objects'; import { registerUsageCountersRollups } from './rollups'; import { searchUsageCounters } from './search'; +import { USAGE_COUNTERS_BACKOFF_DELAY_IN_MS } from '../../common/constants'; interface UsageCountersLogMeta extends LogMeta { kibana: { usageCounters: { results: unknown[] } }; @@ -159,6 +160,9 @@ export class UsageCountersService { }; }; + private backoffDelay = (attempt: number) => + Math.pow(2, attempt) * USAGE_COUNTERS_BACKOFF_DELAY_IN_MS; // exponential backoff: 500ms, 1000ms, 2000ms + private storeDate$( counters: UsageCounters.v1.CounterMetric[], soRepository: Pick @@ -166,7 +170,13 @@ export class UsageCountersService { return Rx.forkJoin( counters.map((metric) => Rx.defer(() => storeCounter({ metric, soRepository })).pipe( - Rx.retry(this.retryCount), + Rx.retry({ + count: this.retryCount, + delay: (error, retryIndex) => { + this.logger.warn(`Error: ${error.message}, retrying attempt ${retryIndex}`); // extra warning logger + return Rx.timer(this.backoffDelay(retryIndex)); + }, + }), Rx.catchError((error) => { this.logger.warn(error); return Rx.of(error); diff --git a/test/functional/apps/console/_context_menu.ts b/test/functional/apps/console/_context_menu.ts index 0e126467c04c2..fd19358f6cb55 100644 --- a/test/functional/apps/console/_context_menu.ts +++ b/test/functional/apps/console/_context_menu.ts @@ -85,8 +85,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.console.clickContextMenu(); await PageObjects.console.clickCopyAsButton(); - let resultToast = await toasts.getElementByIndex(1); - let toastText = await resultToast.getVisibleText(); + const resultToast = await toasts.getElementByIndex(1); + const toastText = await resultToast.getVisibleText(); expect(toastText).to.be('Requests copied to clipboard as curl'); @@ -102,21 +102,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Focus editor once again await PageObjects.console.focusInputEditor(); - // Try to copy as javascript + // Verify that the Change language button is not displayed for kbn request await PageObjects.console.clickContextMenu(); - await PageObjects.console.changeLanguageAndCopy('javascript'); - - resultToast = await toasts.getElementByIndex(2); - toastText = await resultToast.getVisibleText(); - - expect(toastText).to.be('Kibana requests can only be copied as curl'); - - // Since we tried to copy as javascript, the clipboard should still have - // the curl request - if (canReadClipboard) { - const clipboardText = await browser.getClipboardValue(); - expect(clipboardText).to.contain('curl -X GET'); - } + expect(await testSubjects.exists('changeLanguageButton')).to.be(false); }); it.skip('allows to change default language', async () => { diff --git a/test/functional/apps/console/_variables.ts b/test/functional/apps/console/_variables.ts index 999d8354a1d9c..ab2b5e8e6b4e5 100644 --- a/test/functional/apps/console/_variables.ts +++ b/test/functional/apps/console/_variables.ts @@ -13,6 +13,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default ({ getService, getPageObjects }: FtrProviderContext) => { const retry = getService('retry'); const log = getService('log'); + const browser = getService('browser'); const PageObjects = getPageObjects(['common', 'console', 'header']); describe('Console variables', function testConsoleVariables() { @@ -45,6 +46,24 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { expect(variables).to.eql([]); }); + it('should allow copying a variable to clipboard', async () => { + await PageObjects.console.openConfig(); + + // Add a new test variable + await PageObjects.console.addNewVariable({ name: 'test_variable', value: 'test' }); + // Copy the variable to clipboard + await PageObjects.console.copyVariableToClipboard('test_variable'); + + await retry.try(async () => { + const actualRequest = await browser.execute(() => navigator.clipboard.readText()); + + expect(actualRequest.trim()).to.contain('${test_variable}'); + }); + + // Clean up + await PageObjects.console.removeVariables(); + }); + describe('with variables in url', () => { it('should send a successful request', async () => { await PageObjects.console.openConfig(); diff --git a/test/functional/apps/dashboard/group3/dashboard_state.ts b/test/functional/apps/dashboard/group3/dashboard_state.ts index b194586d0efa0..3c50a5902b4e7 100644 --- a/test/functional/apps/dashboard/group3/dashboard_state.ts +++ b/test/functional/apps/dashboard/group3/dashboard_state.ts @@ -10,7 +10,7 @@ import expect from '@kbn/expect'; import chroma from 'chroma-js'; import rison from '@kbn/rison'; -import { DEFAULT_PANEL_WIDTH } from '@kbn/dashboard-plugin/public/dashboard_constants'; +import { DEFAULT_PANEL_WIDTH } from '@kbn/dashboard-plugin/common/content_management/constants'; import type { SharedDashboardState } from '@kbn/dashboard-plugin/common'; import { PIE_CHART_VIS_NAME, AREA_CHART_VIS_NAME } from '../../../page_objects/dashboard_page'; import { FtrProviderContext } from '../../../ftr_provider_context'; diff --git a/test/functional/apps/discover/group3/_request_counts.ts b/test/functional/apps/discover/group3/_request_counts.ts index e44b0de22cb28..b10590c3002d2 100644 --- a/test/functional/apps/discover/group3/_request_counts.ts +++ b/test/functional/apps/discover/group3/_request_counts.ts @@ -148,6 +148,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); + it(`should send no requests (documents + chart) when toggling the chart visibility`, async () => { + await expectSearches(type, 0, async () => { + // hide chart + await discover.toggleChartVisibility(); + // show chart + await discover.toggleChartVisibility(); + }); + }); + it(`should send a request for chart data when toggling the chart visibility after a time range change`, async () => { + // hide chart + await discover.toggleChartVisibility(); + await timePicker.setAbsoluteRange( + 'Sep 21, 2015 @ 06:31:44.000', + 'Sep 24, 2015 @ 00:00:00.000' + ); + await waitForLoadingToFinish(); + await expectSearches(type, 1, async () => { + // show chart, we expect a request for the chart data, since the time range changed + await discover.toggleChartVisibility(); + }); + }); + it(`should send ${savedSearchesRequests} requests for saved search changes`, async () => { await setQuery(query1); await queryBar.clickQuerySubmitButton(); @@ -211,15 +233,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { setQuery: (query) => queryBar.setQuery(query), }); - it(`should send no more than 2 requests (documents + chart) when toggling the chart visibility`, async () => { - await expectSearches(type, 2, async () => { - await discover.toggleChartVisibility(); - }); - await expectSearches(type, 2, async () => { - await discover.toggleChartVisibility(); - }); - }); - it('should send no more than 2 requests (documents + chart) when adding a filter', async () => { await expectSearches(type, 2, async () => { await filterBar.addFilter({ @@ -284,15 +297,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { setQuery: (query) => monacoEditor.setCodeEditorValue(query), expectedRequests: 2, }); - - it(`should send requests (documents + chart) when toggling the chart visibility`, async () => { - await expectSearches(type, 1, async () => { - await discover.toggleChartVisibility(); - }); - await expectSearches(type, 3, async () => { - await discover.toggleChartVisibility(); - }); - }); }); }); } diff --git a/test/functional/page_objects/console_page.ts b/test/functional/page_objects/console_page.ts index 30a4b27c3f037..eaebbcd1c6cd8 100644 --- a/test/functional/page_objects/console_page.ts +++ b/test/functional/page_objects/console_page.ts @@ -360,6 +360,10 @@ export class ConsolePageObject extends FtrService { }); } + public async copyVariableToClipboard(name: string) { + await this.testSubjects.click(`variableCopyButton-${name}`); + } + public async getVariables() { const table = await this.testSubjects.find('variablesTable'); const rows = await table.findAllByClassName('euiTableRow'); diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 8e6921407a7bf..ff04259af7257 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -186,6 +186,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'telemetry.labels.ciBuildName (string?)', 'telemetry.labels.performancePhase (string?)', 'telemetry.labels.serverless (string?|never)', // Can only be set on Serverless. + 'telemetry.localShipper (boolean?|false?)', 'telemetry.hidePrivacyStatement (boolean?)', 'telemetry.optIn (boolean?)', 'telemetry.sendUsageFrom (server?|browser?)', @@ -441,6 +442,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'telemetry.labels.ciBuildName (string?)', 'telemetry.labels.performancePhase (string?)', 'telemetry.labels.serverless (string?|never)', // Can only be set on Serverless. + 'telemetry.localShipper (boolean?|false?)', 'telemetry.hidePrivacyStatement (boolean?)', 'telemetry.optIn (boolean?)', 'telemetry.sendUsageFrom (server?|browser?)', diff --git a/tsconfig.base.json b/tsconfig.base.json index 89ae064330a52..06df1ec525415 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1002,8 +1002,8 @@ "@kbn/graph-plugin/*": ["x-pack/platform/plugins/private/graph/*"], "@kbn/grid-example-plugin": ["examples/grid_example"], "@kbn/grid-example-plugin/*": ["examples/grid_example/*"], - "@kbn/grid-layout": ["packages/kbn-grid-layout"], - "@kbn/grid-layout/*": ["packages/kbn-grid-layout/*"], + "@kbn/grid-layout": ["src/platform/packages/private/kbn-grid-layout"], + "@kbn/grid-layout/*": ["src/platform/packages/private/kbn-grid-layout/*"], "@kbn/grokdebugger-plugin": ["x-pack/platform/plugins/private/grokdebugger"], "@kbn/grokdebugger-plugin/*": ["x-pack/platform/plugins/private/grokdebugger/*"], "@kbn/grouping": ["src/platform/packages/shared/kbn-grouping"], diff --git a/x-pack/platform/packages/shared/ai-assistant/icon/icon.tsx b/x-pack/platform/packages/shared/ai-assistant/icon/icon.tsx index 39b4d9391df29..7ae0687283793 100644 --- a/x-pack/platform/packages/shared/ai-assistant/icon/icon.tsx +++ b/x-pack/platform/packages/shared/ai-assistant/icon/icon.tsx @@ -7,7 +7,8 @@ import React from 'react'; import { EuiIcon, EuiIconProps } from '@elastic/eui'; -import { dynamic } from '@kbn/shared-ux-utility'; +// TODO: can be removed once added to EUI. +import assistantIcon from './svg/assistant'; /** * Props for the AI Assistant icon. @@ -18,7 +19,5 @@ export type AssistantIconProps = Omit; * Default Elastic AI Assistant icon. */ export const AssistantIcon = ({ size = 'm', ...rest }: AssistantIconProps) => { - // TODO: can be removed once added to EUI. - const type = dynamic(() => import('./svg/assistant')); - return ; + return ; }; diff --git a/x-pack/platform/packages/shared/ai-assistant/icon/tsconfig.json b/x-pack/platform/packages/shared/ai-assistant/icon/tsconfig.json index 59f40eee91e0d..7685366ff4b12 100644 --- a/x-pack/platform/packages/shared/ai-assistant/icon/tsconfig.json +++ b/x-pack/platform/packages/shared/ai-assistant/icon/tsconfig.json @@ -18,6 +18,5 @@ "target/**/*" ], "kbn_references": [ - "@kbn/shared-ux-utility", ] } diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/api.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/api.ts index b32c25ba56e08..15596c32066e1 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/api.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/api.ts @@ -94,6 +94,13 @@ export type ChatCompleteOptions< * Defaults to 0; */ temperature?: number; + /** + * The model name identifier to use. Can be defined to use another model than the + * default one, when using connectors / providers exposing multiple models. + * + * Defaults to the default model as defined by the used connector. + */ + modelName?: string; /** * Function calling mode, defaults to "native". */ diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/output/api.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/output/api.ts index 3ae4a6a07ee29..8179bd3f6a187 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/src/output/api.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/output/api.ts @@ -85,6 +85,13 @@ export interface OutputOptions< * If provided, will be passed to the LLM in addition to `input`. */ previousMessages?: Message[]; + /** + * The model name identifier to use. Can be defined to use another model than the + * default one, when using connectors / providers exposing multiple models. + * + * Defaults to the default model as defined by the used connector. + */ + modelName?: string; /** * Function calling mode, defaults to "native". */ diff --git a/x-pack/platform/plugins/private/canvas/public/components/datasource/datasource_component.js b/x-pack/platform/plugins/private/canvas/public/components/datasource/datasource_component.js index 0d61015536294..15560ea0010f7 100644 --- a/x-pack/platform/plugins/private/canvas/public/components/datasource/datasource_component.js +++ b/x-pack/platform/plugins/private/canvas/public/components/datasource/datasource_component.js @@ -191,7 +191,6 @@ export class DatasourceComponent extends PureComponent { size="s" onClick={this.save} fill - color="success" data-test-subj="canvasSaveDatasourceButton" > {strings.getSaveButtonLabel()} diff --git a/x-pack/platform/plugins/private/canvas/public/components/page_manager/page_manager.scss b/x-pack/platform/plugins/private/canvas/public/components/page_manager/page_manager.scss index 1f818b980b887..dfff47c61eaa1 100644 --- a/x-pack/platform/plugins/private/canvas/public/components/page_manager/page_manager.scss +++ b/x-pack/platform/plugins/private/canvas/public/components/page_manager/page_manager.scss @@ -33,7 +33,7 @@ .canvasPageManager__addPage { width: $euiSizeXXL + $euiSize; - background: $euiColorSuccess; + background: $euiColorPrimary; color: $euiColorGhost; opacity: 0; animation: buttonPop $euiAnimSpeedNormal $euiAnimSlightResistance; diff --git a/x-pack/platform/plugins/private/canvas/public/components/var_config/edit_var.tsx b/x-pack/platform/plugins/private/canvas/public/components/var_config/edit_var.tsx index 29e026be860a1..30ada32f07c70 100644 --- a/x-pack/platform/plugins/private/canvas/public/components/var_config/edit_var.tsx +++ b/x-pack/platform/plugins/private/canvas/public/components/var_config/edit_var.tsx @@ -209,7 +209,6 @@ export const EditVar: FC = ({ variables, selectedVar, onCancel, onSave }) diff --git a/x-pack/platform/plugins/private/index_lifecycle_management/public/application/sections/edit_policy/components/phase_icon/phase_icon.tsx b/x-pack/platform/plugins/private/index_lifecycle_management/public/application/sections/edit_policy/components/phase_icon/phase_icon.tsx index 7d51b4b07831d..4b965de41eb3c 100644 --- a/x-pack/platform/plugins/private/index_lifecycle_management/public/application/sections/edit_policy/components/phase_icon/phase_icon.tsx +++ b/x-pack/platform/plugins/private/index_lifecycle_management/public/application/sections/edit_policy/components/phase_icon/phase_icon.tsx @@ -7,7 +7,6 @@ import React, { FunctionComponent } from 'react'; import { css } from '@emotion/react'; -import { euiThemeVars } from '@kbn/ui-theme'; import { EuiIcon, useEuiTheme } from '@elastic/eui'; import { Phases } from '../../../../../../common/types'; import './phase_icon.scss'; @@ -21,10 +20,16 @@ export const PhaseIcon: FunctionComponent = ({ enabled, phase }) => { const isBorealis = euiTheme.themeName === 'EUI_THEME_BOREALIS'; const phaseIconColors = { - hot: isBorealis ? euiTheme.colors.vis.euiColorVis6 : euiThemeVars.euiColorVis9_behindText, - warm: isBorealis ? euiTheme.colors.vis.euiColorVis9 : euiThemeVars.euiColorVis5_behindText, - cold: isBorealis ? euiTheme.colors.vis.euiColorVis2 : euiThemeVars.euiColorVis1_behindText, - frozen: euiTheme.colors.vis.euiColorVis4, + hot: isBorealis ? euiTheme.colors.vis.euiColorVis6 : euiTheme.colors.vis.euiColorVisBehindText9, + warm: isBorealis + ? euiTheme.colors.vis.euiColorVis9 + : euiTheme.colors.vis.euiColorVisBehindText5, + cold: isBorealis + ? euiTheme.colors.vis.euiColorVis2 + : euiTheme.colors.vis.euiColorVisBehindText1, + frozen: isBorealis + ? euiTheme.colors.vis.euiColorVis4 + : euiTheme.colors.vis.euiColorVisBehindText4, delete: euiTheme.colors.darkShade, }; diff --git a/x-pack/platform/plugins/private/index_lifecycle_management/tsconfig.json b/x-pack/platform/plugins/private/index_lifecycle_management/tsconfig.json index 00e4ec508cf34..ebd0f7d6e8e2a 100644 --- a/x-pack/platform/plugins/private/index_lifecycle_management/tsconfig.json +++ b/x-pack/platform/plugins/private/index_lifecycle_management/tsconfig.json @@ -40,7 +40,6 @@ "@kbn/unsaved-changes-prompt", "@kbn/shared-ux-table-persist", "@kbn/index-lifecycle-management-common-shared", - "@kbn/ui-theme", ], "exclude": [ "target/**/*", diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index bad386ace3be9..0fb274620e0fc 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -1400,8 +1400,6 @@ "dashboard.dashboardAppBreadcrumbsTitle": "Tableaux de bord", "dashboard.dashboardListingEditErrorTitle.duplicateWarning": "L'enregistrement de \"{value}\" crée un doublon de titre", "dashboard.dashboardPageTitle": "Tableaux de bord", - "dashboard.dashboardWasNotSavedDangerMessage": "Le tableau de bord \"{dashTitle}\" n'a pas été enregistré. Erreur : {errorMessage}.", - "dashboard.dashboardWasSavedSuccessMessage": "Le tableau de bord \"{dashTitle}\" a été enregistré", "dashboard.deleteError.toastDescription": "Erreur rencontrée lors de la suppression du tableau de bord", "dashboard.discardChangesConfirmModal.discardChangesDescription": "Toutes les modifications non enregistrées seront perdues.", "dashboard.editingToolbar.addControlButtonTitle": "Ajouter un contrôle", @@ -1467,7 +1465,6 @@ "dashboard.listing.unsaved.resetAria": "Réinitialiser les modifications apportées à {title}", "dashboard.listing.unsaved.resetTitle": "Réinitialiser les modifications", "dashboard.listing.unsaved.unsavedChangesTitle": "Vous avez des modifications non enregistrées dans le {dash} suivant :", - "dashboard.loadingError.dashboardGridErrorMessage": "Impossible de charger le tableau de bord : {message}", "dashboard.loadURLError.PanelTooOld": "Impossible de charger les panneaux à partir d'une URL créée dans une version antérieure à 7.3", "dashboard.managedContentBadge.ariaLabel": "Elastic gère ce tableau de bord. Dupliquez-le pour apporter des modifications.", "dashboard.managedContentPopoverButton": "Elastic gère ce tableau de bord. {Duplicate}-le pour y apporter des modifications.", @@ -17286,19 +17283,8 @@ "xpack.enterpriseSearch.nav.relevanceTitle": "Pertinence", "xpack.enterpriseSearch.nav.searchApplication.contentTitle": "Contenu", "xpack.enterpriseSearch.nav.searchApplication.docsExplorerTitle": "Explorateur de documents", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.connectorsConfigurationLabel": "Configuration", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerConfigurationLabel": "Configuration", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerSchedulingLabel": "Planification", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.documentsTitle": "Documents", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.domainManagementLabel": "Gérer les domaines", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.indexMappingsTitle": "Mappings d'index", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.overviewTitle": "Aperçu", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.pipelinesLabel": "Pipelines", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.schedulingTitle": "Planification", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.syncRulesLabel": "Règles de synchronisation", "xpack.enterpriseSearch.navigation.applicationsSearchApplicationsLinkLabel": "Applications de recherche", "xpack.enterpriseSearch.navigation.contentConnectorsLinkLabel": "Connecteurs", - "xpack.enterpriseSearch.navigation.contentIndicesLinkLabel": "Index", "xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel": "Robots d'indexation", "xpack.enterpriseSearch.notFound.action1": "Retour à votre tableau de bord", "xpack.enterpriseSearch.notFound.action2": "Contacter le support technique", @@ -44604,7 +44590,6 @@ "xpack.synthetics.server.monitors.invalidScheduleError": "La planification moniteur n’est pas valide", "xpack.synthetics.server.monitors.invalidSchemaError": "Le moniteur n'est pas un moniteur valide de type {type}", "xpack.synthetics.server.monitors.invalidTypeError": "Le type de moniteur n’est pas valide", - "xpack.synthetics.server.project.delete.toolarge": "La charge utile de la requête de suppression est trop volumineuse. Veuillez envoyer au maximum 250 moniteurs à supprimer par requête", "xpack.synthetics.server.projectMonitors.invalidPrivateLocationError": "Emplacement privé non valide : \"{location}\". Supprimez-le ou remplacez-le par un emplacement privé valide.", "xpack.synthetics.server.projectMonitors.invalidPublicLocationError": "Emplacement non valide : \"{location}\". Supprimez-le ou remplacez-le par un emplacement valide.", "xpack.synthetics.server.projectMonitors.invalidPublicOriginError": "Type d'origine non pris en charge {origin}, seul le type ui est pris en charge par l'API.", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index 8aaa0fd13ed98..32130dd35e7ed 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -1400,8 +1400,6 @@ "dashboard.dashboardAppBreadcrumbsTitle": "ダッシュボード", "dashboard.dashboardListingEditErrorTitle.duplicateWarning": "\"{value}\"を保存すると、タイトルが重複します", "dashboard.dashboardPageTitle": "ダッシュボード", - "dashboard.dashboardWasNotSavedDangerMessage": "ダッシュボード''{dashTitle}''が保存されませんでした。エラー:{errorMessage}", - "dashboard.dashboardWasSavedSuccessMessage": "ダッシュボード''{dashTitle}''が保存されました", "dashboard.deleteError.toastDescription": "ダッシュボードの削除中にエラーが発生しました", "dashboard.discardChangesConfirmModal.discardChangesDescription": "保存されていない変更は、すべて失われます。", "dashboard.editingToolbar.addControlButtonTitle": "コントロールを追加", @@ -1467,7 +1465,6 @@ "dashboard.listing.unsaved.resetAria": "{title}の変更をリセット", "dashboard.listing.unsaved.resetTitle": "変更をリセット", "dashboard.listing.unsaved.unsavedChangesTitle": "次の{dash}には保存されていない変更があります。", - "dashboard.loadingError.dashboardGridErrorMessage": "ダッシュボードを読み込めません:{message}", "dashboard.loadURLError.PanelTooOld": "7.3より古いバージョンで作成されたURLからはパネルを読み込めません", "dashboard.managedContentBadge.ariaLabel": "Elasticはこのダッシュボードを管理します。変更するには、複製してください。", "dashboard.managedContentPopoverButton": "Elasticはこのダッシュボードを管理します。変更するには、{Duplicate}。", @@ -17146,19 +17143,8 @@ "xpack.enterpriseSearch.nav.homeTitle": "ホーム", "xpack.enterpriseSearch.nav.searchApplication.contentTitle": "コンテンツ", "xpack.enterpriseSearch.nav.searchApplication.docsExplorerTitle": "ドキュメントエクスプローラー", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.connectorsConfigurationLabel": "構成", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerConfigurationLabel": "構成", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerSchedulingLabel": "スケジュール", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.documentsTitle": "ドキュメント", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.domainManagementLabel": "ドメインを管理", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.indexMappingsTitle": "インデックスマッピング", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.overviewTitle": "概要", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.pipelinesLabel": "パイプライン", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.schedulingTitle": "スケジュール", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.syncRulesLabel": "同期ルール", "xpack.enterpriseSearch.navigation.applicationsSearchApplicationsLinkLabel": "検索アプリケーション", "xpack.enterpriseSearch.navigation.contentConnectorsLinkLabel": "コネクター", - "xpack.enterpriseSearch.navigation.contentIndicesLinkLabel": "インデックス", "xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel": "Webクローラー", "xpack.enterpriseSearch.notFound.action1": "ダッシュボードに戻す", "xpack.enterpriseSearch.notFound.action2": "サポートに問い合わせる", @@ -44457,7 +44443,6 @@ "xpack.synthetics.server.monitors.invalidScheduleError": "モニタースケジュールが無効です", "xpack.synthetics.server.monitors.invalidSchemaError": "モニターは有効なタイプ{type}のモニターではありません。", "xpack.synthetics.server.monitors.invalidTypeError": "モニタータイプが無効です", - "xpack.synthetics.server.project.delete.toolarge": "削除リクエストペイロードが大きすぎます。リクエストごとに送信できる削除するモニターは250以下にしてください", "xpack.synthetics.server.projectMonitors.invalidPrivateLocationError": "非公開の場所\"{location}\"が無効です。削除するか、有効な非公開の場所で置換してください。", "xpack.synthetics.server.projectMonitors.invalidPublicLocationError": "場所\"{location}\"が無効です。削除するか、有効な場所で置換してください。", "xpack.synthetics.server.projectMonitors.invalidPublicOriginError": "サポートされていない始点タイプ\"{origin}\"です。uiタイプのみがAPIでサポートされています。", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index 47b49d45e0b82..f292e3a323fcc 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -1480,7 +1480,6 @@ "dashboard.listing.unsaved.resetAria": "重置对 {title} 所做的更改", "dashboard.listing.unsaved.resetTitle": "重置更改", "dashboard.listing.unsaved.unsavedChangesTitle": "在以下 {dash} 中有未保存更改:", - "dashboard.loadingError.dashboardGridErrorMessage": "无法加载仪表板:{message}", "dashboard.loadURLError.PanelTooOld": "无法通过在早于 7.3 的版本中创建的 URL 加载面板", "dashboard.managedContentBadge.ariaLabel": "Elastic 将管理此仪表板。进行复制以做出更改。", "dashboard.managedContentPopoverButton": "Elastic 管理此仪表板。{Duplicate} 它以做出更改。", @@ -16863,19 +16862,8 @@ "xpack.enterpriseSearch.nav.relevanceTitle": "相关性", "xpack.enterpriseSearch.nav.searchApplication.contentTitle": "内容", "xpack.enterpriseSearch.nav.searchApplication.docsExplorerTitle": "文档浏览器", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.connectorsConfigurationLabel": "配置", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerConfigurationLabel": "配置", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerSchedulingLabel": "正在计划", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.documentsTitle": "文档", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.domainManagementLabel": "管理域", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.indexMappingsTitle": "索引映射", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.overviewTitle": "概览", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.pipelinesLabel": "管道", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.schedulingTitle": "正在计划", - "xpack.enterpriseSearch.nav.searchIndicesTitle.nav.syncRulesLabel": "同步规则", "xpack.enterpriseSearch.navigation.applicationsSearchApplicationsLinkLabel": "搜索应用程序", "xpack.enterpriseSearch.navigation.contentConnectorsLinkLabel": "连接器", - "xpack.enterpriseSearch.navigation.contentIndicesLinkLabel": "索引", "xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel": "网络爬虫", "xpack.enterpriseSearch.notFound.action1": "返回到您的仪表板", "xpack.enterpriseSearch.notFound.action2": "联系支持人员", @@ -43798,7 +43786,6 @@ "xpack.synthetics.server.monitors.invalidScheduleError": "监测计划无效", "xpack.synthetics.server.monitors.invalidSchemaError": "监测不是 {type} 类型的有效监测", "xpack.synthetics.server.monitors.invalidTypeError": "监测类型无效", - "xpack.synthetics.server.project.delete.toolarge": "删除请求,有效负载太大。每个请求请最多发送 250 个要删除的监测", "xpack.synthetics.server.projectMonitors.invalidPublicOriginError": "不支持起源类型 {origin},仅通过 API 支持 UI 类型。", "xpack.synthetics.server.projectMonitors.locationEmptyError": "必须至少将一个位置或专用位置添加到此监测。", "xpack.synthetics.service.projectMonitors.cannotUpdateMonitorToDifferentType": "无法将监测更新为不同类型。", diff --git a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/index.ts b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/index.ts index 1b18426dc2c34..15a9f95dc79e8 100644 --- a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/index.ts +++ b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/index.ts @@ -18,6 +18,12 @@ import { LlmTasksPlugin } from './plugin'; export { config } from './config'; export type { LlmTasksPluginSetup, LlmTasksPluginStart }; +export type { + RetrieveDocumentationAPI, + RetrieveDocumentationParams, + RetrieveDocumentationResult, + RetrieveDocumentationResultDoc, +} from './tasks'; export const plugin: PluginInitializer< LlmTasksPluginSetup, diff --git a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/index.ts b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/index.ts index 41d3911823449..581aa2acf7e08 100644 --- a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/index.ts +++ b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/index.ts @@ -5,4 +5,10 @@ * 2.0. */ -export { retrieveDocumentation } from './retrieve_documentation'; +export { + retrieveDocumentation, + type RetrieveDocumentationParams, + type RetrieveDocumentationResultDoc, + type RetrieveDocumentationResult, + type RetrieveDocumentationAPI, +} from './retrieve_documentation'; diff --git a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/index.ts b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/index.ts index 22bf0745bd77f..30851d3c80cbe 100644 --- a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/index.ts +++ b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/index.ts @@ -8,6 +8,7 @@ export { retrieveDocumentation } from './retrieve_documentation'; export type { RetrieveDocumentationAPI, + RetrieveDocumentationResultDoc, RetrieveDocumentationResult, RetrieveDocumentationParams, } from './types'; diff --git a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.test.ts b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.test.ts index 5722b73ca039c..0214a6bee1a3e 100644 --- a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.test.ts +++ b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.test.ts @@ -8,8 +8,8 @@ import { httpServerMock } from '@kbn/core/server/mocks'; import { loggerMock, type MockedLogger } from '@kbn/logging-mocks'; import type { DocSearchResult } from '@kbn/product-doc-base-plugin/server/services/search'; - import { retrieveDocumentation } from './retrieve_documentation'; + import { truncate, count as countTokens } from '../../utils/tokens'; jest.mock('../../utils/tokens'); const truncateMock = truncate as jest.MockedFn; @@ -26,12 +26,16 @@ describe('retrieveDocumentation', () => { let searchDocAPI: jest.Mock; let retrieve: ReturnType; - const createResult = (parts: Partial = {}): DocSearchResult => { + const createResult = ( + parts: Partial = {}, + { highlights = [] }: { highlights?: string[] } = {} + ): DocSearchResult => { return { title: 'title', content: 'content', url: 'url', productName: 'kibana', + highlights, ...parts, }; }; @@ -56,6 +60,7 @@ describe('retrieveDocumentation', () => { const result = await retrieve({ searchTerm: 'What is Kibana?', products: ['kibana'], + tokenReductionStrategy: 'highlight', request, max: 5, connectorId: '.my-connector', @@ -72,7 +77,65 @@ describe('retrieveDocumentation', () => { query: 'What is Kibana?', products: ['kibana'], max: 5, + highlights: 4, + }); + }); + + it('calls the search API with highlights=0 when using a different summary strategy', async () => { + searchDocAPI.mockResolvedValue({ results: [] }); + + await retrieve({ + searchTerm: 'What is Kibana?', + products: ['kibana'], + tokenReductionStrategy: 'truncate', + request, + max: 5, + connectorId: '.my-connector', + functionCalling: 'simulated', + }); + + expect(searchDocAPI).toHaveBeenCalledTimes(1); + expect(searchDocAPI).toHaveBeenCalledWith({ + query: 'What is Kibana?', + products: ['kibana'], + max: 5, + highlights: 0, + }); + }); + + it('reduces the document length using the highlights strategy', async () => { + searchDocAPI.mockResolvedValue({ + results: [ + createResult({ content: 'content-1' }, { highlights: ['hl1-1', 'hl1-2'] }), + createResult({ content: 'content-2' }, { highlights: ['hl2-1', 'hl2-2'] }), + createResult({ content: 'content-3' }, { highlights: ['hl3-1', 'hl3-2'] }), + ], + }); + + countTokensMock.mockImplementation((text) => { + if (text === 'content-2') { + return 150; + } else { + return 50; + } + }); + truncateMock.mockImplementation((val) => val); + + const result = await retrieve({ + searchTerm: 'What is Kibana?', + request, + connectorId: '.my-connector', + maxDocumentTokens: 100, + tokenReductionStrategy: 'highlight', }); + + expect(result.documents.length).toEqual(3); + expect(result.documents[0].content).toEqual('content-1'); + expect(result.documents[1].content).toEqual('hl2-1\n\nhl2-2'); + expect(result.documents[2].content).toEqual('content-3'); + + expect(truncateMock).toHaveBeenCalledTimes(1); + expect(truncateMock).toHaveBeenCalledWith('hl2-1\n\nhl2-2', 100); }); it('reduces the document length using the truncate strategy', async () => { diff --git a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.ts b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.ts index 96f966e483601..38472c9b51647 100644 --- a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.ts +++ b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/retrieve_documentation.ts @@ -7,7 +7,7 @@ import type { Logger } from '@kbn/logging'; import type { OutputAPI } from '@kbn/inference-common'; -import type { ProductDocSearchAPI } from '@kbn/product-doc-base-plugin/server'; +import type { ProductDocSearchAPI, DocSearchResult } from '@kbn/product-doc-base-plugin/server'; import { truncate, count as countTokens } from '../../utils/tokens'; import type { RetrieveDocumentationAPI } from './types'; import { summarizeDocument } from './summarize_document'; @@ -32,10 +32,40 @@ export const retrieveDocumentation = functionCalling, max = MAX_DOCUMENTS_DEFAULT, maxDocumentTokens = MAX_TOKENS_DEFAULT, - tokenReductionStrategy = 'summarize', + tokenReductionStrategy = 'highlight', }) => { + const applyTokenReductionStrategy = async (doc: DocSearchResult): Promise => { + let content: string; + switch (tokenReductionStrategy) { + case 'highlight': + content = doc.highlights.join('\n\n'); + break; + case 'summarize': + const extractResponse = await summarizeDocument({ + searchTerm, + documentContent: doc.content, + outputAPI, + connectorId, + functionCalling, + }); + content = extractResponse.summary; + break; + case 'truncate': + content = doc.content; + break; + } + return truncate(content, maxDocumentTokens); + }; + try { - const { results } = await searchDocAPI({ query: searchTerm, products, max }); + const highlights = + tokenReductionStrategy === 'highlight' ? calculateHighlightCount(maxDocumentTokens) : 0; + const { results } = await searchDocAPI({ + query: searchTerm, + products, + max, + highlights, + }); log.debug(`searching with term=[${searchTerm}] returned ${results.length} documents`); @@ -49,18 +79,7 @@ export const retrieveDocumentation = let content = document.content; if (docHasTooManyTokens) { - if (tokenReductionStrategy === 'summarize') { - const extractResponse = await summarizeDocument({ - searchTerm, - documentContent: document.content, - outputAPI, - connectorId, - functionCalling, - }); - content = truncate(extractResponse.summary, maxDocumentTokens); - } else { - content = truncate(document.content, maxDocumentTokens); - } + content = await applyTokenReductionStrategy(document); } log.debug(`done processing document [${document.url}]`); @@ -68,6 +87,7 @@ export const retrieveDocumentation = title: document.title, url: document.url, content, + summarized: docHasTooManyTokens, }; }) ); @@ -86,3 +106,9 @@ export const retrieveDocumentation = return { success: false, documents: [] }; } }; + +const AVG_TOKENS_PER_HIGHLIGHT = 250; + +const calculateHighlightCount = (maxTokensPerDoc: number): number => { + return Math.ceil(maxTokensPerDoc / AVG_TOKENS_PER_HIGHLIGHT); +}; diff --git a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts index 1e0637fcd344c..78bf58bbce87e 100644 --- a/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts +++ b/x-pack/platform/plugins/shared/ai_infra/llm_tasks/server/tasks/retrieve_documentation/types.ts @@ -36,15 +36,16 @@ export interface RetrieveDocumentationParams { maxDocumentTokens?: number; /** * The token reduction strategy to apply for documents exceeding max token count. - * - truncate: Will keep the N first tokens - * - summarize: Will call the LLM asking to generate a contextualized summary of the document + * - "highlight": Use Elasticsearch semantic highlighter to build a summary (concatenating highlights) + * - "truncate": Will keep the N first tokens + * - "summarize": Will call the LLM asking to generate a contextualized summary of the document * - * Overall, `summarize` is way more efficient, but significantly slower, given that an additional + * Overall, `summarize` is more efficient, but significantly slower, given that an additional * LLM call will be performed. * - * Defaults to `summarize` + * Defaults to `highlight` */ - tokenReductionStrategy?: 'truncate' | 'summarize'; + tokenReductionStrategy?: 'highlight' | 'truncate' | 'summarize'; /** * The request that initiated the task. */ @@ -53,20 +54,39 @@ export interface RetrieveDocumentationParams { * Id of the LLM connector to use for the task. */ connectorId: string; + /** + * Optional functionCalling parameter to pass down to the inference APIs. + */ functionCalling?: FunctionCallingMode; } -export interface RetrievedDocument { +/** + * Individual result item in a {@link RetrieveDocumentationResult} + */ +export interface RetrieveDocumentationResultDoc { + /** title of the document */ title: string; + /** full url to the online documentation */ url: string; + /** full content of the doc article */ content: string; + /** true if content exceeded max token length and had to go through token reduction */ + summarized: boolean; } +/** + * Response type for {@link RetrieveDocumentationAPI} + */ export interface RetrieveDocumentationResult { + /** whether the call was successful or not */ success: boolean; - documents: RetrievedDocument[]; + /** List of results for this search */ + documents: RetrieveDocumentationResultDoc[]; } +/** + * Retrieve documentation API + */ export type RetrieveDocumentationAPI = ( options: RetrieveDocumentationParams ) => Promise; diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/index.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/index.ts index 805a0f2ea8c41..ab6765d98f9a6 100644 --- a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/index.ts +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/index.ts @@ -18,12 +18,18 @@ import { ProductDocBasePlugin } from './plugin'; export { config } from './config'; export type { ProductDocBaseSetupContract, ProductDocBaseStartContract }; -export type { SearchApi as ProductDocSearchAPI } from './services/search/types'; +export type { + SearchApi as ProductDocSearchAPI, + DocSearchOptions, + DocSearchResult, + DocSearchResponse, +} from './services/search/types'; export const plugin: PluginInitializer< ProductDocBaseSetupContract, ProductDocBaseStartContract, ProductDocBaseSetupDependencies, ProductDocBaseStartDependencies -> = async (pluginInitializerContext: PluginInitializerContext) => - new ProductDocBasePlugin(pluginInitializerContext); +> = async (pluginInitializerContext: PluginInitializerContext) => { + return new ProductDocBasePlugin(pluginInitializerContext); +}; diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/perform_search.test.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/perform_search.test.ts new file mode 100644 index 0000000000000..414e746d93b29 --- /dev/null +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/perform_search.test.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 { elasticsearchServiceMock } from '@kbn/core/server/mocks'; +import { performSearch } from './perform_search'; + +describe('performSearch', () => { + let esClient: ReturnType; + + beforeEach(() => { + esClient = elasticsearchServiceMock.createElasticsearchClient(); + + esClient.search.mockResolvedValue({ hits: { hits: [] } } as any); + }); + + it('calls esClient.search with the correct parameters', async () => { + await performSearch({ + searchQuery: 'query', + highlights: 3, + size: 3, + index: ['index1', 'index2'], + client: esClient, + }); + + expect(esClient.search).toHaveBeenCalledTimes(1); + expect(esClient.search).toHaveBeenCalledWith({ + index: ['index1', 'index2'], + size: 3, + query: expect.any(Object), + highlight: { + fields: { + content_body: expect.any(Object), + }, + }, + }); + }); + + it('calls esClient.search without highlight when highlights=0', async () => { + await performSearch({ + searchQuery: 'query', + highlights: 0, + size: 3, + index: ['index1', 'index2'], + client: esClient, + }); + + expect(esClient.search).toHaveBeenCalledTimes(1); + expect(esClient.search).toHaveBeenCalledWith( + expect.not.objectContaining({ + highlight: expect.any(Object), + }) + ); + }); +}); diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/perform_search.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/perform_search.ts index 03c3b72f86f92..89c9c2cc7e4db 100644 --- a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/perform_search.ts +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/perform_search.ts @@ -13,11 +13,13 @@ import type { ProductDocumentationAttributes } from '@kbn/product-doc-common'; export const performSearch = async ({ searchQuery, size, + highlights, index, client, }: { searchQuery: string; size: number; + highlights: number; index: string | string[]; client: ElasticsearchClient; }) => { @@ -78,6 +80,18 @@ export const performSearch = async ({ ], }, }, + ...(highlights > 0 + ? { + highlight: { + fields: { + content_body: { + type: 'semantic', + number_of_fragments: highlights, + }, + }, + }, + } + : {}), }); return results.hits.hits; diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.test.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.test.ts index c8053ca981e71..9f7056d20d820 100644 --- a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.test.ts +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.test.ts @@ -37,12 +37,14 @@ describe('SearchService', () => { query: 'What is Kibana?', products: ['kibana'], max: 42, + highlights: 3, }); expect(performSearchMock).toHaveBeenCalledTimes(1); expect(performSearchMock).toHaveBeenCalledWith({ searchQuery: 'What is Kibana?', size: 42, + highlights: 3, index: getIndicesForProductNames(['kibana']), client: esClient, }); diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.ts index a0b1e4fd4a836..5b354c0d95471 100644 --- a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.ts +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/search_service.ts @@ -21,11 +21,12 @@ export class SearchService { } async search(options: DocSearchOptions): Promise { - const { query, max = 3, products } = options; + const { query, max = 3, highlights = 3, products } = options; this.log.debug(`performing search - query=[${query}]`); const results = await performSearch({ searchQuery: query, size: max, + highlights, index: getIndicesForProductNames(products), client: this.esClient, }); diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts index fb474bbf4deab..910201391543e 100644 --- a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/types.ts @@ -7,21 +7,45 @@ import type { ProductName } from '@kbn/product-doc-common'; +/** + * Options for the Product documentation {@link SearchApi} + */ export interface DocSearchOptions { + /** plain text search query */ query: string; + /** max number of hits. Defaults to 3 */ max?: number; + /** number of content highlights per hit. Defaults to 3 */ + highlights?: number; + /** optional list of products to filter search */ products?: ProductName[]; } +/** + * Individual result returned in a {@link DocSearchResponse} by the {@link SearchApi} + */ export interface DocSearchResult { + /** title of the doc article page */ title: string; - content: string; + /** full url to the online documentation */ url: string; + /** product name this document is associated to */ productName: ProductName; + /** full content of the doc article */ + content: string; + /** content highlights based on the query */ + highlights: string[]; } +/** + * Response for the {@link SearchApi} + */ export interface DocSearchResponse { + /** List of results for this search */ results: DocSearchResult[]; } +/** + * Search API to be used to retrieve product documentation. + */ export type SearchApi = (options: DocSearchOptions) => Promise; diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.test.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.test.ts index c4ad52e972e8d..d9a6ab3ea1a3f 100644 --- a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.test.ts +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.test.ts @@ -10,16 +10,47 @@ import type { ProductDocumentationAttributes } from '@kbn/product-doc-common'; import { mapResult } from './map_result'; const createHit = ( - attrs: ProductDocumentationAttributes + attrs: ProductDocumentationAttributes, + { highlights }: { highlights?: string[] } = {} ): SearchHit => { return { _index: '.foo', _source: attrs, + ...(highlights ? { highlight: { content_body: highlights } } : {}), }; }; describe('mapResult', () => { it('returns the expected shape', () => { + const input = createHit( + { + content_title: 'content_title', + content_body: 'content_body', + product_name: 'kibana', + root_type: 'documentation', + slug: 'foo.html', + url: 'http://lost.com/foo.html', + version: '8.16', + ai_subtitle: 'ai_subtitle', + ai_summary: 'ai_summary', + ai_questions_answered: ['question A'], + ai_tags: ['foo', 'bar', 'test'], + }, + { highlights: ['highlight1', 'highlight2'] } + ); + + const output = mapResult(input); + + expect(output).toEqual({ + content: 'content_body', + productName: 'kibana', + title: 'content_title', + url: 'http://lost.com/foo.html', + highlights: ['highlight1', 'highlight2'], + }); + }); + + it('supports results without highlights', () => { const input = createHit({ content_title: 'content_title', content_body: 'content_body', @@ -41,23 +72,27 @@ describe('mapResult', () => { productName: 'kibana', title: 'content_title', url: 'http://lost.com/foo.html', + highlights: [], }); }); it('returns the expected shape for legacy semantic_text fields', () => { - const input = createHit({ - content_title: 'content_title', - content_body: { text: 'content_body' }, - product_name: 'kibana', - root_type: 'documentation', - slug: 'foo.html', - url: 'http://lost.com/foo.html', - version: '8.16', - ai_subtitle: 'ai_subtitle', - ai_summary: { text: 'ai_summary' }, - ai_questions_answered: { text: ['question A'] }, - ai_tags: ['foo', 'bar', 'test'], - }); + const input = createHit( + { + content_title: 'content_title', + content_body: { text: 'content_body' }, + product_name: 'kibana', + root_type: 'documentation', + slug: 'foo.html', + url: 'http://lost.com/foo.html', + version: '8.16', + ai_subtitle: 'ai_subtitle', + ai_summary: { text: 'ai_summary' }, + ai_questions_answered: { text: ['question A'] }, + ai_tags: ['foo', 'bar', 'test'], + }, + { highlights: ['highlight1', 'highlight2'] } + ); const output = mapResult(input); @@ -66,6 +101,7 @@ describe('mapResult', () => { productName: 'kibana', title: 'content_title', url: 'http://lost.com/foo.html', + highlights: ['highlight1', 'highlight2'], }); }); }); diff --git a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.ts b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.ts index 4cc5ae12ec19b..5d22fbc7069aa 100644 --- a/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.ts +++ b/x-pack/platform/plugins/shared/ai_infra/product_doc_base/server/services/search/utils/map_result.ts @@ -16,5 +16,6 @@ export const mapResult = (docHit: SearchHit): Do content: typeof content === 'string' ? content : content.text, url: docHit._source!.url, productName: docHit._source!.product_name, + highlights: docHit.highlight?.content_body ?? [], }; }; diff --git a/x-pack/platform/plugins/shared/cases/common/api/helpers.ts b/x-pack/platform/plugins/shared/cases/common/api/helpers.ts index fcdf2be6b6159..45dad60a9bad1 100644 --- a/x-pack/platform/plugins/shared/cases/common/api/helpers.ts +++ b/x-pack/platform/plugins/shared/cases/common/api/helpers.ts @@ -14,7 +14,7 @@ import { CASE_CONFIGURE_DETAILS_URL, CASE_ALERTS_URL, CASE_COMMENT_DELETE_URL, - CASE_FIND_USER_ACTIONS_URL, + INTERNAL_CASE_FIND_USER_ACTIONS_URL, INTERNAL_GET_CASE_USER_ACTIONS_STATS_URL, INTERNAL_BULK_GET_ATTACHMENTS_URL, INTERNAL_CONNECTORS_URL, @@ -57,7 +57,7 @@ export const getCaseUserActionStatsUrl = (id: string): string => { }; export const getCaseFindUserActionsUrl = (id: string): string => { - return CASE_FIND_USER_ACTIONS_URL.replace('{case_id}', id); + return INTERNAL_CASE_FIND_USER_ACTIONS_URL.replace('{case_id}', id); }; export const getCasePushUrl = (caseId: string, connectorId: string): string => { diff --git a/x-pack/platform/plugins/shared/cases/common/constants/index.ts b/x-pack/platform/plugins/shared/cases/common/constants/index.ts index 70a7f73bd4526..76787c791b808 100644 --- a/x-pack/platform/plugins/shared/cases/common/constants/index.ts +++ b/x-pack/platform/plugins/shared/cases/common/constants/index.ts @@ -92,6 +92,8 @@ export const INTERNAL_CASE_OBSERVABLES_PATCH_URL = `${INTERNAL_CASE_OBSERVABLES_URL}/{observable_id}` as const; export const INTERNAL_CASE_OBSERVABLES_DELETE_URL = `${INTERNAL_CASE_OBSERVABLES_URL}/{observable_id}` as const; +export const INTERNAL_CASE_FIND_USER_ACTIONS_URL = + `${CASES_INTERNAL_URL}/{case_id}/user_actions/_find` as const; /** * Action routes diff --git a/x-pack/platform/plugins/shared/cases/common/types/api/user_action/v1.ts b/x-pack/platform/plugins/shared/cases/common/types/api/user_action/v1.ts index 444a8bfe8e4e2..2ca14454e72d6 100644 --- a/x-pack/platform/plugins/shared/cases/common/types/api/user_action/v1.ts +++ b/x-pack/platform/plugins/shared/cases/common/types/api/user_action/v1.ts @@ -15,6 +15,7 @@ import { CaseUserActionBasicRt, UserActionsRt, } from '../../domain/user_action/v1'; +import type { Attachments } from '../../domain'; export type UserActionWithResponse = T & { id: string; version: string } & rt.TypeOf< typeof CaseUserActionInjectedIdsRt @@ -85,3 +86,7 @@ export const UserActionFindResponseRt = rt.strict({ }); export type UserActionFindResponse = rt.TypeOf; + +export interface UserActionInternalFindResponse extends UserActionFindResponse { + latestAttachments: Attachments; +} diff --git a/x-pack/platform/plugins/shared/cases/common/types/domain/attachment/v1.ts b/x-pack/platform/plugins/shared/cases/common/types/domain/attachment/v1.ts index 1dbf1129f58c5..e1e01052d4a89 100644 --- a/x-pack/platform/plugins/shared/cases/common/types/domain/attachment/v1.ts +++ b/x-pack/platform/plugins/shared/cases/common/types/domain/attachment/v1.ts @@ -295,6 +295,15 @@ export type PersistableStateAttachmentAttributes = rt.TypeOf< * Common */ +export const AttachmentPayloadRt = rt.union([ + UserCommentAttachmentPayloadRt, + AlertAttachmentPayloadRt, + ActionsAttachmentPayloadRt, + ExternalReferenceNoSOAttachmentPayloadRt, + ExternalReferenceSOAttachmentPayloadRt, + PersistableStateAttachmentPayloadRt, +]); + export const AttachmentAttributesRt = rt.union([ UserCommentAttachmentAttributesRt, AlertAttachmentAttributesRt, diff --git a/x-pack/platform/plugins/shared/cases/common/types/domain/user_action/comment/v1.ts b/x-pack/platform/plugins/shared/cases/common/types/domain/user_action/comment/v1.ts index a29f95b40d4d6..f86ff42e87b53 100644 --- a/x-pack/platform/plugins/shared/cases/common/types/domain/user_action/comment/v1.ts +++ b/x-pack/platform/plugins/shared/cases/common/types/domain/user_action/comment/v1.ts @@ -6,10 +6,12 @@ */ import * as rt from 'io-ts'; -import { AttachmentRequestRt, AttachmentRequestWithoutRefsRt } from '../../../api/attachment/v1'; +import { AttachmentRequestWithoutRefsRt } from '../../../api/attachment/v1'; import { UserActionTypes } from '../action/v1'; +import { AttachmentPayloadRt } from '../../attachment/v1'; + +export const CommentUserActionPayloadRt = rt.strict({ comment: AttachmentPayloadRt }); -export const CommentUserActionPayloadRt = rt.strict({ comment: AttachmentRequestRt }); export const CommentUserActionPayloadWithoutIdsRt = rt.strict({ comment: AttachmentRequestWithoutRefsRt, }); diff --git a/x-pack/platform/plugins/shared/cases/common/ui/types.ts b/x-pack/platform/plugins/shared/cases/common/ui/types.ts index 72b102d34770d..827caecadce21 100644 --- a/x-pack/platform/plugins/shared/cases/common/ui/types.ts +++ b/x-pack/platform/plugins/shared/cases/common/ui/types.ts @@ -97,6 +97,11 @@ export type UserActionUI = SnakeToCamelCase; export type FindCaseUserActions = Omit, 'userActions'> & { userActions: UserActionUI[]; }; + +export interface InternalFindCaseUserActions extends FindCaseUserActions { + latestAttachments: AttachmentUI[]; +} + export type CaseUserActionsStats = SnakeToCamelCase; export type CaseUI = Omit, 'comments'> & { comments: AttachmentUI[]; diff --git a/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.test.tsx index fafc67fd1a5a2..1981ddc671c65 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.test.tsx @@ -38,7 +38,7 @@ import { useGetCaseUserActionsStats } from '../../../containers/use_get_case_use import { useInfiniteFindCaseUserActions } from '../../../containers/use_infinite_find_case_user_actions'; import { useOnUpdateField } from '../use_on_update_field'; import { useCasesFeatures } from '../../../common/use_cases_features'; -import { ConnectorTypes, UserActionTypes } from '../../../../common/types/domain'; +import { AttachmentType, ConnectorTypes, UserActionTypes } from '../../../../common/types/domain'; import { CaseMetricsFeature } from '../../../../common/types/api'; import { useGetCaseConfiguration } from '../../../containers/configure/use_get_case_configuration'; import { useGetCurrentUserProfile } from '../../../containers/user_profiles/use_get_current_user_profile'; @@ -147,6 +147,8 @@ const useOnUpdateFieldMock = useOnUpdateField as jest.Mock; const useCasesFeaturesMock = useCasesFeatures as jest.Mock; const useReplaceCustomFieldMock = useReplaceCustomField as jest.Mock; +const localStorageKey = `${basicCase.owner}.cases.userActivity.sortOrder`; + describe('Case View Page activity tab', () => { let appMockRender: AppMockRenderer; const caseConnectors = getCaseConnectorsMockResponse(); @@ -217,6 +219,8 @@ describe('Case View Page activity tab', () => { jest.clearAllMocks(); appMockRender = createAppMockRenderer(); + localStorage.clear(); + useGetCaseUsersMock.mockReturnValue({ isLoading: false, data: caseUsers }); useCasesFeaturesMock.mockReturnValue(useGetCasesFeaturesRes); }); @@ -391,6 +395,29 @@ describe('Case View Page activity tab', () => { expect(await screen.findByTestId('case-view-edit-connector')).toBeInTheDocument(); }); + it('should save sortOrder in localstorage', async () => { + (useGetCaseConfiguration as jest.Mock).mockReturnValue({ + data: { + customFields: [customFieldsConfigurationMock[1]], + observableTypes: [], + }, + }); + + appMockRender.render( + + ); + + await userEvent.selectOptions(await screen.findByTestId('user-actions-sort-select'), 'desc'); + + expect(localStorage.getItem(localStorageKey)).toBe('"desc"'); + }); + describe('filter activity', () => { beforeEach(() => { jest.clearAllMocks(); @@ -543,6 +570,14 @@ describe('Case View Page activity tab', () => { }); it('renders the user action users correctly', async () => { + const commentUpdate = getUserAction('comment', 'update', { + createdBy: { + ...caseUsers.participants[1].user, + fullName: caseUsers.participants[1].user.full_name, + profileUid: caseUsers.participants[1].uid, + }, + }); + useFindCaseUserActionsMock.mockReturnValue({ ...defaultUseFindCaseUserActions, data: { @@ -555,13 +590,7 @@ describe('Case View Page activity tab', () => { profileUid: caseUsers.participants[0].uid, }, }), - getUserAction('comment', 'update', { - createdBy: { - ...caseUsers.participants[1].user, - fullName: caseUsers.participants[1].user.full_name, - profileUid: caseUsers.participants[1].uid, - }, - }), + commentUpdate, getUserAction('description', 'update', { createdBy: { ...caseUsers.participants[2].user, @@ -584,6 +613,25 @@ describe('Case View Page activity tab', () => { }, }), ], + latestAttachments: + commentUpdate.type === 'comment' && + commentUpdate.payload.comment?.type === AttachmentType.user + ? [ + { + comment: commentUpdate.payload.comment.comment, + createdAt: commentUpdate.createdAt, + createdBy: commentUpdate.createdBy, + id: commentUpdate.commentId, + owner: commentUpdate.owner, + pushed_at: null, + pushed_by: null, + type: 'user', + updated_at: null, + updated_by: null, + version: commentUpdate.version, + }, + ] + : [], }, }); diff --git a/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.tsx b/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.tsx index 6e945ef836272..e92edc0899bc3 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_activity.tsx @@ -16,6 +16,7 @@ import { } from '@elastic/eui'; import React, { useCallback, useMemo, useState } from 'react'; import { isEqual } from 'lodash'; +import { useCasesLocalStorage } from '../../../common/use_cases_local_storage'; import { useGetCaseConfiguration } from '../../../containers/configure/use_get_case_configuration'; import { useGetCaseUsers } from '../../../containers/use_get_case_users'; import { useGetCaseConnectors } from '../../../containers/use_get_case_connectors'; @@ -40,7 +41,10 @@ import { useGetCaseUserActionsStats } from '../../../containers/use_get_case_use import { AssignUsers } from './assign_users'; import { UserActionsActivityBar } from '../../user_actions_activity_bar'; import type { Assignee } from '../../user_profiles/types'; -import type { UserActivityParams } from '../../user_actions_activity_bar/types'; +import type { + UserActivityParams, + UserActivitySortOrder, +} from '../../user_actions_activity_bar/types'; import { CASE_VIEW_PAGE_TABS } from '../../../../common/types'; import { CaseViewTabs } from '../case_view_tabs'; import { Description } from '../../description'; @@ -49,6 +53,8 @@ import { parseCaseUsers } from '../../utils'; import { CustomFields } from './custom_fields'; import { useReplaceCustomField } from '../../../containers/use_replace_custom_field'; +const LOCALSTORAGE_SORT_ORDER_KEY = 'cases.userActivity.sortOrder'; + export const CaseViewActivity = ({ ruleDetailsNavigation, caseData, @@ -62,9 +68,14 @@ export const CaseViewActivity = ({ showAlertDetails?: (alertId: string, index: string) => void; useFetchAlertData: UseFetchAlertData; }) => { + const [sortOrder, setSortOrder] = useCasesLocalStorage( + LOCALSTORAGE_SORT_ORDER_KEY, + 'asc' + ); + const [userActivityQueryParams, setUserActivityQueryParams] = useState({ type: 'all', - sortOrder: 'asc', + sortOrder, page: 1, perPage: 10, }); @@ -167,6 +178,7 @@ export const CaseViewActivity = ({ const handleUserActionsActivityChanged = useCallback( (params: UserActivityParams) => { + setSortOrder(params.sortOrder); setUserActivityQueryParams((oldParams) => ({ ...oldParams, page: 1, @@ -174,7 +186,7 @@ export const CaseViewActivity = ({ sortOrder: params.sortOrder, })); }, - [setUserActivityQueryParams] + [setSortOrder, setUserActivityQueryParams] ); const showUserActions = diff --git a/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_similar_cases.tsx b/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_similar_cases.tsx index cb72af1fa0e1f..562653415d73d 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_similar_cases.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/case_view/components/case_view_similar_cases.tsx @@ -24,7 +24,7 @@ export const CaseViewSimilarCases = ({ caseData }: CaseViewSimilarCasesProps) => const [pageIndex, setPageIndex] = useState(0); const [pageSize, setPageSize] = useState(CASES_TABLE_PER_PAGE_VALUES[0]); - const { data = initialData, isFetching: isLoadingCases } = useGetSimilarCases({ + const { data = initialData, isLoading: isLoadingCases } = useGetSimilarCases({ caseId: caseData.id, page: pageIndex + 1, perPage: pageSize, diff --git a/x-pack/platform/plugins/shared/cases/public/components/case_view/mocks.ts b/x-pack/platform/plugins/shared/cases/public/components/case_view/mocks.ts index f6764ae133401..40309d099fb2c 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/case_view/mocks.ts +++ b/x-pack/platform/plugins/shared/cases/public/components/case_view/mocks.ts @@ -13,7 +13,7 @@ import { caseUserActions, getAlertUserAction, } from '../../containers/mock'; -import type { CaseUI } from '../../containers/types'; +import type { CaseUI, UserActionUI } from '../../containers/types'; import type { CaseViewProps } from './types'; export const alertsHit = [ @@ -99,8 +99,51 @@ export const defaultUpdateCaseState = { mutate: jest.fn(), }; +const generateLatestAttachments = ({ + userActions, + overrides, +}: { + userActions: UserActionUI[]; + overrides: Array<{ commentId: string; comment: string }>; +}) => { + return userActions + .filter( + ( + userAction + ): userAction is UserActionUI & { + type: 'comment'; + payload: { comment: { comment: string } }; + } => userAction.type === 'comment' && Boolean(userAction.commentId) + ) + .map((userAction) => { + const override = overrides.find(({ commentId }) => commentId === userAction.commentId); + return { + comment: override ? override.comment : userAction.payload.comment?.comment, + createdAt: userAction.createdAt, + createdBy: userAction.createdBy, + id: userAction.commentId, + owner: userAction.owner, + pushed_at: null, + pushed_by: null, + type: 'user', + updated_at: null, + updated_by: null, + version: userAction.version, + }; + }); +}; + export const defaultUseFindCaseUserActions = { - data: { total: 4, perPage: 10, page: 1, userActions: [...caseUserActions, getAlertUserAction()] }, + data: { + total: 4, + perPage: 10, + page: 1, + userActions: [...caseUserActions, getAlertUserAction()], + latestAttachments: generateLatestAttachments({ + userActions: [...caseUserActions, getAlertUserAction()], + overrides: [{ commentId: 'basic-comment-id', comment: 'Solve this fast!' }], + }), + }, refetch: jest.fn(), isLoading: false, isFetching: false, @@ -110,7 +153,13 @@ export const defaultUseFindCaseUserActions = { export const defaultInfiniteUseFindCaseUserActions = { data: { pages: [ - { total: 4, perPage: 10, page: 1, userActions: [...caseUserActions, getAlertUserAction()] }, + { + total: 4, + perPage: 10, + page: 1, + userActions: [...caseUserActions, getAlertUserAction()], + latestAttachments: [], + }, ], }, isLoading: false, diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/actions.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/actions.tsx index 84f0ed768edf6..46acf1d8a2cee 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/actions.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/actions.tsx @@ -21,29 +21,32 @@ type BuilderArgs = Pick< UserActionBuilderArgs, 'userAction' | 'actionsNavigation' | 'userProfiles' > & { - comment: SnakeToCamelCase; + attachment: SnakeToCamelCase; }; export const createActionAttachmentUserActionBuilder = ({ userAction, userProfiles, - comment, + attachment, actionsNavigation, }: BuilderArgs): ReturnType => ({ build: () => { - const actionIconName = comment.actions.type === 'isolate' ? 'lock' : 'lockOpen'; + const actionIconName = attachment.actions.type === 'isolate' ? 'lock' : 'lockOpen'; return [ { username: ( - + ), className: classNames('comment-action', { - 'empty-comment': comment.comment.trim().length === 0, + 'empty-comment': attachment.comment.trim().length === 0, }), event: ( @@ -52,9 +55,9 @@ export const createActionAttachmentUserActionBuilder = ({ timestamp: , timelineAvatar: actionIconName, timelineAvatarAriaLabel: actionIconName, - actions: , - children: comment.comment.trim().length > 0 && ( - + actions: , + children: attachment.comment.trim().length > 0 && ( + ), }, ]; diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/alert.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/alert.tsx index 9a405d8b0365d..4f0bc1bb032e2 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/alert.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/alert.tsx @@ -34,12 +34,12 @@ type BuilderArgs = Pick< | 'userProfiles' | 'handleDeleteComment' | 'loadingCommentIds' -> & { comment: SnakeToCamelCase }; +> & { attachment: SnakeToCamelCase }; const getSingleAlertUserAction = ({ userAction, userProfiles, - comment, + attachment, alertData, loadingAlertData, loadingCommentIds, @@ -48,16 +48,16 @@ const getSingleAlertUserAction = ({ onShowAlertDetails, handleDeleteComment, }: BuilderArgs): EuiCommentProps[] => { - const alertId = getNonEmptyField(comment.alertId); - const alertIndex = getNonEmptyField(comment.index); + const alertId = getNonEmptyField(attachment.alertId); + const alertIndex = getNonEmptyField(attachment.index); if (!alertId || !alertIndex) { return []; } const alertField: unknown | undefined = alertData[alertId]; - const ruleId = getRuleId(comment, alertField); - const ruleName = getRuleName(comment, alertField); + const ruleId = getRuleId(attachment, alertField); + const ruleName = getRuleName(attachment, alertField); return [ { @@ -79,7 +79,7 @@ const getSingleAlertUserAction = ({ timestamp: , timelineAvatar: 'bell', actions: ( - + handleDeleteComment(comment.id, DELETE_ALERTS_SUCCESS_TITLE(1))} - isLoading={loadingCommentIds.includes(comment.id)} + onDelete={() => handleDeleteComment(attachment.id, DELETE_ALERTS_SUCCESS_TITLE(1))} + isLoading={loadingCommentIds.includes(attachment.id)} totalAlerts={1} /> @@ -102,7 +102,7 @@ const getSingleAlertUserAction = ({ const getMultipleAlertsUserAction = ({ userAction, userProfiles, - comment, + attachment, alertData, loadingAlertData, loadingCommentIds, @@ -110,12 +110,12 @@ const getMultipleAlertsUserAction = ({ onRuleDetailsClick, handleDeleteComment, }: BuilderArgs): EuiCommentProps[] => { - if (!Array.isArray(comment.alertId)) { + if (!Array.isArray(attachment.alertId)) { return []; } - const totalAlerts = comment.alertId.length; - const { ruleId, ruleName } = getRuleInfo(comment, alertData); + const totalAlerts = attachment.alertId.length; + const { ruleId, ruleName } = getRuleInfo(attachment, alertData); return [ { @@ -138,15 +138,15 @@ const getMultipleAlertsUserAction = ({ timestamp: , timelineAvatar: 'bell', actions: ( - + - handleDeleteComment(comment.id, DELETE_ALERTS_SUCCESS_TITLE(totalAlerts)) + handleDeleteComment(attachment.id, DELETE_ALERTS_SUCCESS_TITLE(totalAlerts)) } - isLoading={loadingCommentIds.includes(comment.id)} + isLoading={loadingCommentIds.includes(attachment.id)} totalAlerts={totalAlerts} /> @@ -159,8 +159,8 @@ export const createAlertAttachmentUserActionBuilder = ( params: BuilderArgs ): ReturnType => ({ build: () => { - const { comment } = params; - const alertId = Array.isArray(comment.alertId) ? comment.alertId : [comment.alertId]; + const { attachment } = params; + const alertId = Array.isArray(attachment.alertId) ? attachment.alertId : [attachment.alertId]; if (alertId.length === 1) { return getSingleAlertUserAction(params); @@ -174,35 +174,41 @@ const getFirstItem = (items?: string | string[] | null): string | null => { return Array.isArray(items) ? items[0] : items ?? null; }; -export const getRuleId = (comment: BuilderArgs['comment'], alertData?: unknown): string | null => +export const getRuleId = ( + attachment: BuilderArgs['attachment'], + alertData?: unknown +): string | null => getRuleField({ - commentRuleField: comment?.rule?.id, + attachmentRuleField: attachment?.rule?.id, alertData, signalRuleFieldPath: 'signal.rule.id', kibanaAlertFieldPath: ALERT_RULE_UUID, }); -export const getRuleName = (comment: BuilderArgs['comment'], alertData?: unknown): string | null => +export const getRuleName = ( + attachment: BuilderArgs['attachment'], + alertData?: unknown +): string | null => getRuleField({ - commentRuleField: comment?.rule?.name, + attachmentRuleField: attachment?.rule?.name, alertData, signalRuleFieldPath: 'signal.rule.name', kibanaAlertFieldPath: ALERT_RULE_NAME, }); const getRuleField = ({ - commentRuleField, + attachmentRuleField, alertData, signalRuleFieldPath, kibanaAlertFieldPath, }: { - commentRuleField: string | string[] | null | undefined; + attachmentRuleField: string | string[] | null | undefined; alertData: unknown | undefined; signalRuleFieldPath: string; kibanaAlertFieldPath: string; }): string | null => { const field = - getNonEmptyField(commentRuleField) ?? + getNonEmptyField(attachmentRuleField) ?? getNonEmptyField(get(alertData, signalRuleFieldPath)) ?? getNonEmptyField(get(alertData, kibanaAlertFieldPath)); @@ -218,16 +224,19 @@ function getNonEmptyField(field: string | string[] | undefined | null): string | return firstItem; } -export function getRuleInfo(comment: BuilderArgs['comment'], alertData: BuilderArgs['alertData']) { - const alertId = getNonEmptyField(comment.alertId); +export function getRuleInfo( + attachment: BuilderArgs['attachment'], + alertData: BuilderArgs['alertData'] +) { + const alertId = getNonEmptyField(attachment.alertId); if (!alertId) { return { ruleId: null, ruleName: null }; } const alertField: unknown | undefined = alertData[alertId]; - const ruleId = getRuleId(comment, alertField); - const ruleName = getRuleName(comment, alertField); + const ruleId = getRuleId(attachment, alertField); + const ruleName = getRuleName(attachment, alertField); return { ruleId, ruleName }; } diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.test.tsx index dbbc18439e088..d89d2c4db3acd 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.test.tsx @@ -408,8 +408,8 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [alertComment], }, + attachments: [alertComment], userAction, }); @@ -432,8 +432,8 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [alertComment], }, + attachments: [alertComment], userAction, }); @@ -465,8 +465,8 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [alertComment], }, + attachments: [alertComment], userAction, }); @@ -501,14 +501,14 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [ - { - ...alertComment, - alertId: ['alert-id-1', 'alert-id-2'], - index: ['alert-index-1', 'alert-index-2'], - }, - ], }, + attachments: [ + { + ...alertComment, + alertId: ['alert-id-1', 'alert-id-2'], + index: ['alert-index-1', 'alert-index-2'], + }, + ], userAction, }); @@ -528,14 +528,14 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [ - { - ...alertComment, - alertId: ['alert-id-1', 'alert-id-2'], - index: ['alert-index-1', 'alert-index-2'], - }, - ], }, + attachments: [ + { + ...alertComment, + alertId: ['alert-id-1', 'alert-id-2'], + index: ['alert-index-1', 'alert-index-2'], + }, + ], userAction, }); @@ -564,14 +564,14 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [ - { - ...alertComment, - alertId: ['alert-id-1', 'alert-id-2'], - index: ['alert-index-1', 'alert-index-2'], - }, - ], }, + attachments: [ + { + ...alertComment, + alertId: ['alert-id-1', 'alert-id-2'], + index: ['alert-index-1', 'alert-index-2'], + }, + ], userAction, }); @@ -595,8 +595,8 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [hostIsolationComment()], }, + attachments: [hostIsolationComment()], userAction, }); @@ -623,8 +623,8 @@ describe('createCommentUserActionBuilder', () => { ...builderArgs, caseData: { ...builderArgs.caseData, - comments: [hostIsolationComment({ createdBy })], }, + attachments: [hostIsolationComment({ createdBy })], userAction, }); @@ -663,17 +663,17 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [ - { - ...externalReferenceAttachment, - createdBy: { - username: damagedRaccoon.user.username, - fullName: damagedRaccoon.user.full_name, - email: damagedRaccoon.user.email, - }, - }, - ], }, + attachments: [ + { + ...externalReferenceAttachment, + createdBy: { + username: damagedRaccoon.user.username, + fullName: damagedRaccoon.user.full_name, + email: damagedRaccoon.user.email, + }, + }, + ], userAction, }); @@ -696,8 +696,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); @@ -720,8 +720,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); @@ -780,8 +780,8 @@ describe('createCommentUserActionBuilder', () => { persistableStateAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [attachment01], }, + attachments: [attachment01], userAction, }); @@ -809,8 +809,8 @@ describe('createCommentUserActionBuilder', () => { persistableStateAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [attachment02], }, + attachments: [attachment02], userAction, }); @@ -832,8 +832,8 @@ describe('createCommentUserActionBuilder', () => { persistableStateAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [persistableStateAttachment], }, + attachments: [persistableStateAttachment], userAction, }); @@ -856,8 +856,8 @@ describe('createCommentUserActionBuilder', () => { persistableStateAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [persistableStateAttachment], }, + attachments: [persistableStateAttachment], userAction, }); @@ -915,8 +915,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); @@ -962,8 +962,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); @@ -1018,8 +1018,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); @@ -1073,8 +1073,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); @@ -1149,8 +1149,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); @@ -1200,8 +1200,8 @@ describe('createCommentUserActionBuilder', () => { externalReferenceAttachmentTypeRegistry, caseData: { ...builderArgs.caseData, - comments: [externalReferenceAttachment], }, + attachments: [externalReferenceAttachment], userAction, }); diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.tsx index 48d00f075c81f..4b2875836a7bc 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/comment.tsx @@ -148,7 +148,7 @@ const getCreateCommentUserAction = ({ caseData, externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry, - comment, + attachment, commentRefs, manageMarkdownEditIds, selectedOutlineCommentId, @@ -166,21 +166,21 @@ const getCreateCommentUserAction = ({ actionsNavigation, }: { userAction: SnakeToCamelCase; - comment: AttachmentUI; + attachment: AttachmentUI; } & Omit< UserActionBuilderArgs, 'comments' | 'index' | 'handleOutlineComment' | 'currentUserProfile' >): EuiCommentProps[] => { - switch (comment.type) { + switch (attachment.type) { case AttachmentType.user: const userBuilder = createUserAttachmentUserActionBuilder({ appId, userProfiles, - comment, - outlined: comment.id === selectedOutlineCommentId, - isEdit: manageMarkdownEditIds.includes(comment.id), + attachment, + outlined: attachment.id === selectedOutlineCommentId, + isEdit: manageMarkdownEditIds.includes(attachment.id), commentRefs, - isLoading: loadingCommentIds.includes(comment.id), + isLoading: loadingCommentIds.includes(attachment.id), caseId: caseData.id, euiTheme, handleManageMarkdownEditId, @@ -195,7 +195,7 @@ const getCreateCommentUserAction = ({ const alertBuilder = createAlertAttachmentUserActionBuilder({ userProfiles, alertData, - comment, + attachment, userAction, getRuleDetailsHref, loadingAlertData, @@ -211,7 +211,7 @@ const getCreateCommentUserAction = ({ const actionBuilder = createActionAttachmentUserActionBuilder({ userProfiles, userAction, - comment, + attachment, actionsNavigation, }); @@ -221,10 +221,10 @@ const getCreateCommentUserAction = ({ const externalReferenceBuilder = createExternalReferenceAttachmentUserActionBuilder({ userAction, userProfiles, - comment, + attachment, externalReferenceAttachmentTypeRegistry, caseData, - isLoading: loadingCommentIds.includes(comment.id), + isLoading: loadingCommentIds.includes(attachment.id), handleDeleteComment, }); @@ -234,10 +234,10 @@ const getCreateCommentUserAction = ({ const persistableBuilder = createPersistableStateAttachmentUserActionBuilder({ userAction, userProfiles, - comment, + attachment, persistableStateAttachmentTypeRegistry, caseData, - isLoading: loadingCommentIds.includes(comment.id), + isLoading: loadingCommentIds.includes(attachment.id), handleDeleteComment, }); @@ -273,13 +273,14 @@ export const createCommentUserActionBuilder: UserActionBuilder = ({ handleOutlineComment, actionsNavigation, caseConnectors, + attachments, }) => ({ build: () => { - const commentUserAction = userAction as SnakeToCamelCase; + const attachmentUserAction = userAction as SnakeToCamelCase; - if (commentUserAction.action === UserActionActions.delete) { + if (attachmentUserAction.action === UserActionActions.delete) { return getDeleteCommentUserAction({ - userAction: commentUserAction, + userAction: attachmentUserAction, caseData, handleOutlineComment, userProfiles, @@ -288,22 +289,22 @@ export const createCommentUserActionBuilder: UserActionBuilder = ({ }); } - const comment = caseData.comments.find((c) => c.id === commentUserAction.commentId); + const attachment = attachments.find((c) => c.id === attachmentUserAction.commentId); - if (comment == null) { + if (attachment == null) { return []; } - if (commentUserAction.action === UserActionActions.create) { + if (attachmentUserAction.action === UserActionActions.create) { const commentAction = getCreateCommentUserAction({ appId, caseData, casesConfiguration, userProfiles, - userAction: commentUserAction, + userAction: attachmentUserAction, externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry, - comment, + attachment, commentRefs, manageMarkdownEditIds, selectedOutlineCommentId, @@ -320,6 +321,7 @@ export const createCommentUserActionBuilder: UserActionBuilder = ({ handleManageQuote, actionsNavigation, caseConnectors, + attachments, }); return commentAction; diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/external_reference.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/external_reference.tsx index 2ea7e3af6fae6..14863fffe7082 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/external_reference.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/external_reference.tsx @@ -18,14 +18,14 @@ type BuilderArgs = Pick< | 'handleDeleteComment' | 'userProfiles' > & { - comment: SnakeToCamelCase; + attachment: SnakeToCamelCase; isLoading: boolean; }; export const createExternalReferenceAttachmentUserActionBuilder = ({ userAction, userProfiles, - comment, + attachment, externalReferenceAttachmentTypeRegistry, caseData, isLoading, @@ -34,15 +34,15 @@ export const createExternalReferenceAttachmentUserActionBuilder = ({ return createRegisteredAttachmentUserActionBuilder({ userAction, userProfiles, - comment, + attachment, registry: externalReferenceAttachmentTypeRegistry, caseData, handleDeleteComment, isLoading, - getId: () => comment.externalReferenceAttachmentTypeId, + getId: () => attachment.externalReferenceAttachmentTypeId, getAttachmentViewProps: () => ({ - externalReferenceId: comment.externalReferenceId, - externalReferenceMetadata: comment.externalReferenceMetadata, + externalReferenceId: attachment.externalReferenceId, + externalReferenceMetadata: attachment.externalReferenceMetadata, }), }); }; diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/persistable_state.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/persistable_state.tsx index 0443f67612c4a..3c358925f15a1 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/persistable_state.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/persistable_state.tsx @@ -18,14 +18,14 @@ type BuilderArgs = Pick< | 'handleDeleteComment' | 'userProfiles' > & { - comment: SnakeToCamelCase; + attachment: SnakeToCamelCase; isLoading: boolean; }; export const createPersistableStateAttachmentUserActionBuilder = ({ userAction, userProfiles, - comment, + attachment, persistableStateAttachmentTypeRegistry, caseData, isLoading, @@ -34,15 +34,15 @@ export const createPersistableStateAttachmentUserActionBuilder = ({ return createRegisteredAttachmentUserActionBuilder({ userAction, userProfiles, - comment, + attachment, registry: persistableStateAttachmentTypeRegistry, caseData, handleDeleteComment, isLoading, - getId: () => comment.persistableStateAttachmentTypeId, + getId: () => attachment.persistableStateAttachmentTypeId, getAttachmentViewProps: () => ({ - persistableStateAttachmentTypeId: comment.persistableStateAttachmentTypeId, - persistableStateAttachmentState: comment.persistableStateAttachmentState, + persistableStateAttachmentTypeId: attachment.persistableStateAttachmentTypeId, + persistableStateAttachmentState: attachment.persistableStateAttachmentState, }), }); }; diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.test.tsx index 0f485845fcd36..e73dd7e8b18d7 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.test.tsx @@ -58,7 +58,7 @@ describe('createRegisteredAttachmentUserActionBuilder', () => { registry.register(item); - const comment = builderArgs.comments[0]; + const attachment = builderArgs.attachments[0]; const userActionBuilderArgs = { userAction: builderArgs.userAction, @@ -68,7 +68,7 @@ describe('createRegisteredAttachmentUserActionBuilder', () => { getId, getAttachmentViewProps, isLoading: false, - comment, + attachment, registry, }; @@ -97,7 +97,7 @@ describe('createRegisteredAttachmentUserActionBuilder', () => { expect(getAttachmentViewProps).toHaveBeenCalled(); expect(getAttachmentViewObject).toBeCalledWith({ ...viewProps, - attachmentId: comment.id, + attachmentId: attachment.id, caseData: { id: builderArgs.caseData.id, title: builderArgs.caseData.title }, }); }); diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.tsx index 49056c7b0900b..47975f901b7d8 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/registered_attachments.tsx @@ -41,7 +41,7 @@ type BuilderArgs = Pick< UserActionBuilderArgs, 'userAction' | 'caseData' | 'handleDeleteComment' | 'userProfiles' > & { - comment: SnakeToCamelCase; + attachment: SnakeToCamelCase; registry: R; isLoading: boolean; getId: () => string; @@ -82,7 +82,7 @@ export const createRegisteredAttachmentUserActionBuilder = < >({ userAction, userProfiles, - comment, + attachment, registry, caseData, isLoading, @@ -98,7 +98,10 @@ export const createRegisteredAttachmentUserActionBuilder = < return [ { username: ( - + ), event: ( <> @@ -106,8 +109,8 @@ export const createRegisteredAttachmentUserActionBuilder = < {attachmentTypeId} ), - className: `comment-${comment.type}-not-found`, - 'data-test-subj': `comment-${comment.type}-not-found`, + className: `comment-${attachment.type}-not-found`, + 'data-test-subj': `comment-${attachment.type}-not-found`, timestamp: , children: ( @@ -120,7 +123,7 @@ export const createRegisteredAttachmentUserActionBuilder = < const props = { ...getAttachmentViewProps(), - attachmentId: comment.id, + attachmentId: attachment.id, caseData: { id: caseData.id, title: caseData.title }, }; @@ -135,30 +138,33 @@ export const createRegisteredAttachmentUserActionBuilder = < return [ { username: ( - + ), - className: `comment-${comment.type}-attachment-${attachmentTypeId}`, + className: `comment-${attachment.type}-attachment-${attachmentTypeId}`, event: attachmentViewObject.event, - 'data-test-subj': `comment-${comment.type}-${attachmentTypeId}`, + 'data-test-subj': `comment-${attachment.type}-${attachmentTypeId}`, timestamp: , timelineAvatar: attachmentViewObject.timelineAvatar, actions: ( - + {visiblePrimaryActions.map( (action) => (action.type === AttachmentActionType.BUTTON && ( )) || @@ -166,7 +172,7 @@ export const createRegisteredAttachmentUserActionBuilder = < )} handleDeleteComment(comment.id, DELETE_REGISTERED_ATTACHMENT)} + onDelete={() => handleDeleteComment(attachment.id, DELETE_REGISTERED_ATTACHMENT)} registeredAttachmentActions={[...nonVisiblePrimaryActions, ...nonPrimaryActions]} hideDefaultActions={!!attachmentViewObject.hideDefaultActions} /> diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/user.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/user.tsx index 67366ee4a81d3..5027207a757a8 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/user.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/comment/user.tsx @@ -34,7 +34,7 @@ type BuilderArgs = Pick< | 'appId' | 'euiTheme' > & { - comment: SnakeToCamelCase; + attachment: SnakeToCamelCase; caseId: string; outlined: boolean; isEdit: boolean; @@ -66,7 +66,7 @@ const hasDraftComment = ( export const createUserAttachmentUserActionBuilder = ({ appId, - comment, + attachment, userProfiles, outlined, isEdit, @@ -81,33 +81,39 @@ export const createUserAttachmentUserActionBuilder = ({ }: BuilderArgs): ReturnType => ({ build: () => [ { - username: , - 'data-test-subj': `comment-create-action-${comment.id}`, + username: ( + + ), + 'data-test-subj': `comment-create-action-${attachment.id}`, timestamp: ( - + ), className: classNames('userAction__comment', { outlined, isEdit, draftFooter: - !isEdit && !isLoading && hasDraftComment(appId, caseId, comment.id, comment.comment), + !isEdit && + !isLoading && + hasDraftComment(appId, caseId, attachment.id, attachment.comment), }), children: ( <> (commentRefs.current[comment.id] = element)} - id={comment.id} - content={comment.comment} + key={isEdit ? attachment.id : undefined} + ref={(element) => (commentRefs.current[attachment.id] = element)} + id={attachment.id} + content={attachment.comment} isEditable={isEdit} caseId={caseId} onChangeEditable={handleManageMarkdownEditId} onSaveContent={handleSaveComment.bind(null, { - id: comment.id, - version: comment.version, + id: attachment.id, + version: attachment.version, })} /> - {!isEdit && !isLoading && hasDraftComment(appId, caseId, comment.id, comment.comment) ? ( + {!isEdit && + !isLoading && + hasDraftComment(appId, caseId, attachment.id, attachment.comment) ? ( {i18n.UNSAVED_DRAFT_COMMENT} @@ -119,16 +125,16 @@ export const createUserAttachmentUserActionBuilder = ({ ), timelineAvatar: ( - + ), actions: ( - + handleManageMarkdownEditId(comment.id)} - onDelete={() => handleDeleteComment(comment.id, i18n.DELETE_COMMENT_SUCCESS_TITLE)} - onQuote={() => handleManageQuote(comment.comment)} + commentContent={attachment.comment} + onEdit={() => handleManageMarkdownEditId(attachment.id)} + onDelete={() => handleDeleteComment(attachment.id, i18n.DELETE_COMMENT_SUCCESS_TITLE)} + onQuote={() => handleManageQuote(attachment.comment)} /> ), diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/index.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/index.tsx index 793405276cdb4..8dadf97244927 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/index.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/index.tsx @@ -82,6 +82,7 @@ export const UserActions = React.memo((props: UserActionTreeProps) => { const { infiniteCaseUserActions, + infiniteLatestAttachments, isLoadingInfiniteUserActions, hasNextPage, fetchNextPage, @@ -95,11 +96,12 @@ export const UserActions = React.memo((props: UserActionTreeProps) => { const { euiTheme } = useEuiTheme(); - const { isLoadingLastPageUserActions, lastPageUserActions } = useLastPageUserActions({ - userActivityQueryParams, - caseId: caseData.id, - lastPage, - }); + const { isLoadingLastPageUserActions, lastPageUserActions, lastPageAttachments } = + useLastPageUserActions({ + userActivityQueryParams, + caseId: caseData.id, + lastPage, + }); const alertIdsWithoutRuleInfo = useMemo( () => getManualAlertIdsWithNoRuleId(caseData.comments), @@ -180,6 +182,7 @@ export const UserActions = React.memo((props: UserActionTreeProps) => { { { persistableStateAttachmentTypeRegistry, caseData: basicCase, casesConfiguration: casesConfigurationsMock, - comments: basicCase.comments, + attachments: basicCase.comments, index: 0, alertData, commentRefs, diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/types.ts b/x-pack/platform/plugins/shared/cases/public/components/user_actions/types.ts index fa63971c8ef24..8cde0550d4846 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/types.ts +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/types.ts @@ -60,7 +60,7 @@ export interface UserActionBuilderArgs { persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry; caseConnectors: CaseConnectors; userAction: UserActionUI; - comments: AttachmentUI[]; + attachments: AttachmentUI[]; index: number; commentRefs: React.MutableRefObject< Record diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_last_page.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_last_page.tsx index 32fc45aa433ab..0134619c43c71 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_last_page.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_last_page.tsx @@ -7,7 +7,7 @@ import { useMemo } from 'react'; -import type { UserActionUI } from '../../containers/types'; +import type { AttachmentUI, UserActionUI } from '../../containers/types'; import { useFindCaseUserActions } from '../../containers/use_find_case_user_actions'; import type { UserActivityParams } from '../user_actions_activity_bar/types'; @@ -25,16 +25,23 @@ export const useLastPageUserActions = ({ const { data: lastPageUserActionsData, isLoading: isLoadingLastPageUserActions } = useFindCaseUserActions(caseId, { ...userActivityQueryParams, page: lastPage }, lastPage > 1); - const lastPageUserActions = useMemo(() => { + const { userActions, latestAttachments } = useMemo<{ + userActions: UserActionUI[]; + latestAttachments: AttachmentUI[]; + }>(() => { if (isLoadingLastPageUserActions || !lastPageUserActionsData) { - return []; + return { userActions: [], latestAttachments: [] }; } - return lastPageUserActionsData.userActions; + return { + userActions: lastPageUserActionsData.userActions, + latestAttachments: lastPageUserActionsData.latestAttachments, + }; }, [lastPageUserActionsData, isLoadingLastPageUserActions]); return { isLoadingLastPageUserActions, - lastPageUserActions, + lastPageUserActions: userActions, + lastPageAttachments: latestAttachments, }; }; diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_pagination.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_pagination.tsx index bdaaa68de0157..f33fcfa1ca0b0 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_pagination.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/use_user_actions_pagination.tsx @@ -8,7 +8,7 @@ import { useMemo } from 'react'; import { useInfiniteFindCaseUserActions } from '../../containers/use_infinite_find_case_user_actions'; -import type { UserActionUI } from '../../containers/types'; +import type { AttachmentUI, UserActionUI } from '../../containers/types'; import type { UserActivityParams } from '../user_actions_activity_bar/types'; interface UserActionsPagination { @@ -32,23 +32,32 @@ export const useUserActionsPagination = ({ const showBottomList = lastPage > 1; - const infiniteCaseUserActions = useMemo(() => { + const infiniteCaseUserActions = useMemo<{ + userActions: UserActionUI[]; + latestAttachments: AttachmentUI[]; + }>(() => { if (!caseInfiniteUserActionsData?.pages?.length || isLoadingInfiniteUserActions) { - return []; + return { userActions: [], latestAttachments: [] }; } const userActionsData: UserActionUI[] = []; + const latestAttachments: AttachmentUI[] = []; + // TODO: looks like it can be done in one loop caseInfiniteUserActionsData.pages.forEach((page) => userActionsData.push(...page.userActions)); + caseInfiniteUserActionsData.pages.forEach((page) => + latestAttachments.push(...page.latestAttachments) + ); - return userActionsData; + return { userActions: userActionsData, latestAttachments }; }, [caseInfiniteUserActionsData, isLoadingInfiniteUserActions]); return { lastPage, showBottomList, isLoadingInfiniteUserActions, - infiniteCaseUserActions, + infiniteCaseUserActions: infiniteCaseUserActions.userActions, + infiniteLatestAttachments: infiniteCaseUserActions.latestAttachments, hasNextPage, fetchNextPage, isFetchingNextPage, diff --git a/x-pack/platform/plugins/shared/cases/public/components/user_actions/user_actions_list.tsx b/x-pack/platform/plugins/shared/cases/public/components/user_actions/user_actions_list.tsx index 954d811c48aa1..7956d5334b3a9 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/user_actions/user_actions_list.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/user_actions/user_actions_list.tsx @@ -11,7 +11,7 @@ import { EuiCommentList, useEuiTheme } from '@elastic/eui'; import React, { useMemo, useEffect, useState } from 'react'; import { css } from '@emotion/react'; -import type { UserActionUI } from '../../containers/types'; +import type { AttachmentUI, UserActionUI } from '../../containers/types'; import type { UserActionBuilderArgs, UserActionTreeProps } from './types'; import { isUserActionTypeSupported } from './helpers'; import { useCasesContext } from '../cases_context/use_cases_context'; @@ -66,6 +66,7 @@ export type UserActionListProps = Omit< > & Pick & { caseUserActions: UserActionUI[]; + attachments: AttachmentUI[]; loadingAlertData: boolean; manualAlertsData: Record; bottomActions?: EuiCommentProps[]; @@ -75,6 +76,7 @@ export type UserActionListProps = Omit< export const UserActionsList = React.memo( ({ caseUserActions, + attachments, caseConnectors, userProfiles, currentUserProfile, @@ -113,15 +115,15 @@ export const UserActionsList = React.memo( return []; } - return caseUserActions.reduce((comments, userAction, index) => { + return caseUserActions.reduce((userActions, userAction, index) => { if (!isUserActionTypeSupported(userAction.type)) { - return comments; + return userActions; } const builder = builderMap[userAction.type]; if (builder == null) { - return comments; + return userActions; } const userActionBuilder = builder({ @@ -134,7 +136,7 @@ export const UserActionsList = React.memo( userAction, userProfiles, currentUserProfile, - comments: caseData?.comments, + attachments, index, commentRefs, manageMarkdownEditIds, @@ -153,7 +155,7 @@ export const UserActionsList = React.memo( getRuleDetailsHref, onRuleDetailsClick, }); - return [...comments, ...userActionBuilder.build()]; + return [...userActions, ...userActionBuilder.build()]; }, []); }, [ caseUserActions, @@ -165,6 +167,7 @@ export const UserActionsList = React.memo( persistableStateAttachmentTypeRegistry, userProfiles, currentUserProfile, + attachments, commentRefs, manageMarkdownEditIds, selectedOutlineCommentId, diff --git a/x-pack/platform/plugins/shared/cases/public/containers/__mocks__/api.ts b/x-pack/platform/plugins/shared/cases/public/containers/__mocks__/api.ts index ab12561e2c733..f60b0306420ed 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/__mocks__/api.ts +++ b/x-pack/platform/plugins/shared/cases/public/containers/__mocks__/api.ts @@ -51,12 +51,6 @@ import type { UserProfile } from '@kbn/security-plugin/common'; import { userProfiles } from '../user_profiles/api.mock'; import { getCaseConnectorsMockResponse } from '../../common/mock/connectors'; -export const getCase = async ( - caseId: string, - includeComments: boolean = true, - signal: AbortSignal -): Promise => Promise.resolve(basicCase); - export const resolveCase = async ( caseId: string, includeComments: boolean = true, diff --git a/x-pack/platform/plugins/shared/cases/public/containers/api.test.tsx b/x-pack/platform/plugins/shared/cases/public/containers/api.test.tsx index 2934c4d1f3432..4854acd2b8a9f 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/api.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/api.test.tsx @@ -22,7 +22,6 @@ import { deleteCases, deleteComment, getActionLicense, - getCase, getCases, findCaseUserActions, getTags, @@ -135,34 +134,6 @@ describe('Cases API', () => { }); }); - describe('getCase', () => { - beforeEach(() => { - fetchMock.mockClear(); - fetchMock.mockResolvedValue(basicCaseSnake); - }); - const data = basicCase.id; - - it('should be called with correct check url, method, signal', async () => { - await getCase(data, true, abortCtrl.signal); - expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}`, { - method: 'GET', - query: { includeComments: true }, - signal: abortCtrl.signal, - }); - }); - - it('should return correct response', async () => { - const resp = await getCase(data, true, abortCtrl.signal); - expect(resp).toEqual(basicCase); - }); - - it('should not covert to camel case registered attachments', async () => { - fetchMock.mockResolvedValue(caseWithRegisteredAttachmentsSnake); - const resp = await getCase(data, true, abortCtrl.signal); - expect(resp).toEqual(caseWithRegisteredAttachments); - }); - }); - describe('resolveCase', () => { const aliasTargetId = '12345'; const basicResolveCase = { @@ -180,7 +151,9 @@ describe('Cases API', () => { await resolveCase({ caseId, signal: abortCtrl.signal }); expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${caseId}/resolve`, { method: 'GET', - query: { includeComments: true }, + query: { + includeComments: false, + }, signal: abortCtrl.signal, }); }); @@ -540,6 +513,7 @@ describe('Cases API', () => { perPage: 10, total: 30, userActions: [...caseUserActionsWithRegisteredAttachmentsSnake], + latestAttachments: [], }; const filterActionType: CaseUserActionTypeWithAll = 'all'; const sortOrder: 'asc' | 'desc' = 'asc'; @@ -557,16 +531,19 @@ describe('Cases API', () => { it('should be called with correct check url, method, signal', async () => { await findCaseUserActions(basicCase.id, params, abortCtrl.signal); - expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/user_actions/_find`, { - method: 'GET', - signal: abortCtrl.signal, - query: { - types: [], - sortOrder: 'asc', - page: 1, - perPage: 10, - }, - }); + expect(fetchMock).toHaveBeenCalledWith( + `${CASES_INTERNAL_URL}/${basicCase.id}/user_actions/_find`, + { + method: 'GET', + signal: abortCtrl.signal, + query: { + types: [], + sortOrder: 'asc', + page: 1, + perPage: 10, + }, + } + ); }); it('should be called with action type user action and desc sort order', async () => { @@ -575,30 +552,36 @@ describe('Cases API', () => { { type: 'action', sortOrder: 'desc', page: 2, perPage: 15 }, abortCtrl.signal ); - expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/user_actions/_find`, { - method: 'GET', - signal: abortCtrl.signal, - query: { - types: ['action'], - sortOrder: 'desc', - page: 2, - perPage: 15, - }, - }); + expect(fetchMock).toHaveBeenCalledWith( + `${CASES_INTERNAL_URL}/${basicCase.id}/user_actions/_find`, + { + method: 'GET', + signal: abortCtrl.signal, + query: { + types: ['action'], + sortOrder: 'desc', + page: 2, + perPage: 15, + }, + } + ); }); it('should be called with user type user action and desc sort order', async () => { await findCaseUserActions(basicCase.id, { ...params, type: 'user' }, abortCtrl.signal); - expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/user_actions/_find`, { - method: 'GET', - signal: abortCtrl.signal, - query: { - types: ['user'], - sortOrder: 'asc', - page: 1, - perPage: 10, - }, - }); + expect(fetchMock).toHaveBeenCalledWith( + `${CASES_INTERNAL_URL}/${basicCase.id}/user_actions/_find`, + { + method: 'GET', + signal: abortCtrl.signal, + query: { + types: ['user'], + sortOrder: 'asc', + page: 1, + perPage: 10, + }, + } + ); }); it('should return correct response', async () => { diff --git a/x-pack/platform/plugins/shared/cases/public/containers/api.ts b/x-pack/platform/plugins/shared/cases/public/containers/api.ts index 4216421892b8c..7aed7381ce35c 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/api.ts +++ b/x-pack/platform/plugins/shared/cases/public/containers/api.ts @@ -19,19 +19,18 @@ import type { CasesFindResponse, CaseUserActionStatsResponse, GetCaseConnectorsResponse, - UserActionFindResponse, SingleCaseMetricsResponse, CustomFieldPutRequest, CasesSimilarResponse, AddObservableRequest, UpdateObservableRequest, + UserActionInternalFindResponse, } from '../../common/types/api'; import type { CaseConnectors, CaseUpdateRequest, FetchCasesProps, ResolvedCase, - FindCaseUserActions, CaseUserActionTypeWithAll, CaseUserActionsStats, CaseUsers, @@ -41,6 +40,7 @@ import type { CaseUICustomField, SimilarCasesProps, CasesSimilarResponseUI, + InternalFindCaseUserActions, } from '../../common/ui/types'; import { SortFieldCase } from '../../common/ui/types'; import { @@ -81,6 +81,7 @@ import { convertCasesToCamelCase, convertCaseResolveToCamelCase, convertSimilarCasesToCamel, + convertAttachmentsToCamelCase, } from '../api/utils'; import type { @@ -105,37 +106,18 @@ import { } from './utils'; import { decodeCasesFindResponse, decodeCasesSimilarResponse } from '../api/decoders'; -export const getCase = async ( - caseId: string, - includeComments: boolean = true, - signal: AbortSignal -): Promise => { - const response = await KibanaServices.get().http.fetch(getCaseDetailsUrl(caseId), { - method: 'GET', - query: { - includeComments, - }, - signal, - }); - return convertCaseToCamelCase(decodeCaseResponse(response)); -}; - export const resolveCase = async ({ caseId, - includeComments = true, signal, }: { caseId: string; - includeComments?: boolean; signal?: AbortSignal; }): Promise => { const response = await KibanaServices.get().http.fetch( `${getCaseDetailsUrl(caseId)}/resolve`, { method: 'GET', - query: { - includeComments, - }, + query: { includeComments: false }, signal, } ); @@ -211,7 +193,7 @@ export const findCaseUserActions = async ( perPage: number; }, signal?: AbortSignal -): Promise => { +): Promise => { const query = { types: params.type !== 'all' ? [params.type] : [], sortOrder: params.sortOrder, @@ -219,7 +201,7 @@ export const findCaseUserActions = async ( perPage: params.perPage, }; - const response = await KibanaServices.get().http.fetch( + const response = await KibanaServices.get().http.fetch( getCaseFindUserActionsUrl(caseId), { method: 'GET', @@ -233,6 +215,7 @@ export const findCaseUserActions = async ( userActions: convertUserActionsToCamelCase( decodeCaseUserActionsResponse(response.userActions) ) as UserActionUI[], + latestAttachments: convertAttachmentsToCamelCase(response.latestAttachments), }; }; diff --git a/x-pack/platform/plugins/shared/cases/public/containers/mock.ts b/x-pack/platform/plugins/shared/cases/public/containers/mock.ts index 5253e425a2a88..d54e6c0a5bf74 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/mock.ts +++ b/x-pack/platform/plugins/shared/cases/public/containers/mock.ts @@ -38,7 +38,6 @@ import type { CasesMetrics, ExternalReferenceAttachmentUI, PersistableStateAttachmentUI, - FindCaseUserActions, CaseUsers, CaseUserActionsStats, CasesFindResponseUI, @@ -49,6 +48,7 @@ import type { CasesConfigurationUITemplate, CasesSimilarResponseUI, ObservableUI, + InternalFindCaseUserActions, } from '../../common/ui/types'; import { CaseMetricsFeature } from '../../common/types/api'; import { OBSERVABLE_TYPE_IPV4, SECURITY_SOLUTION_OWNER } from '../../common/constants'; @@ -974,11 +974,12 @@ export const caseUserActionsWithRegisteredAttachments: UserActionUI[] = [ }, ]; -export const findCaseUserActionsResponse: FindCaseUserActions = { +export const findCaseUserActionsResponse: InternalFindCaseUserActions = { page: 1, perPage: 10, total: 30, userActions: [...caseUserActionsWithRegisteredAttachments], + latestAttachments: [], }; export const getCaseUserActionsStatsResponse: CaseUserActionsStats = { diff --git a/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.test.tsx b/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.test.tsx index 7dfaa1ff146ee..dc4fbb4402672 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.test.tsx @@ -52,6 +52,7 @@ describe('UseFindCaseUserActions', () => { expect.objectContaining({ ...initialData, data: { + latestAttachments: [], userActions: [...findCaseUserActionsResponse.userActions], total: 30, perPage: 10, diff --git a/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.tsx b/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.tsx index 41845882ff651..6b8a8e4df8049 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/use_find_case_user_actions.tsx @@ -6,7 +6,7 @@ */ import { useQuery } from '@tanstack/react-query'; -import type { FindCaseUserActions, CaseUserActionTypeWithAll } from '../../common/ui/types'; +import type { CaseUserActionTypeWithAll, InternalFindCaseUserActions } from '../../common/ui/types'; import { findCaseUserActions } from './api'; import type { ServerError } from '../types'; import { useCasesToast } from '../common/use_cases_toast'; @@ -25,7 +25,7 @@ export const useFindCaseUserActions = ( ) => { const { showErrorToast } = useCasesToast(); - return useQuery( + return useQuery( casesQueriesKeys.caseUserActions(caseId, params), async ({ signal }) => findCaseUserActions(caseId, params, signal), { diff --git a/x-pack/platform/plugins/shared/cases/public/containers/use_get_case.tsx b/x-pack/platform/plugins/shared/cases/public/containers/use_get_case.tsx index 4697fde760780..1067b3c72ea17 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/use_get_case.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/use_get_case.tsx @@ -17,7 +17,7 @@ export const useGetCase = (caseId: string) => { const toasts = useToasts(); return useQuery( casesQueriesKeys.case(caseId), - ({ signal }) => resolveCase({ caseId, includeComments: true, signal }), + ({ signal }) => resolveCase({ caseId, signal }), { onError: (error: ServerError) => { if (error.name !== 'AbortError') { diff --git a/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.test.tsx b/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.test.tsx index 19a7f2b9edc3f..d60a521390470 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.test.tsx @@ -55,6 +55,7 @@ describe('UseInfiniteFindCaseUserActions', () => { data: { pages: [ { + latestAttachments: [], userActions: [...findCaseUserActionsResponse.userActions], total: 30, perPage: 10, diff --git a/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.tsx b/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.tsx index 2d4f0056849db..e769de7823d63 100644 --- a/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.tsx +++ b/x-pack/platform/plugins/shared/cases/public/containers/use_infinite_find_case_user_actions.tsx @@ -6,7 +6,7 @@ */ import { useInfiniteQuery } from '@tanstack/react-query'; -import type { FindCaseUserActions, CaseUserActionTypeWithAll } from '../../common/ui/types'; +import type { InternalFindCaseUserActions, CaseUserActionTypeWithAll } from '../../common/ui/types'; import { findCaseUserActions } from './api'; import type { ServerError } from '../types'; import { useCasesToast } from '../common/use_cases_toast'; @@ -25,7 +25,7 @@ export const useInfiniteFindCaseUserActions = ( const { showErrorToast } = useCasesToast(); const abortCtrlRef = new AbortController(); - return useInfiniteQuery( + return useInfiniteQuery( casesQueriesKeys.caseUserActions(caseId, params), async ({ pageParam = 1 }) => { return findCaseUserActions(caseId, { ...params, page: pageParam }, abortCtrlRef.signal); diff --git a/x-pack/platform/plugins/shared/cases/server/routes/api/get_internal_routes.ts b/x-pack/platform/plugins/shared/cases/server/routes/api/get_internal_routes.ts index 63c5953b3ea32..80abc7623a304 100644 --- a/x-pack/platform/plugins/shared/cases/server/routes/api/get_internal_routes.ts +++ b/x-pack/platform/plugins/shared/cases/server/routes/api/get_internal_routes.ts @@ -24,6 +24,7 @@ import { postObservableRoute } from './observables/post_observable'; import { similarCaseRoute } from './cases/similar'; import { patchObservableRoute } from './observables/patch_observable'; import { deleteObservableRoute } from './observables/delete_observable'; +import { findUserActionsRoute } from './internal/find_user_actions'; export const getInternalRoutes = (userProfileService: UserProfileService) => [ @@ -44,4 +45,5 @@ export const getInternalRoutes = (userProfileService: UserProfileService) => patchObservableRoute, deleteObservableRoute, similarCaseRoute, + findUserActionsRoute, ] as CaseRoute[]; diff --git a/x-pack/platform/plugins/shared/cases/server/routes/api/internal/find_user_actions.test.ts b/x-pack/platform/plugins/shared/cases/server/routes/api/internal/find_user_actions.test.ts new file mode 100644 index 0000000000000..745dfcc8eaa02 --- /dev/null +++ b/x-pack/platform/plugins/shared/cases/server/routes/api/internal/find_user_actions.test.ts @@ -0,0 +1,321 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { findUserActionsRoute } from './find_user_actions'; + +const userActionsMockData = { + userActions: [ + { + type: 'create_case', + payload: { + connector: { id: 'none', type: '.none', fields: null, name: 'none' }, + title: 'My Case', + tags: [], + description: 'my case desc.', + settings: { syncAlerts: false }, + owner: 'cases', + severity: 'low', + assignees: [], + status: 'open', + category: null, + customFields: [], + }, + created_at: '2025-01-07T13:31:55.427Z', + created_by: { + username: 'elastic', + full_name: null, + email: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + owner: 'cases', + action: 'create', + comment_id: null, + id: 'e11e39f5-ea29-4cbc-981b-1508cafdb0ad', + version: 'WzIsMV0=', + }, + { + payload: { comment: { comment: 'First comment', type: 'user', owner: 'cases' } }, + type: 'comment', + created_at: '2025-01-07T13:32:01.314Z', + created_by: { + username: 'elastic', + full_name: null, + email: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + owner: 'cases', + action: 'create', + comment_id: '601a03cf-71a0-4949-9407-97cf372b313b', + id: '71f67236-f2f5-4cfe-964d-a4103a9717f2', + version: 'WzUsMV0=', + }, + { + payload: { comment: { comment: 'Second comment', type: 'user', owner: 'cases' } }, + type: 'comment', + created_at: '2025-01-07T13:32:08.045Z', + created_by: { + username: 'elastic', + full_name: null, + email: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + owner: 'cases', + action: 'create', + comment_id: '2cd1eb7d-ff8a-4c0e-b904-0beb64ab166a', + id: '00414cd9-b51a-4b85-a7d3-cb39de4d61db', + version: 'WzgsMV0=', + }, + { + payload: { comment: { comment: 'Edited first comment', type: 'user', owner: 'cases' } }, + type: 'comment', + created_at: '2025-01-07T13:32:18.160Z', + created_by: { + username: 'elastic', + full_name: null, + email: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + owner: 'cases', + action: 'update', + comment_id: '123e4567-e89b-12d3-a456-426614174000', + id: '675cc9a3-5445-4aaa-ad65-21241f095546', + version: 'WzExLDFd', + }, + ], + page: 1, + perPage: 10, + total: 4, +}; + +const attachmentsMockData = { + attachments: [ + { + comment: 'Edited first comment', + type: 'user', + owner: 'cases', + created_at: '2025-01-07T13:32:01.283Z', + created_by: { + email: null, + full_name: null, + username: 'elastic', + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + pushed_at: null, + pushed_by: null, + updated_at: '2025-01-07T13:32:18.127Z', + updated_by: { + username: 'elastic', + full_name: null, + email: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + id: '601a03cf-71a0-4949-9407-97cf372b313b', + version: 'WzksMV0=', + }, + { + comment: 'Second comment', + type: 'user', + owner: 'cases', + created_at: '2025-01-07T13:32:08.015Z', + created_by: { + email: null, + full_name: null, + username: 'elastic', + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + pushed_at: null, + pushed_by: null, + updated_at: null, + updated_by: null, + id: '2cd1eb7d-ff8a-4c0e-b904-0beb64ab166a', + version: 'WzYsMV0=', + }, + { + comment: 'Edited first comment', + type: 'user', + owner: 'cases', + created_at: '2025-01-07T13:32:01.283Z', + created_by: { + email: null, + full_name: null, + username: 'elastic', + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + pushed_at: null, + pushed_by: null, + updated_at: '2025-01-07T13:32:18.127Z', + updated_by: { + username: 'elastic', + full_name: null, + email: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + }, + id: '123e4567-e89b-12d3-a456-426614174000', + version: 'WzksMV0=', + }, + ], + errors: [], +}; + +describe('findUserActionsRoute', () => { + const response = { ok: jest.fn() }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return user actions and latest attachments', async () => { + const casesClientMock = { + userActions: { + find: jest.fn().mockResolvedValue(userActionsMockData), + }, + attachments: { + bulkGet: jest.fn().mockResolvedValue(attachmentsMockData), + }, + }; + const context = { cases: { getCasesClient: jest.fn().mockResolvedValue(casesClientMock) } }; + const request = { + params: { + case_id: 'my_fake_case_id', + }, + query: '', + }; + + // @ts-expect-error: mocking necessary properties for handler logic only, no Kibana platform + await findUserActionsRoute.handler({ context, request, response }); + + expect(casesClientMock.attachments.bulkGet).toHaveBeenCalledWith({ + attachmentIDs: [ + userActionsMockData.userActions[1].comment_id, + userActionsMockData.userActions[2].comment_id, + userActionsMockData.userActions[3].comment_id, + ], + caseID: 'my_fake_case_id', + }); + expect(response.ok).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + latestAttachments: expect.arrayContaining([ + expect.objectContaining({ + comment: 'Edited first comment', + created_at: '2025-01-07T13:32:01.283Z', + created_by: { + email: null, + full_name: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + username: 'elastic', + }, + id: '601a03cf-71a0-4949-9407-97cf372b313b', + owner: 'cases', + pushed_at: null, + pushed_by: null, + type: 'user', + updated_at: '2025-01-07T13:32:18.127Z', + updated_by: { + email: null, + full_name: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + username: 'elastic', + }, + version: 'WzksMV0=', + }), + ]), + }), + }) + ); + }); + + it('should return empty attachments when no commentId', async () => { + const casesClientMock = { + userActions: { + // userActionsMockData.userActions[0] must have no commentId + find: jest.fn().mockResolvedValue({ userActions: [userActionsMockData.userActions[0]] }), + }, + attachments: { + bulkGet: jest.fn().mockResolvedValue(attachmentsMockData), + }, + }; + const context = { cases: { getCasesClient: jest.fn().mockResolvedValue(casesClientMock) } }; + const request = { + params: { + case_id: 'my_fake_case_id', + }, + query: '', + }; + + // @ts-expect-error: Kibana platform types are mocked for testing, only implementing necessary properties for handler logic + await findUserActionsRoute.handler({ context, request, response }); + + expect(response.ok).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + latestAttachments: [], + }), + }) + ); + }); + + it('should filter repeated comment_ids', async () => { + userActionsMockData.userActions[1].comment_id = userActionsMockData.userActions[2].comment_id; + const casesClientMock = { + userActions: { + find: jest.fn().mockResolvedValue(userActionsMockData), + }, + attachments: { + bulkGet: jest.fn().mockResolvedValue(attachmentsMockData), + }, + }; + const context = { cases: { getCasesClient: jest.fn().mockResolvedValue(casesClientMock) } }; + const request = { + params: { + case_id: 'my_fake_case_id', + }, + query: '', + }; + + // @ts-expect-error: mocking necessary properties for handler logic only, no Kibana platform + await findUserActionsRoute.handler({ context, request, response }); + + expect(casesClientMock.attachments.bulkGet).toHaveBeenCalledWith({ + attachmentIDs: [ + userActionsMockData.userActions[1].comment_id, + userActionsMockData.userActions[3].comment_id, + ], + caseID: 'my_fake_case_id', + }); + expect(response.ok).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ + latestAttachments: expect.arrayContaining([ + expect.objectContaining({ + comment: 'Edited first comment', + created_at: '2025-01-07T13:32:01.283Z', + created_by: { + email: null, + full_name: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + username: 'elastic', + }, + id: '601a03cf-71a0-4949-9407-97cf372b313b', + owner: 'cases', + pushed_at: null, + pushed_by: null, + type: 'user', + updated_at: '2025-01-07T13:32:18.127Z', + updated_by: { + email: null, + full_name: null, + profile_uid: 'u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0', + username: 'elastic', + }, + version: 'WzksMV0=', + }), + ]), + }), + }) + ); + }); +}); diff --git a/x-pack/platform/plugins/shared/cases/server/routes/api/internal/find_user_actions.ts b/x-pack/platform/plugins/shared/cases/server/routes/api/internal/find_user_actions.ts new file mode 100644 index 0000000000000..9ad00346a565c --- /dev/null +++ b/x-pack/platform/plugins/shared/cases/server/routes/api/internal/find_user_actions.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; + +import { isCommentUserAction } from '../../../../common/utils/user_actions'; +import type { attachmentApiV1, userActionApiV1 } from '../../../../common/types/api'; +import { INTERNAL_CASE_FIND_USER_ACTIONS_URL } from '../../../../common/constants'; +import { createCaseError } from '../../../common/error'; +import { createCasesRoute } from '../create_cases_route'; + +const params = { + params: schema.object({ + case_id: schema.string(), + }), +}; + +export const findUserActionsRoute = createCasesRoute({ + method: 'get', + path: INTERNAL_CASE_FIND_USER_ACTIONS_URL, + params, + routerOptions: { + access: 'public', + summary: 'Get user actions by case', + tags: ['oas-tag:cases'], + }, + handler: async ({ context, request, response }) => { + try { + const caseContext = await context.cases; + const casesClient = await caseContext.getCasesClient(); + const caseId = request.params.case_id; + const options = request.query as userActionApiV1.UserActionFindRequest; + + const userActionsResponse: userActionApiV1.UserActionFindResponse = + await casesClient.userActions.find({ + caseId, + params: options, + }); + + const uniqueCommentIds: Set = new Set(); + for (const action of userActionsResponse.userActions) { + if (isCommentUserAction(action) && action.comment_id) { + uniqueCommentIds.add(action.comment_id); + } + } + const commentIds = Array.from(uniqueCommentIds); + + let attachmentRes: attachmentApiV1.BulkGetAttachmentsResponse = { + attachments: [], + errors: [], + }; + + if (commentIds.length > 0) { + attachmentRes = await casesClient.attachments.bulkGet({ + caseID: caseId, + attachmentIDs: commentIds, + }); + } + + const res: userActionApiV1.UserActionInternalFindResponse = { + ...userActionsResponse, + latestAttachments: attachmentRes.attachments, + }; + + return response.ok({ + body: res, + }); + } catch (error) { + throw createCaseError({ + message: `Failed to retrieve case details in route case id: ${request.params.case_id}: \n${error}`, + error, + }); + } + }, +}); diff --git a/x-pack/platform/plugins/shared/entity_manager/common/constants_entities.ts b/x-pack/platform/plugins/shared/entity_manager/common/constants_entities.ts index c17e6f33918c6..8eac9dc91edda 100644 --- a/x-pack/platform/plugins/shared/entity_manager/common/constants_entities.ts +++ b/x-pack/platform/plugins/shared/entity_manager/common/constants_entities.ts @@ -20,6 +20,8 @@ export const ENTITY_ENTITY_COMPONENT_TEMPLATE_V1 = export const ENTITY_EVENT_COMPONENT_TEMPLATE_V1 = `${ENTITY_BASE_PREFIX}_${ENTITY_SCHEMA_VERSION_V1}_event` as const; +export const ECS_MAPPINGS_COMPONENT_TEMPLATE = 'ecs@mappings' as const; + // History constants export const ENTITY_HISTORY_BASE_COMPONENT_TEMPLATE_V1 = `${ENTITY_BASE_PREFIX}_${ENTITY_SCHEMA_VERSION_V1}_${ENTITY_HISTORY}_base` as const; diff --git a/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap index 9653c5fda96c6..f60081dfb1ff4 100644 --- a/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap +++ b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap @@ -9,6 +9,7 @@ Object { "managed_by": "elastic_entity_model", }, "composed_of": Array [ + "ecs@mappings", "entities_v1_latest_base", "entities_v1_entity", "entities_v1_event", @@ -80,6 +81,7 @@ Object { "managed_by": "elastic_entity_model", }, "composed_of": Array [ + "ecs@mappings", "entities_v1_latest_base", "entities_v1_entity", "entities_v1_event", diff --git a/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.ts index e0c02c7471217..3781d51a822dc 100644 --- a/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.ts +++ b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.ts @@ -15,6 +15,7 @@ import { } from '@kbn/entities-schema'; import { generateLatestIndexTemplateId } from '../helpers/generate_component_id'; import { + ECS_MAPPINGS_COMPONENT_TEMPLATE, ENTITY_ENTITY_COMPONENT_TEMPLATE_V1, ENTITY_EVENT_COMPONENT_TEMPLATE_V1, ENTITY_LATEST_BASE_COMPONENT_TEMPLATE_V1, @@ -34,6 +35,7 @@ export const generateEntitiesLatestIndexTemplateConfig = ( }, ignore_missing_component_templates: getCustomLatestTemplateComponents(definition), composed_of: [ + ECS_MAPPINGS_COMPONENT_TEMPLATE, ENTITY_LATEST_BASE_COMPONENT_TEMPLATE_V1, ENTITY_ENTITY_COMPONENT_TEMPLATE_V1, ENTITY_EVENT_COMPONENT_TEMPLATE_V1, diff --git a/x-pack/platform/plugins/shared/features/common/kibana_feature.ts b/x-pack/platform/plugins/shared/features/common/kibana_feature.ts index dba79a1663fca..d427c28aea575 100644 --- a/x-pack/platform/plugins/shared/features/common/kibana_feature.ts +++ b/x-pack/platform/plugins/shared/features/common/kibana_feature.ts @@ -177,6 +177,14 @@ export interface KibanaFeatureConfig { * documentation. */ notice: string; + /** + * An optional list of feature IDs representing the features that should _conceptually_ replace this deprecated + * feature. This is used, for example, in the Spaces feature visibility toggles UI to display the replacement + * feature(s) instead of the deprecated one. By default, the list of replacement features is derived from the + * `replacedBy` fields of the feature privileges. However, if the feature privileges are replaced by the privileges + * of multiple features, this behavior is not always desired and can be overridden here. + */ + replacedBy?: readonly string[]; }>; } diff --git a/x-pack/platform/plugins/shared/features/server/feature_registry.test.ts b/x-pack/platform/plugins/shared/features/server/feature_registry.test.ts index 07f4a242b3176..1a2cecca3c244 100644 --- a/x-pack/platform/plugins/shared/features/server/feature_registry.test.ts +++ b/x-pack/platform/plugins/shared/features/server/feature_registry.test.ts @@ -2702,10 +2702,12 @@ describe('FeatureRegistry', () => { } function createDeprecatedFeature({ + deprecated, all, read, subAlpha, }: { + deprecated?: { notice: string; replacedBy?: string[] }; all?: FeatureKibanaPrivilegesReference[]; read?: { minimal: FeatureKibanaPrivilegesReference[]; @@ -2714,7 +2716,7 @@ describe('FeatureRegistry', () => { subAlpha?: FeatureKibanaPrivilegesReference[]; } = {}): KibanaFeatureConfig { return { - deprecated: { notice: 'It was a mistake.' }, + deprecated: deprecated ?? { notice: 'It was a mistake.' }, id: 'feature-alpha', name: 'Feature Alpha', app: [], @@ -3240,6 +3242,50 @@ describe('FeatureRegistry', () => { `"Cannot replace privilege \\"sub-alpha-1-1\\" of deprecated feature \\"feature-alpha\\" with disabled privilege \\"read\\" of feature \\"feature-delta\\"."` ); }); + + it('requires correct list of feature IDs to be replaced by', () => { + // Case 1: empty list of feature IDs. + expect(() => + createRegistry( + createDeprecatedFeature({ deprecated: { notice: 'some notice', replacedBy: [] } }) + ).validateFeatures() + ).toThrowErrorMatchingInlineSnapshot( + `"Feature “feature-alpha” is deprecated and must have at least one feature ID added to the “replacedBy” property, or the property must be left out completely."` + ); + + // Case 2: invalid feature IDs. + expect(() => + createRegistry( + createDeprecatedFeature({ + deprecated: { + notice: 'some notice', + replacedBy: ['feature-beta', 'feature-gamma', 'feature-delta'], + }, + }) + ).validateFeatures() + ).toThrowErrorMatchingInlineSnapshot( + `"Cannot replace deprecated feature “feature-alpha” with the following features, as they aren’t used to replace feature privileges: feature-gamma, feature-delta."` + ); + + // Case 3: valid feature ID. + expect(() => + createRegistry( + createDeprecatedFeature({ + deprecated: { notice: 'some notice', replacedBy: ['feature-beta'] }, + }) + ).validateFeatures() + ).not.toThrow(); + + // Case 4: valid multiple feature IDs. + expect(() => + createRegistry( + createDeprecatedFeature({ + deprecated: { notice: 'some notice', replacedBy: ['feature-beta', 'feature-delta'] }, + all: [{ feature: 'feature-delta', privileges: ['all'] }], + }) + ).validateFeatures() + ).not.toThrow(); + }); }); }); diff --git a/x-pack/platform/plugins/shared/features/server/feature_registry.ts b/x-pack/platform/plugins/shared/features/server/feature_registry.ts index cb4090dd38208..d801af9b97304 100644 --- a/x-pack/platform/plugins/shared/features/server/feature_registry.ts +++ b/x-pack/platform/plugins/shared/features/server/feature_registry.ts @@ -21,9 +21,9 @@ import { validateKibanaFeature, validateElasticsearchFeature } from './feature_s import type { ConfigOverridesType } from './config'; /** - * Describes parameters used to retrieve all Kibana features. + * Describes parameters used to retrieve all Kibana features (for internal consumers). */ -export interface GetKibanaFeaturesParams { +export interface GetKibanaFeaturesParamsInternal { /** * If provided, the license will be used to filter out features that require a license higher than the specified one. * */ @@ -41,6 +41,17 @@ export interface GetKibanaFeaturesParams { omitDeprecated?: boolean; } +/** + * Describes parameters used to retrieve all Kibana features (for public consumers). + */ +export interface GetKibanaFeaturesParams { + /** + * If true, deprecated features will be omitted. For backward compatibility reasons, deprecated features are included + * in the result by default. + */ + omitDeprecated: boolean; +} + export class FeatureRegistry { private locked = false; private kibanaFeatures: Record = {}; @@ -207,6 +218,7 @@ export class FeatureRegistry { // Iterate over all top-level and sub-feature privileges. const isFeatureDeprecated = !!feature.deprecated; + const replacementFeatureIds = new Set(); for (const [privilegeId, privilege] of [ ...Object.entries(feature.privileges), ...collectSubFeaturesPrivileges(feature), @@ -263,6 +275,32 @@ export class FeatureRegistry { ); } } + + replacementFeatureIds.add(featureReference.feature); + } + } + + const featureReplacedBy = feature.deprecated?.replacedBy; + if (featureReplacedBy) { + if (featureReplacedBy.length === 0) { + throw new Error( + `Feature “${feature.id}” is deprecated and must have at least one feature ID added to the “replacedBy” property, or the property must be left out completely.` + ); + } + + // The feature can be marked as replaced by another feature only if that feature is actually used to replace any + // of the deprecated feature’s privileges. + const invalidFeatureIds = featureReplacedBy.filter( + (featureId) => !replacementFeatureIds.has(featureId) + ); + if (invalidFeatureIds.length > 0) { + throw new Error( + `Cannot replace deprecated feature “${ + feature.id + }” with the following features, as they aren’t used to replace feature privileges: ${invalidFeatureIds.join( + ', ' + )}.` + ); } } } @@ -272,7 +310,7 @@ export class FeatureRegistry { license, ignoreLicense = false, omitDeprecated = false, - }: GetKibanaFeaturesParams = {}): KibanaFeature[] { + }: GetKibanaFeaturesParamsInternal = {}): KibanaFeature[] { if (!this.locked) { throw new Error('Cannot retrieve Kibana features while registration is still open'); } diff --git a/x-pack/platform/plugins/shared/features/server/feature_schema.ts b/x-pack/platform/plugins/shared/features/server/feature_schema.ts index 3923eb31dbecb..4766e597f2211 100644 --- a/x-pack/platform/plugins/shared/features/server/feature_schema.ts +++ b/x-pack/platform/plugins/shared/features/server/feature_schema.ts @@ -285,7 +285,12 @@ const kibanaFeatureSchema = schema.object({ ), }) ), - deprecated: schema.maybe(schema.object({ notice: schema.string() })), + deprecated: schema.maybe( + schema.object({ + notice: schema.string(), + replacedBy: schema.maybe(schema.arrayOf(schema.string())), + }) + ), }); const elasticsearchPrivilegeSchema = schema.object({ diff --git a/x-pack/platform/plugins/shared/features/server/index.ts b/x-pack/platform/plugins/shared/features/server/index.ts index 734a1aa256f73..5e4cf929a52d2 100644 --- a/x-pack/platform/plugins/shared/features/server/index.ts +++ b/x-pack/platform/plugins/shared/features/server/index.ts @@ -23,6 +23,7 @@ export type { } from '../common'; export type { SubFeaturePrivilegeIterator } from './feature_privilege_iterator'; export { KibanaFeature, ElasticsearchFeature } from '../common'; +export type { GetKibanaFeaturesParams } from './feature_registry'; export type { FeaturesPluginSetup, FeaturesPluginStart } from './plugin'; export const config: PluginConfigDescriptor> = { schema: ConfigSchema }; diff --git a/x-pack/platform/plugins/shared/features/server/plugin.ts b/x-pack/platform/plugins/shared/features/server/plugin.ts index 9f6cae36f6aee..ebb7881c579d3 100644 --- a/x-pack/platform/plugins/shared/features/server/plugin.ts +++ b/x-pack/platform/plugins/shared/features/server/plugin.ts @@ -17,7 +17,7 @@ import { Capabilities as UICapabilities, } from '@kbn/core/server'; import { ConfigType } from './config'; -import { FeatureRegistry } from './feature_registry'; +import { FeatureRegistry, GetKibanaFeaturesParams } from './feature_registry'; import { uiCapabilitiesForFeatures } from './ui_capabilities_for_features'; import { buildOSSFeatures } from './oss_features'; import { defineRoutes } from './routes'; @@ -84,7 +84,11 @@ export interface FeaturesPluginSetup { export interface FeaturesPluginStart { getElasticsearchFeatures(): ElasticsearchFeature[]; - getKibanaFeatures(): KibanaFeature[]; + /** + * Returns all registered Kibana features. + * @param params Optional parameters to filter features. + */ + getKibanaFeatures(params?: GetKibanaFeaturesParams): KibanaFeature[]; } /** @@ -147,7 +151,10 @@ export class FeaturesPlugin getElasticsearchFeatures: this.featureRegistry.getAllElasticsearchFeatures.bind( this.featureRegistry ), - getKibanaFeatures: this.featureRegistry.getAllKibanaFeatures.bind(this.featureRegistry), + getKibanaFeatures: (params) => + this.featureRegistry.getAllKibanaFeatures( + params && { omitDeprecated: params.omitDeprecated } + ), }); } diff --git a/x-pack/platform/plugins/shared/fields_metadata/common/hashed_cache.ts b/x-pack/platform/plugins/shared/fields_metadata/common/hashed_cache.ts index c46e34224d4d6..26ee0bf602121 100644 --- a/x-pack/platform/plugins/shared/fields_metadata/common/hashed_cache.ts +++ b/x-pack/platform/plugins/shared/fields_metadata/common/hashed_cache.ts @@ -14,7 +14,7 @@ export interface IHashedCache { reset(): void; } -export class HashedCache { +export class HashedCache { private cache: LRUCache; constructor(options: LRUCache.Options = { max: 500 }) { diff --git a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts index cbc7e85e563c1..49ddccd16c5e2 100644 --- a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts +++ b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts @@ -5,6 +5,10 @@ * 2.0. */ +import type { MonitoringType } from '../types'; + +export const AGENTLESS_AGENT_POLICY_INACTIVITY_TIMEOUT = 3600; +export const AGENTLESS_AGENT_POLICY_MONITORING: MonitoringType = ['logs', 'metrics']; export const AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION = 'organization'; export const AGENTLESS_GLOBAL_TAG_NAME_DIVISION = 'division'; export const AGENTLESS_GLOBAL_TAG_NAME_TEAM = 'team'; diff --git a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts index 9cb7670f72bc0..b0a1fa29e36c9 100644 --- a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts +++ b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts @@ -10,6 +10,7 @@ export type ExperimentalFeatures = typeof allowedExperimentalValues; const _allowedExperimentalValues = { showExperimentalShipperOptions: false, useSpaceAwareness: false, + enableAutomaticAgentUpgrades: false, }; /** diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts index 27406b406d38b..26244c1e486a8 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts @@ -44,6 +44,7 @@ export interface NewAgentPolicy { keep_monitoring_alive?: boolean | null; supports_agentless?: boolean | null; global_data_tags?: GlobalDataTag[]; + agentless?: AgentlessPolicy; monitoring_pprof_enabled?: boolean; monitoring_http?: { enabled?: boolean; @@ -64,6 +65,21 @@ export interface NewAgentPolicy { max_dur?: string; }; }; + required_versions?: AgentTargetVersion[] | null; +} + +export interface AgentTargetVersion { + version: string; + percentage: number; +} + +export interface AgentlessPolicy { + resources?: { + requests?: { + memory?: string; + cpu?: string; + }; + }; } export interface GlobalDataTag { diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts index af8a0acf9b2d4..8d2dda41f727f 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts @@ -201,6 +201,12 @@ export interface DeploymentsModesAgentless extends DeploymentsModesDefault { organization?: string; division?: string; team?: string; + resources?: { + requests: { + cpu: string; + memory: string; + }; + }; } export interface DeploymentsModes { agentless: DeploymentsModesAgentless; diff --git a/x-pack/platform/plugins/shared/fleet/dev_docs/local_setup/agentless.md b/x-pack/platform/plugins/shared/fleet/dev_docs/local_setup/agentless.md index a6f62a29a7179..7657c1bcf056d 100644 --- a/x-pack/platform/plugins/shared/fleet/dev_docs/local_setup/agentless.md +++ b/x-pack/platform/plugins/shared/fleet/dev_docs/local_setup/agentless.md @@ -13,8 +13,6 @@ At the time of writing, this can be achieved by adding the following to your `ki # Emulate cloud xpack.cloud.id: "123456789" -# Enable agentless experimental feature flag in Fleet -xpack.fleet.enableExperimental: ['agentless'] # Agentless Fleet config xpack.fleet.agentless.enabled: true xpack.fleet.agentless.api.url: 'https://api.agentless.url/api/v1/ess' diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx index 4c4c7b311cb06..5b897e2097fe8 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx @@ -191,9 +191,6 @@ export function useOnSubmit({ if (packageInfo) { setHasAgentPolicyError(false); } - - // eslint-disable-next-line no-console - console.debug('Agent policy updated', updatedAgentPolicies); }, [packageInfo, agentPolicies] ); @@ -208,8 +205,6 @@ export function useOnSubmit({ spaceSettings ); setValidationResults(newValidationResult); - // eslint-disable-next-line no-console - console.debug('Package policy validation results', newValidationResult); return newValidationResult; } @@ -225,8 +220,6 @@ export function useOnSubmit({ }; setPackagePolicy(newPackagePolicy); - // eslint-disable-next-line no-console - console.debug('Package policy updated', newPackagePolicy); const newValidationResults = updatePackagePolicyValidation(newPackagePolicy); const hasPackage = newPackagePolicy.package; const hasValidationErrors = newValidationResults diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts index 1564d934b960e..2f6d87e5c1db7 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts @@ -125,6 +125,24 @@ describe('useSetupTechnology', () => { inactivity_timeout: 3600, }; + const packageInfoWithoutAgentless = { + policy_templates: [ + { + name: 'cspm', + title: 'Template 1', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + agentless: { + enabled: false, + }, + }, + }, + ] as RegistryPolicyTemplate[], + } as PackageInfo; + const packageInfoMock = { policy_templates: [ { @@ -140,6 +158,40 @@ describe('useSetupTechnology', () => { organization: 'org', division: 'div', team: 'team', + resources: { + requests: { + memory: '256Mi', + cpu: '100m', + }, + }, + }, + }, + }, + { + name: 'not-cspm', + title: 'Template 2', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + }, + }, + ] as RegistryPolicyTemplate[], + } as PackageInfo; + + const packageInfoWithoutResources = { + policy_templates: [ + { + name: 'cspm', + title: 'Template 1', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + agentless: { + enabled: true, }, }, }, @@ -246,12 +298,11 @@ describe('useSetupTechnology', () => { }) ); - expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); - act(() => { result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { + expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); expect(updatePackagePolicyMock).toHaveBeenCalledWith({ supports_agentless: true }); expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENTLESS); expect(setNewAgentPolicy).toHaveBeenCalledWith({ @@ -290,13 +341,12 @@ describe('useSetupTechnology', () => { initialProps, }); - expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); - act(() => { result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENTLESS); + expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); expect(updatePackagePolicyMock).toHaveBeenCalledWith({ supports_agentless: true }); expect(setNewAgentPolicy).toHaveBeenCalledWith({ inactivity_timeout: 3600, @@ -450,6 +500,7 @@ describe('useSetupTechnology', () => { updateAgentPolicies: updateAgentPoliciesMock, setSelectedPolicyTab: setSelectedPolicyTabMock, packagePolicy: packagePolicyMock, + packageInfo: packageInfoMock, updatePackagePolicy: updatePackagePolicyMock, }) ); @@ -469,6 +520,19 @@ describe('useSetupTechnology', () => { name: 'Agentless policy for endpoint-1', supports_agentless: true, inactivity_timeout: 3600, + global_data_tags: [ + { name: 'organization', value: 'org' }, + { name: 'division', value: 'div' }, + { name: 'team', value: 'team' }, + ], + agentless: { + resources: { + requests: { + memory: '256Mi', + cpu: '100m', + }, + }, + }, }); expect(updatePackagePolicyMock).toHaveBeenCalledWith({ supports_agentless: true }); }); @@ -484,6 +548,133 @@ describe('useSetupTechnology', () => { }); }); + it('should have agentless resources section on the request when creating agentless policy with resources', async () => { + (useConfig as MockFn).mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'https://agentless.api.url', + }, + }, + } as any); + (useStartServices as MockFn).mockReturnValue({ + cloud: { + isCloudEnabled: true, + }, + }); + + const { result } = renderHook(() => + useSetupTechnology({ + setNewAgentPolicy, + newAgentPolicy: newAgentPolicyMock, + updateAgentPolicies: updateAgentPoliciesMock, + setSelectedPolicyTab: setSelectedPolicyTabMock, + packagePolicy: packagePolicyMock, + packageInfo: packageInfoMock, + updatePackagePolicy: updatePackagePolicyMock, + }) + ); + + act(() => { + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); + }); + + await waitFor(() => { + expect(setNewAgentPolicy).toHaveBeenCalledWith( + expect.objectContaining({ + agentless: { + resources: { + requests: { + memory: '256Mi', + cpu: '100m', + }, + }, + }, + }) + ); + }); + }); + + it('should not have agentless section on the request when creating agentless policy without resources', async () => { + (useConfig as MockFn).mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'https://agentless.api.url', + }, + }, + } as any); + (useStartServices as MockFn).mockReturnValue({ + cloud: { + isCloudEnabled: true, + }, + }); + + const { result } = renderHook(() => + useSetupTechnology({ + setNewAgentPolicy, + newAgentPolicy: newAgentPolicyMock, + updateAgentPolicies: updateAgentPoliciesMock, + setSelectedPolicyTab: setSelectedPolicyTabMock, + packagePolicy: packagePolicyMock, + packageInfo: packageInfoWithoutResources, + updatePackagePolicy: updatePackagePolicyMock, + }) + ); + + act(() => { + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); + }); + + await waitFor(() => { + expect(setNewAgentPolicy).toHaveBeenCalledWith( + expect.not.objectContaining({ + agentless: {}, + }) + ); + }); + }); + + it('should not have agentless section on the request when creating policy with agentless disabled', async () => { + (useConfig as MockFn).mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'https://agentless.api.url', + }, + }, + } as any); + (useStartServices as MockFn).mockReturnValue({ + cloud: { + isCloudEnabled: true, + }, + }); + + const { result } = renderHook(() => + useSetupTechnology({ + setNewAgentPolicy, + newAgentPolicy: newAgentPolicyMock, + updateAgentPolicies: updateAgentPoliciesMock, + setSelectedPolicyTab: setSelectedPolicyTabMock, + packagePolicy: packagePolicyMock, + packageInfo: packageInfoWithoutAgentless, + updatePackagePolicy: updatePackagePolicyMock, + }) + ); + + act(() => { + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); + }); + + await waitFor(() => { + expect(setNewAgentPolicy).toHaveBeenCalledWith( + expect.not.objectContaining({ + agentless: {}, + }) + ); + }); + }); + it('should have global_data_tags with the integration team when creating agentless policy with global_data_tags', async () => { (useConfig as MockFn).mockReturnValue({ agentless: { @@ -512,7 +703,7 @@ describe('useSetupTechnology', () => { ); act(() => { - result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS, 'cspm'); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { @@ -544,6 +735,34 @@ describe('useSetupTechnology', () => { }, }); + const packageInfoWithoutGlobalDataTags = { + policy_templates: [ + { + name: 'cspm', + title: 'Template 1', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + agentless: { + enabled: true, + }, + }, + }, + { + name: 'not-cspm', + title: 'Template 2', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + }, + }, + ] as RegistryPolicyTemplate[], + } as PackageInfo; + const { result } = renderHook(() => useSetupTechnology({ setNewAgentPolicy, @@ -551,16 +770,13 @@ describe('useSetupTechnology', () => { updateAgentPolicies: updateAgentPoliciesMock, setSelectedPolicyTab: setSelectedPolicyTabMock, packagePolicy: packagePolicyMock, - packageInfo: packageInfoMock, + packageInfo: packageInfoWithoutGlobalDataTags, updatePackagePolicy: updatePackagePolicyMock, }) ); act(() => { - result.current.handleSetupTechnologyChange( - SetupTechnology.AGENTLESS, - 'never-gonna-give-you-up' - ); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { @@ -594,6 +810,34 @@ describe('useSetupTechnology', () => { }, }); + const packageInfoWithoutGlobalDataTags = { + policy_templates: [ + { + name: 'cspm', + title: 'Template 1', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + agentless: { + enabled: true, + }, + }, + }, + { + name: 'not-cspm', + title: 'Template 2', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + }, + }, + ] as RegistryPolicyTemplate[], + } as PackageInfo; + const { result } = renderHook(() => useSetupTechnology({ setNewAgentPolicy, @@ -601,7 +845,7 @@ describe('useSetupTechnology', () => { updateAgentPolicies: updateAgentPoliciesMock, setSelectedPolicyTab: setSelectedPolicyTabMock, packagePolicy: packagePolicyMock, - packageInfo: packageInfoMock, + packageInfo: packageInfoWithoutGlobalDataTags, updatePackagePolicy: updatePackagePolicyMock, }) ); @@ -653,7 +897,7 @@ describe('useSetupTechnology', () => { ); act(() => { - result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS, 'cspm'); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { @@ -700,10 +944,11 @@ describe('useSetupTechnology', () => { ); act(() => { - result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS, 'cspm'); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { + expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENTLESS); expect(setNewAgentPolicy).toHaveBeenCalledWith( expect.objectContaining({ supports_agentless: true, @@ -721,6 +966,7 @@ describe('useSetupTechnology', () => { }); await waitFor(() => { + expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENT_BASED); expect(setNewAgentPolicy).toHaveBeenCalledWith(newAgentPolicyMock); expect(setNewAgentPolicy).not.toHaveBeenCalledWith({ global_data_tags: [ diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts index 85f5cbdc5fae1..b8ae5c77d5815 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { useCallback, useMemo, useRef, useState } from 'react'; import { useConfig } from '../../../../../hooks'; import { generateNewAgentPolicyWithDefaults } from '../../../../../../../../common/services/generate_new_agent_policy'; @@ -22,6 +22,8 @@ import { AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION, AGENTLESS_GLOBAL_TAG_NAME_DIVISION, AGENTLESS_GLOBAL_TAG_NAME_TEAM, + AGENTLESS_AGENT_POLICY_INACTIVITY_TIMEOUT, + AGENTLESS_AGENT_POLICY_MONITORING, } from '../../../../../../../../common/constants'; import { isAgentlessIntegration as isAgentlessIntegrationFn, @@ -81,150 +83,155 @@ export function useSetupTechnology({ const { isAgentlessEnabled } = useAgentless(); // this is a placeholder for the new agent-BASED policy that will be used when the user switches from agentless to agent-based and back - const newAgentBasedPolicy = useRef(newAgentPolicy); + const orginalAgentPolicyRef = useRef({ ...newAgentPolicy }); + const [currentAgentPolicy, setCurrentAgentPolicy] = useState(newAgentPolicy); const defaultSetupTechnology = useMemo(() => { - return isOnlyAgentlessIntegration(packageInfo) + return isOnlyAgentlessIntegration(packageInfo) || isAgentlessSetupDefault(packageInfo) ? SetupTechnology.AGENTLESS : SetupTechnology.AGENT_BASED; }, [packageInfo]); const [selectedSetupTechnology, setSelectedSetupTechnology] = useState(defaultSetupTechnology); - const [newAgentlessPolicy, setNewAgentlessPolicy] = useState(() => { - const agentless = generateNewAgentPolicyWithDefaults({ - inactivity_timeout: 3600, - supports_agentless: true, - monitoring_enabled: ['logs', 'metrics'], - }); - return agentless; - }); - useEffect(() => { - if (isEditPage && agentPolicies && agentPolicies.some((policy) => policy.supports_agentless)) { - setSelectedSetupTechnology(SetupTechnology.AGENTLESS); - return; - } - if (isAgentlessEnabled && selectedSetupTechnology === SetupTechnology.AGENTLESS) { - const nextNewAgentlessPolicy = { - ...newAgentlessPolicy, - name: getAgentlessAgentPolicyNameFromPackagePolicyName(packagePolicy.name), - }; - if (!newAgentlessPolicy.name || nextNewAgentlessPolicy.name !== newAgentlessPolicy.name) { - setNewAgentlessPolicy(nextNewAgentlessPolicy); - setNewAgentPolicy(nextNewAgentlessPolicy as NewAgentPolicy); - updateAgentPolicies([nextNewAgentlessPolicy] as AgentPolicy[]); - } - } - if ( - selectedSetupTechnology === SetupTechnology.AGENTLESS && - !packagePolicy.supports_agentless - ) { - updatePackagePolicy({ - supports_agentless: true, - }); - } else if ( - selectedSetupTechnology !== SetupTechnology.AGENTLESS && - packagePolicy.supports_agentless - ) { - updatePackagePolicy({ - supports_agentless: false, - }); - } - }, [ - isAgentlessEnabled, - isEditPage, - newAgentlessPolicy, - packagePolicy.name, - packagePolicy.supports_agentless, - selectedSetupTechnology, - updateAgentPolicies, - setNewAgentPolicy, - agentPolicies, - setSelectedSetupTechnology, - updatePackagePolicy, - ]); + const agentlessPolicyName = getAgentlessAgentPolicyNameFromPackagePolicyName(packagePolicy.name); const handleSetupTechnologyChange = useCallback( - (setupTechnology: SetupTechnology, policyTemplateName?: string) => { + (setupTechnology: SetupTechnology) => { if (!isAgentlessEnabled || setupTechnology === selectedSetupTechnology) { return; } - - if (setupTechnology === SetupTechnology.AGENTLESS) { - if (isAgentlessEnabled) { - const agentlessPolicy = { - ...newAgentlessPolicy, - ...getAdditionalAgentlessPolicyInfo(policyTemplateName, packageInfo), - } as NewAgentPolicy; - - setNewAgentPolicy(agentlessPolicy); - setNewAgentlessPolicy(agentlessPolicy); - setSelectedPolicyTab(SelectedPolicyTab.NEW); - updateAgentPolicies([agentlessPolicy] as AgentPolicy[]); - } - updatePackagePolicy({ - supports_agentless: true, - }); - } else if (setupTechnology === SetupTechnology.AGENT_BASED) { - setNewAgentPolicy({ - ...newAgentBasedPolicy.current, - supports_agentless: false, - }); - updatePackagePolicy({ - supports_agentless: false, - }); - setSelectedPolicyTab(SelectedPolicyTab.NEW); - updateAgentPolicies([newAgentBasedPolicy.current] as AgentPolicy[]); - } + setSelectedPolicyTab(SelectedPolicyTab.NEW); setSelectedSetupTechnology(setupTechnology); }, - [ - isAgentlessEnabled, - selectedSetupTechnology, - updatePackagePolicy, - setNewAgentPolicy, - newAgentlessPolicy, - packageInfo, - setSelectedPolicyTab, - updateAgentPolicies, - ] + [isAgentlessEnabled, selectedSetupTechnology, setSelectedPolicyTab, setSelectedSetupTechnology] ); + if ( + isEditPage && + agentPolicies && + agentPolicies.some((policy) => policy.supports_agentless) && + selectedSetupTechnology === SetupTechnology.AGENT_BASED + ) { + setSelectedSetupTechnology(SetupTechnology.AGENTLESS); + } + + if ( + !isEditPage && + packagePolicy && + isAgentlessEnabled && + selectedSetupTechnology === SetupTechnology.AGENTLESS && + (!currentAgentPolicy.supports_agentless || agentlessPolicyName !== currentAgentPolicy.name) + ) { + const nextNewAgentlessPolicy = { + ...generateNewAgentPolicyWithDefaults({ + inactivity_timeout: AGENTLESS_AGENT_POLICY_INACTIVITY_TIMEOUT, + supports_agentless: true, + monitoring_enabled: AGENTLESS_AGENT_POLICY_MONITORING, + }), + name: agentlessPolicyName, + global_data_tags: getGlobaDataTags(packageInfo), + }; + + const agentlessPolicy = getAgentlessPolicy(packageInfo); + if (agentlessPolicy) { + nextNewAgentlessPolicy.agentless = agentlessPolicy; + } + + setCurrentAgentPolicy(nextNewAgentlessPolicy); + setNewAgentPolicy(nextNewAgentlessPolicy as NewAgentPolicy); + updateAgentPolicies([nextNewAgentlessPolicy] as AgentPolicy[]); + updatePackagePolicy({ + supports_agentless: true, + }); + } + + if ( + !isEditPage && + selectedSetupTechnology === SetupTechnology.AGENT_BASED && + (currentAgentPolicy.supports_agentless || packagePolicy.supports_agentless) + ) { + const nextNewAgentlessPolicy = { + ...orginalAgentPolicyRef.current, + supports_agentless: false, + }; + setCurrentAgentPolicy(nextNewAgentlessPolicy); + setNewAgentPolicy(nextNewAgentlessPolicy); + updateAgentPolicies([nextNewAgentlessPolicy] as AgentPolicy[]); + updatePackagePolicy({ + supports_agentless: false, + }); + } + return { handleSetupTechnologyChange, selectedSetupTechnology, + defaultSetupTechnology, }; } -const getAdditionalAgentlessPolicyInfo = ( - policyTemplateName?: string, - packageInfo?: PackageInfo -) => { - if (!policyTemplateName || !packageInfo) { - return {}; +const isAgentlessSetupDefault = (packageInfo?: PackageInfo) => { + // TODO: /~https://github.com/elastic/kibana/issues/205761 + // placeholder for the logic to determine if the agentless setup is the default + return false; +}; + +const getGlobaDataTags = (packageInfo?: PackageInfo) => { + if ( + !packageInfo?.policy_templates && + !packageInfo?.policy_templates?.some((policy) => policy.deployment_modes) + ) { + return undefined; } - const agentlessPolicyTemplate = policyTemplateName - ? packageInfo?.policy_templates?.find((policy) => policy.name === policyTemplateName) - : undefined; + const agentlessPolicyTemplate = packageInfo.policy_templates.find( + (policy) => policy.deployment_modes + ); + // assumes that all the policy templates agentless deployments modes indentify have the same organization, division and team const agentlessInfo = agentlessPolicyTemplate?.deployment_modes?.agentless; - return !agentlessInfo - ? {} - : { - global_data_tags: agentlessInfo - ? [ - { - name: AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION, - value: agentlessInfo.organization, - }, - { - name: AGENTLESS_GLOBAL_TAG_NAME_DIVISION, - value: agentlessInfo.division, - }, - { - name: AGENTLESS_GLOBAL_TAG_NAME_TEAM, - value: agentlessInfo.team, - }, - ] - : [], - }; + if ( + agentlessInfo === undefined || + !agentlessInfo.organization || + !agentlessInfo.division || + !agentlessInfo.team + ) { + return undefined; + } + + return [ + { + name: AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION, + value: agentlessInfo.organization, + }, + { + name: AGENTLESS_GLOBAL_TAG_NAME_DIVISION, + value: agentlessInfo.division, + }, + { + name: AGENTLESS_GLOBAL_TAG_NAME_TEAM, + value: agentlessInfo.team, + }, + ]; +}; + +const getAgentlessPolicy = (packageInfo?: PackageInfo) => { + if ( + !packageInfo?.policy_templates && + !packageInfo?.policy_templates?.some((policy) => policy.deployment_modes) + ) { + return; + } + const agentlessPolicyTemplate = packageInfo.policy_templates.find( + (policy) => policy.deployment_modes + ); + + // assumes that all the policy templates agentless deployments modes indentify have the same organization, division and team + const agentlessInfo = agentlessPolicyTemplate?.deployment_modes?.agentless; + + if (!agentlessInfo?.resources) { + return; + } + + return { + resources: agentlessInfo.resources, + }; }; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx index a79db9ea1edda..9b295b4fe789b 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx @@ -83,7 +83,13 @@ jest.mock('../../../../hooks', () => { data: { item: {} }, }), sendCreatePackagePolicy: jest.fn().mockResolvedValue({ - data: { item: { id: 'policy-1', inputs: [], policy_ids: ['agent-policy-1'] } }, + data: { + item: { + id: 'policy-1', + inputs: [], + policy_ids: ['agent-policy-1'], + }, + }, }), sendCreateAgentPolicy: jest.fn().mockResolvedValue({ data: { item: { id: 'agent-policy-2', name: 'Agent policy 2', namespace: 'default' } }, @@ -190,7 +196,16 @@ describe('When on the package policy create page', () => { }, ], multiple: true, - deployment_modes: { agentless: { enabled: options?.agentlessEnabled } }, + deployment_modes: options?.agentlessEnabled + ? { + agentless: { + enabled: true, + organization: 'org', + division: 'division', + team: 'team', + }, + } + : { agentless: { enabled: false } }, }, ], data_streams: [ @@ -740,8 +755,13 @@ describe('When on the package policy create page', () => { }); test('should create agentless agent policy and package policy when in cloud and agentless API url is set', async () => { + await waitFor(() => { + expect(renderResult.getByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ)).toBeInTheDocument(); + }); + fireEvent.click(renderResult.getByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ)); fireEvent.click(renderResult.getAllByText('Agentless')[0]); + await act(async () => { fireEvent.click(renderResult.getByText(/Save and continue/).closest('button')!); }); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx index 3941c92a76c39..a13b7f685480d 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx @@ -351,15 +351,16 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ ); } const { isAgentlessIntegration } = useAgentless(); - const { handleSetupTechnologyChange, selectedSetupTechnology } = useSetupTechnology({ - newAgentPolicy, - setNewAgentPolicy, - updateAgentPolicies, - updatePackagePolicy, - setSelectedPolicyTab, - packageInfo, - packagePolicy, - }); + const { handleSetupTechnologyChange, selectedSetupTechnology, defaultSetupTechnology } = + useSetupTechnology({ + newAgentPolicy, + setNewAgentPolicy, + updateAgentPolicies, + updatePackagePolicy, + setSelectedPolicyTab, + packageInfo, + packagePolicy, + }); const replaceStepConfigurePackagePolicy = replaceDefineStepView && packageInfo?.name ? ( @@ -376,6 +377,7 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ isEditPage={false} handleSetupTechnologyChange={handleSetupTechnologyChange} isAgentlessEnabled={isAgentlessIntegration(packageInfo)} + defaultSetupTechnology={defaultSetupTechnology} /> ) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx index 303b4e9075fa3..752c44141bcc6 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx @@ -342,25 +342,21 @@ export const AgentListTable: React.FC = (props: Props) => { totalItemCount: totalAgents, pageSizeOptions, }} - selection={ - !authz.fleet.allAgents - ? undefined - : { - selected, - onSelectionChange, - selectable: isAgentSelectable, - selectableMessage: (selectable, agent) => { - if (selectable) return ''; - if (!agent.active) { - return 'This agent is not active'; - } - if (agent.policy_id && agentPoliciesIndexedById[agent.policy_id].is_managed) { - return 'This action is not available for agents enrolled in an externally managed agent policy'; - } - return ''; - }, - } - } + selection={{ + selected, + onSelectionChange, + selectable: isAgentSelectable, + selectableMessage: (selectable, agent) => { + if (selectable) return ''; + if (!agent.active) { + return 'This agent is not active'; + } + if (agent.policy_id && agentPoliciesIndexedById[agent.policy_id].is_managed) { + return 'This action is not available for agents enrolled in an externally managed agent policy'; + } + return ''; + }, + }} onChange={onTableChange} sorting={sorting} /> diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx index 111dd2eb0ff30..7a349c96a19b2 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx @@ -15,7 +15,7 @@ import { createFleetTestRendererMock } from '../../../../../../mock'; import type { LicenseService } from '../../../../services'; import { ExperimentalFeaturesService } from '../../../../services'; import { AgentReassignAgentPolicyModal } from '../../components/agent_reassign_policy_modal'; - +import { useAuthz } from '../../../../../../hooks/use_authz'; import { useLicense } from '../../../../../../hooks/use_license'; import { AgentBulkActions } from './bulk_actions'; @@ -24,6 +24,7 @@ jest.mock('../../../../../../services/experimental_features'); const mockedExperimentalFeaturesService = jest.mocked(ExperimentalFeaturesService); jest.mock('../../../../../../hooks/use_license'); +jest.mock('../../../../../../hooks/use_authz'); const mockedUseLicence = useLicense as jest.MockedFunction; jest.mock('../../components/agent_reassign_policy_modal'); @@ -49,6 +50,13 @@ const defaultProps = { describe('AgentBulkActions', () => { beforeAll(() => { mockedExperimentalFeaturesService.get.mockReturnValue({} as any); + jest.mocked(useAuthz).mockReturnValue({ + fleet: { + allAgents: true, + readAgents: true, + }, + integrations: {}, + } as any); }); beforeEach(() => { diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx index 92e3dc56231d2..bd29cfb132e17 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx @@ -23,7 +23,7 @@ import { AgentUnenrollAgentModal, AgentUpgradeAgentModal, } from '../../components'; -import { useLicense } from '../../../../hooks'; +import { useAuthz, useLicense } from '../../../../hooks'; import { LICENSE_FOR_SCHEDULE_UPGRADE, AGENTS_PREFIX } from '../../../../../../../common/constants'; import { getCommonTags } from '../utils'; @@ -65,6 +65,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ sortOrder, }) => { const licenseService = useLicense(); + const authz = useAuthz(); const isLicenceAllowingScheduleUpgrade = licenseService.hasAtLeast(LICENSE_FOR_SCHEDULE_UPGRADE); // Bulk actions menu states @@ -117,6 +118,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , + disabled: !authz.fleet.allAgents, onClick: (event: any) => { setTagsPopoverButton((event.target as Element).closest('button')!); setIsTagAddVisible(!isTagAddVisible); @@ -131,6 +133,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , + disabled: !authz.fleet.allAgents, onClick: () => { closeMenu(); setIsReassignFlyoutOpen(true); @@ -148,6 +151,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , + disabled: !authz.fleet.allAgents, onClick: () => { closeMenu(); setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: false }); @@ -165,7 +169,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !isLicenceAllowingScheduleUpgrade, + disabled: !authz.fleet.allAgents || !isLicenceAllowingScheduleUpgrade, onClick: () => { closeMenu(); setUpgradeModalState({ isOpen: true, isScheduled: true, isUpdating: false }); @@ -183,6 +187,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , + disabled: !authz.fleet.allAgents, onClick: () => { closeMenu(); setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: true }); @@ -199,6 +204,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ }} /> ), + disabled: !authz.fleet.readAgents, icon: , onClick: () => { closeMenu(); @@ -216,6 +222,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ }} /> ), + disabled: !authz.fleet.allAgents, icon: , onClick: () => { closeMenu(); @@ -233,6 +240,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ }} /> ), + disabled: !authz.fleet.readAgents, icon: , onClick: () => { closeMenu(); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx index 7375ecdf27bfc..61c8891a5c997 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx @@ -210,8 +210,8 @@ export const SearchAndFilterBar: React.FunctionComponent - {(authz.fleet.allAgents && selectionMode === 'manual' && selectedAgents.length) || - (authz.fleet.allAgents && selectionMode === 'query' && nAgentsInTable > 0) ? ( + {(selectionMode === 'manual' && selectedAgents.length) || + (selectionMode === 'query' && nAgentsInTable > 0) ? ( void; + defaultSetupTechnology?: SetupTechnology; }; /** diff --git a/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.test.ts b/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.test.ts index 4f15ea3e6558f..920a4d0c6d621 100644 --- a/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.test.ts +++ b/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.test.ts @@ -12,7 +12,12 @@ import type { Logger } from '@kbn/core/server'; import { appContextService } from '../../server/services/app_context'; -import { verifyAllTestPackages } from './verify_test_packages'; +import { + getAllTestPackagesPaths, + getAllTestPackagesZip, + verifyTestPackage, + verifyTestPackageFromPath, +} from './verify_test_packages'; jest.mock('../../server/services/app_context'); @@ -23,15 +28,21 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ let mockedLogger: jest.Mocked; -// FLAKY: /~https://github.com/elastic/kibana/issues/200787 -describe.skip('Test packages', () => { +describe('Test packages', () => { beforeEach(() => { mockedLogger = loggerMock.create(); mockedAppContextService.getLogger.mockReturnValue(mockedLogger); }); - test('All test packages should be valid (node scripts/verify_test_packages) ', async () => { - const { errors } = await verifyAllTestPackages(); - expect(errors).toEqual([]); - }); + for (const zip of getAllTestPackagesZip()) { + test(`${zip} should be a valid package`, async () => { + await verifyTestPackage(zip); + }); + } + + for (const { topLevelDir, paths } of getAllTestPackagesPaths()) { + test(`${topLevelDir} should be a valid package`, async () => { + await verifyTestPackageFromPath(paths, topLevelDir); + }); + } }); diff --git a/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.ts b/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.ts index 33ac12a6cade3..c26dbc0dd7245 100644 --- a/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.ts +++ b/x-pack/platform/plugins/shared/fleet/scripts/verify_test_packages/verify_test_packages.ts @@ -15,13 +15,13 @@ import type { Logger } from '@kbn/core/server'; import { ToolingLog } from '@kbn/tooling-log'; import { - _generatePackageInfoFromPaths, generatePackageInfoFromArchiveBuffer, + _generatePackageInfoFromPaths, } from '../../server/services/epm/archive/parse'; const readFileAsync = promisify(readFile); -const TEST_PACKAGE_DIRECTORIES = [ +export const TEST_PACKAGE_DIRECTORIES = [ '../../../../../../test/fleet_api_integration/apis/fixtures/bundled_packages', '../../../../../../test/fleet_api_integration/apis/fixtures/test_packages', '../../../../../../test/fleet_api_integration/apis/fixtures/package_verification/packages', @@ -62,43 +62,77 @@ export const run = async () => { } }; +export async function verifyTestPackage(zipPath: string, logger?: ToolingLog | Logger) { + const buffer = await readFileAsync(zipPath); + try { + const { packageInfo } = await generatePackageInfoFromArchiveBuffer(buffer, 'application/zip'); + logger?.info(`Successfully parsed zip pkg ${packageInfo.name}-${packageInfo.version}`); + } catch (e) { + logger?.error(`Error parsing ${zipPath} : ${e}`); + throw e; + } +} + +export async function verifyTestPackageFromPath( + packagePaths: string[], + topLevelDir: string, + logger?: ToolingLog | Logger +) { + try { + const packageInfo = await _generatePackageInfoFromPaths(packagePaths, topLevelDir); + logger?.info(`Successfully parsed zip pkg ${packageInfo.name}-${packageInfo.version}`); + } catch (e) { + logger?.error(`Error parsing ${topLevelDir} : ${e}`); + throw e; + } +} + +export function getAllTestPackagesZip() { + return TEST_PACKAGE_DIRECTORIES.reduce((acc, dir) => { + const packageVersionPaths = getAllPackagesFromDir(path.join(__dirname, dir)); + const [zips] = partition(packageVersionPaths, (p) => p.endsWith('.zip')); + + return [...acc, ...zips]; + }, [] as string[]); +} + +export function getAllTestPackagesPaths() { + return TEST_PACKAGE_DIRECTORIES.reduce((acc, dir) => { + const packageVersionPaths = getAllPackagesFromDir(path.join(__dirname, dir)); + const [_, dirs] = partition(packageVersionPaths, (p) => p.endsWith('.zip')); + + const allPackageDirPaths = dirs.map(getAllPathsFromDir); + return [ + ...acc, + ...[...allPackageDirPaths.entries()].map(([i, paths]) => ({ + topLevelDir: packageVersionPaths[i], + paths, + })), + ]; + }, [] as Array<{ topLevelDir: string; paths: string[] }>); +} + export const verifyAllTestPackages = async ( logger?: ToolingLog | Logger ): Promise<{ successCount: number; errors: Error[] }> => { const errors = []; let successCount = 0; - for (const dir of TEST_PACKAGE_DIRECTORIES) { - const packageVersionPaths = getAllPackagesFromDir(path.join(__dirname, dir)); - const [zips, dirs] = partition(packageVersionPaths, (p) => p.endsWith('.zip')); - - for (const zipPath of zips) { - const buffer = await readFileAsync(zipPath); - - try { - const { packageInfo } = await generatePackageInfoFromArchiveBuffer( - buffer, - 'application/zip' - ); - logger?.info(`Successfully parsed zip pkg ${packageInfo.name}-${packageInfo.version}`); - successCount++; - } catch (e) { - logger?.error(`Error parsing ${zipPath} : ${e}`); - errors.push(e); - } + for (const zipPath of getAllTestPackagesZip()) { + try { + await verifyTestPackage(zipPath, logger); + successCount++; + } catch (e) { + errors.push(e); } + } - const allPackageDirPaths = dirs.map(getAllPathsFromDir); - for (const [i, packagePaths] of allPackageDirPaths.entries()) { - const topLevelDir = packageVersionPaths[i]; - try { - const packageInfo = await _generatePackageInfoFromPaths(packagePaths, topLevelDir); - logger?.info(`Successfully parsed ${packageInfo.name}-${packageInfo.version}`); - successCount++; - } catch (e) { - logger?.error(`Error parsing ${topLevelDir} : ${e}`); - errors.push(e); - } + for (const { topLevelDir, paths } of getAllTestPackagesPaths()) { + try { + await verifyTestPackageFromPath(paths, topLevelDir, logger); + successCount++; + } catch (e) { + errors.push(e); } } diff --git a/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts b/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts index 2dfdf333fd72d..e6695fc5bb2e2 100644 --- a/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts @@ -247,6 +247,10 @@ export const getSavedObjectTypes = ( advanced_settings: { type: 'flattened', index: false }, supports_agentless: { type: 'boolean' }, global_data_tags: { type: 'flattened', index: false }, + agentless: { + dynamic: false, + properties: {}, + }, monitoring_pprof_enabled: { type: 'boolean', index: false }, monitoring_http: { type: 'flattened', index: false }, monitoring_diagnostics: { type: 'flattened', index: false }, @@ -314,6 +318,19 @@ export const getSavedObjectTypes = ( }, ], }, + '6': { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + agentless: { + dynamic: false, + properties: {}, + }, + }, + }, + ], + }, }, }, [AGENT_POLICY_SAVED_OBJECT_TYPE]: { @@ -358,6 +375,10 @@ export const getSavedObjectTypes = ( advanced_settings: { type: 'flattened', index: false }, supports_agentless: { type: 'boolean' }, global_data_tags: { type: 'flattened', index: false }, + agentless: { + dynamic: false, + properties: {}, + }, }, }, modelVersions: { diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/index.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/index.ts index 43d2561001d9f..7a3b5d6013c32 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/index.ts @@ -11,3 +11,4 @@ export { storedPackagePoliciesToAgentInputs, } from './package_policies_to_agent_inputs'; export { getDataOutputForAgentPolicy, validateOutputForPolicy } from './outputs_helpers'; +export { validateRequiredVersions } from './required_versions'; diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/required_versions.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/required_versions.test.ts new file mode 100644 index 0000000000000..1a97169c69729 --- /dev/null +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/required_versions.test.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { appContextService } from '..'; +import { AgentPolicyInvalidError } from '../../errors'; + +import { validateRequiredVersions } from './required_versions'; + +describe('validateRequiredVersions', () => { + it('should throw error if feature flag is disabled', () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enableAutomaticAgentUpgrades: false } as any); + + expect(() => { + validateRequiredVersions('test policy', [{ version: '9.0.0', percentage: 100 }]); + }).toThrow( + new AgentPolicyInvalidError( + `Policy "test policy" failed validation: required_versions are not allowed when automatic upgrades feature is disabled` + ) + ); + }); + + describe('feature flag enabled', () => { + beforeEach(() => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enableAutomaticAgentUpgrades: true } as any); + }); + + it('should throw error if duplicate versions', () => { + expect(() => { + validateRequiredVersions('test policy', [ + { version: '9.0.0', percentage: 10 }, + { version: '9.0.0', percentage: 10 }, + ]); + }).toThrow( + new AgentPolicyInvalidError( + `Policy "test policy" failed validation: duplicate versions not allowed in required_versions` + ) + ); + }); + + it('should throw error if has invalid semver version', () => { + expect(() => { + validateRequiredVersions('test policy', [ + { version: '9.0.0', percentage: 10 }, + { version: '9.0.0invalid', percentage: 10 }, + ]); + }).toThrow( + new AgentPolicyInvalidError( + `Policy "test policy" failed validation: invalid semver version 9.0.0invalid in required_versions` + ) + ); + }); + + it('should throw error if sum of percentages exceeds 100', () => { + expect(() => { + validateRequiredVersions('test policy', [ + { version: '9.0.0', percentage: 100 }, + { version: '9.1.0', percentage: 10 }, + ]); + }).toThrow( + new AgentPolicyInvalidError( + `Policy "test policy" failed validation: sum of required_versions percentages cannot exceed 100` + ) + ); + }); + + it('should not throw error if valid required_versions', () => { + validateRequiredVersions('test policy', [ + { version: '9.0.0', percentage: 90 }, + { version: '9.1.0', percentage: 10 }, + ]); + }); + + it('should not throw error if required_versions undefined', () => { + validateRequiredVersions('test policy'); + }); + }); +}); diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/required_versions.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/required_versions.ts new file mode 100644 index 0000000000000..1b12c9b5c4307 --- /dev/null +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/required_versions.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 semverValid from 'semver/functions/valid'; + +import type { AgentTargetVersion } from '../../../common/types'; + +import { AgentPolicyInvalidError } from '../../errors'; +import { appContextService } from '..'; + +export function validateRequiredVersions( + name: string, + requiredVersions?: AgentTargetVersion[] | null +): void { + if (!requiredVersions) { + return; + } + if (!appContextService.getExperimentalFeatures().enableAutomaticAgentUpgrades) { + throw new AgentPolicyInvalidError( + `Policy "${name}" failed validation: required_versions are not allowed when automatic upgrades feature is disabled` + ); + } + const versions = requiredVersions.map((v) => v.version); + const uniqueVersions = new Set(versions); + if (versions.length !== uniqueVersions.size) { + throw new AgentPolicyInvalidError( + `Policy "${name}" failed validation: duplicate versions not allowed in required_versions` + ); + } + versions.forEach((version) => { + if (!semverValid(version)) { + throw new AgentPolicyInvalidError( + `Policy "${name}" failed validation: invalid semver version ${version} in required_versions` + ); + } + }); + const sumOfPercentages = requiredVersions.reduce((acc, v) => acc + v.percentage, 0); + if (sumOfPercentages > 100) { + throw new AgentPolicyInvalidError( + `Policy "${name}" failed validation: sum of required_versions percentages cannot exceed 100` + ); + } +} diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts index c0457eb589887..0fbb8886f1d61 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policy.ts @@ -116,7 +116,11 @@ import { incrementPackagePolicyCopyName } from './package_policies'; import { outputService } from './output'; import { agentPolicyUpdateEventHandler } from './agent_policy_update'; import { escapeSearchQueryPhrase, normalizeKuery as _normalizeKuery } from './saved_object'; -import { getFullAgentPolicy, validateOutputForPolicy } from './agent_policies'; +import { + getFullAgentPolicy, + validateOutputForPolicy, + validateRequiredVersions, +} from './agent_policies'; import { auditLoggingService } from './audit_logging'; import { licenseService } from './license'; import { createSoFindIterable } from './utils/create_so_find_iterable'; @@ -409,6 +413,7 @@ class AgentPolicyService { namespace: agentPolicy.namespace, }); await validateOutputForPolicy(soClient, agentPolicy); + validateRequiredVersions(agentPolicy.name, agentPolicy.required_versions); const newSo = await soClient.create( savedObjectType, @@ -709,6 +714,7 @@ class AgentPolicyService { namespace: agentPolicy.namespace, }); } + validateRequiredVersions(agentPolicy.name ?? id, agentPolicy.required_versions); const existingAgentPolicy = await this.get(soClient, id, true); @@ -815,6 +821,7 @@ class AgentPolicyService { 'fleet_server_host_id', 'supports_agentless', 'global_data_tags', + 'agentless', 'monitoring_pprof_enabled', 'monitoring_http', 'monitoring_diagnostics', diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts index 042f9dce7f772..9cf952c9d94c7 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts @@ -285,6 +285,119 @@ describe('Agentless Agent service', () => { ); }); + it('should create agentless agent with resources', async () => { + const returnValue = { + id: 'mocked', + regional_id: 'mocked', + }; + + (axios as jest.MockedFunction).mockResolvedValueOnce(returnValue); + const soClient = getAgentPolicyCreateMock(); + // ignore unrelated unique name constraint + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isCloudEnabled: true, isServerlessEnabled: true } as any); + jest + .spyOn(appContextService, 'getKibanaVersion') + .mockReturnValue('mocked-kibana-version-infinite'); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-fleet-enrollment-policy-id', + api_key: 'mocked-fleet-enrollment-api-key', + }, + ], + } as any); + + const createAgentlessAgentReturnValue = await agentlessAgentService.createAgentlessAgent( + esClient, + soClient, + { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + agentless: { + resources: { + requests: { + memory: '1Gi', + cpu: '500m', + }, + }, + }, + global_data_tags: [ + { + name: 'organization', + value: 'elastic', + }, + { + name: 'division', + value: 'cloud', + }, + { + name: 'team', + value: 'fleet', + }, + ], + } as AgentPolicy + ); + + expect(axios).toHaveBeenCalledTimes(1); + expect(createAgentlessAgentReturnValue).toEqual(returnValue); + expect(axios).toHaveBeenCalledWith( + expect.objectContaining({ + data: { + fleet_token: 'mocked-fleet-enrollment-api-key', + fleet_url: 'http://fleetserver:8220', + policy_id: 'mocked-agentless-agent-policy-id', + resources: { + requests: { + memory: '1Gi', + cpu: '500m', + }, + }, + labels: { + owner: { + org: 'elastic', + division: 'cloud', + team: 'fleet', + }, + }, + }, + headers: expect.anything(), + httpsAgent: expect.anything(), + method: 'POST', + url: 'http://api.agentless.com/api/v1/serverless/deployments', + }) + ); + }); + it('should create agentless agent when no labels are given', async () => { const returnValue = { id: 'mocked', diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts index 3d6c8bba563ab..ab65d497ba525 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts @@ -110,6 +110,7 @@ class AgentlessAgentService { policy_id: policyId, fleet_url: fleetUrl, fleet_token: fleetToken, + resources: agentlessAgentPolicy.agentless?.resources, labels, }, method: 'POST', diff --git a/x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts b/x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts index 0f79cd8464e3e..978bcda2dbbc6 100644 --- a/x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/telemetry/sender.test.ts @@ -15,6 +15,8 @@ import type { InfoResponse } from '@elastic/elasticsearch/lib/api/types'; import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { Observable } from 'rxjs'; + import { UpdateEventType } from '../services/upgrade_sender'; import { TelemetryEventsSender } from './sender'; @@ -63,6 +65,7 @@ describe('TelemetryEventsSender', () => { it('should send events when due', async () => { sender['telemetryStart'] = { getIsOptedIn: jest.fn(async () => true), + isOptedIn$: new Observable(), }; sender['telemetrySetup'] = { getTelemetryUrl: jest.fn( @@ -93,6 +96,7 @@ describe('TelemetryEventsSender', () => { it("shouldn't send when telemetry is disabled", async () => { const telemetryStart = { getIsOptedIn: jest.fn(async () => false), + isOptedIn$: new Observable(), }; sender['telemetryStart'] = telemetryStart; @@ -115,6 +119,7 @@ describe('TelemetryEventsSender', () => { it('should send events to separate channels', async () => { sender['telemetryStart'] = { getIsOptedIn: jest.fn(async () => true), + isOptedIn$: new Observable(), }; sender['telemetrySetup'] = { getTelemetryUrl: jest.fn( diff --git a/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.test.ts b/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.test.ts index 2dea7144df4f5..2b93f1be0ab6b 100644 --- a/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.test.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { GlobalDataTag } from '../../../common/types'; +import type { AgentlessPolicy, GlobalDataTag } from '../../../common/types'; import { AgentPolicyBaseSchema } from './agent_policy'; @@ -91,5 +91,56 @@ describe('AgentPolicyBaseSchema', () => { AgentPolicyBaseSchema.global_data_tags.validate(tags); }).not.toThrow(); }); + + it('should not throw an error if provided with empty agentless resources', () => { + const agentless: AgentlessPolicy = {}; + + expect(() => { + AgentPolicyBaseSchema.agentless.validate(agentless); + }).not.toThrow(); + }); + + it('should not throw an error if provided with valid agentless resources', () => { + const agentless: AgentlessPolicy = { + resources: { + requests: { + memory: '1Gi', + cpu: '1', + }, + }, + }; + + expect(() => { + AgentPolicyBaseSchema.agentless.validate(agentless); + }).not.toThrow(); + }); + + it('should throw an error if provided with invalid agentless memory', () => { + const agentless: AgentlessPolicy = { + resources: { + requests: { + memory: '1', + }, + }, + }; + + expect(() => { + AgentPolicyBaseSchema.agentless.validate(agentless); + }).toThrow(); + }); + + it('should throw an error if provided with invalid agentless CPU', () => { + const agentless: AgentlessPolicy = { + resources: { + requests: { + cpu: '1CPU', + }, + }, + }; + + expect(() => { + AgentPolicyBaseSchema.agentless.validate(agentless); + }).toThrow(); + }); }); }); diff --git a/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.ts b/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.ts index cc7dabe253ec1..f228fc91665ae 100644 --- a/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/server/types/models/agent_policy.ts @@ -39,6 +39,20 @@ function isInteger(n: number) { } } +const memoryRegex = /^\d+(Mi|Gi)$/; +function validateMemory(s: string) { + if (!memoryRegex.test(s)) { + return 'Invalid memory format'; + } +} + +const cpuRegex = /^(\d+m|\d+(\.\d+)?)$/; +function validateCPU(s: string) { + if (!cpuRegex.test(s)) { + return 'Invalid CPU format'; + } +} + export const AgentPolicyBaseSchema = { id: schema.maybe(schema.string()), space_ids: schema.maybe(schema.arrayOf(schema.string())), @@ -132,6 +146,20 @@ export const AgentPolicyBaseSchema = { } ) ), + agentless: schema.maybe( + schema.object({ + resources: schema.maybe( + schema.object({ + requests: schema.maybe( + schema.object({ + memory: schema.maybe(schema.string({ validate: validateMemory })), + cpu: schema.maybe(schema.string({ validate: validateCPU })), + }) + ), + }) + ), + }) + ), monitoring_pprof_enabled: schema.maybe(schema.boolean()), monitoring_http: schema.maybe( schema.object({ @@ -158,6 +186,27 @@ export const AgentPolicyBaseSchema = { ), }) ), + required_versions: schema.maybe( + schema.oneOf([ + schema.literal(null), + schema.arrayOf( + schema.object({ + version: schema.string({ + meta: { + description: 'Target version for automatic agent upgrade', + }, + }), + percentage: schema.number({ + min: 0, + max: 100, + meta: { + description: 'Target percentage of agents to auto upgrade', + }, + }), + }) + ), + ]) + ), }; function validateGlobalDataTagInput(tags: GlobalDataTag[]): string | undefined { diff --git a/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts b/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts index 6f415eea9eb61..7998e5da9b5e5 100644 --- a/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts +++ b/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts @@ -17,6 +17,7 @@ import type { KafkaConnectionTypeType, AgentUpgradeDetails, OutputPreset, + AgentlessPolicy, } from '../../common/types'; import type { AgentType, FleetServerAgentComponent } from '../../common/types/models'; @@ -65,6 +66,7 @@ export interface AgentPolicySOAttributes { agents?: number; overrides?: any | null; global_data_tags?: Array<{ name: string; value: string | number }>; + agentless?: AgentlessPolicy; version?: string; } diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/setup_environment.tsx b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/setup_environment.tsx index 535e0219bf823..9694b6c19dc50 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/setup_environment.tsx +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/setup_environment.tsx @@ -21,6 +21,7 @@ import { applicationServiceMock, fatalErrorsServiceMock, httpServiceMock, + chromeServiceMock, } from '@kbn/core/public/mocks'; import { GlobalFlyout } from '@kbn/es-ui-shared-plugin/public'; @@ -70,6 +71,7 @@ const appDependencies = { executionContext: executionContextServiceMock.createStartContract(), http: httpServiceMock.createSetupContract(), application: applicationServiceMock.createStartContract(), + chrome: chromeServiceMock.createStartContract(), fatalErrors: fatalErrorsServiceMock.createSetupContract(), }, plugins: { @@ -105,6 +107,7 @@ const { Provider: KibanaReactContextProvider } = createKibanaReactContext({ uiSettings: uiSettingsServiceMock.createSetupContract(), settings: settingsServiceMock.createStartContract(), theme: themeServiceMock.createStartContract(), + chrome: chromeServiceMock.createStartContract(), kibanaVersion: { get: () => kibanaVersion, }, diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/test_subjects.ts b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/test_subjects.ts index c758e53804c73..0862977d3bf2e 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/test_subjects.ts +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/helpers/test_subjects.ts @@ -94,6 +94,7 @@ export type TestSubjects = | 'editDataRetentionButton' | 'bulkEditDataRetentionButton' | 'dataStreamActionsPopoverButton' + | 'reducedDataRetentionCallout' | 'errorWhenCreatingCallout' | 'manageDataStreamButton' | 'dataRetentionValue' diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_project_level_retention.test.ts b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_project_level_retention.test.ts index 19d6f169429b7..4f560b07b392e 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_project_level_retention.test.ts +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_project_level_retention.test.ts @@ -37,6 +37,7 @@ const urlServiceMock = { }), }, }; +jest.mock('react-use/lib/useObservable', () => () => jest.fn()); describe('Data Streams - Project level max retention', () => { const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_tab.test.ts b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_tab.test.ts index 103ec3d4f0bf3..0ab31434ae8ac 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_tab.test.ts +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/data_streams_tab.test.ts @@ -26,6 +26,8 @@ import { createNonDataStreamIndex, } from './data_streams_tab.helpers'; +jest.mock('react-use/lib/useObservable', () => () => jest.fn()); + const nonBreakingSpace = ' '; const urlServiceMock = { @@ -533,6 +535,30 @@ describe('Data Streams tab', () => { testBed.component.update(); }); + test('shows bulk edit callout for reduced data retention', async () => { + const { + actions: { selectDataStream, clickBulkEditDataRetentionButton }, + } = testBed; + + selectDataStream('dataStream1', true); + selectDataStream('dataStream2', true); + + clickBulkEditDataRetentionButton(); + + // Decrease data retention value to 5d (it was 7d initially) + testBed.form.setInputValue('dataRetentionValue', '5'); + + // Verify that callout is displayed + expect(testBed.exists('reducedDataRetentionCallout')).toBeTruthy(); + + // Verify message in callout + const calloutText = testBed.find('reducedDataRetentionCallout').text(); + expect(calloutText).toContain( + 'The retention period will be reduced for 2 data streams. Data older than then new retention period will be permanently deleted.' + ); + expect(calloutText).toContain('Affected data streams: dataStream1, dataStream2'); + }); + test('can set data retention period for mutliple data streams', async () => { const { actions: { selectDataStream, clickBulkEditDataRetentionButton }, @@ -796,6 +822,28 @@ describe('Data Streams tab', () => { expect.objectContaining({ body: JSON.stringify({ dataStreams: ['dataStream1'] }) }) ); }); + + test('shows single edit callout for reduced data retention', async () => { + const { + actions: { clickNameAt, clickEditDataRetentionButton }, + } = testBed; + + await clickNameAt(0); + + clickEditDataRetentionButton(); + + // Decrease data retention value to 5d (it was 7d initially) + testBed.form.setInputValue('dataRetentionValue', '5'); + + // Verify that callout is displayed + expect(testBed.exists('reducedDataRetentionCallout')).toBeTruthy(); + + // Verify message in callout + const calloutText = testBed.find('reducedDataRetentionCallout').text(); + expect(calloutText).toContain( + 'The retention period will be reduced. Data older than then new retention period will be permanently deleted.' + ); + }); }); test('clicking index template name navigates to the index template details', async () => { diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/home.test.ts b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/home.test.ts index ef3bfabf7b9c9..e296069b5276b 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/home.test.ts +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/home.test.ts @@ -10,6 +10,8 @@ import { act } from 'react-dom/test-utils'; import { setupEnvironment } from '../helpers'; import { HomeTestBed, setup } from './home.helpers'; +jest.mock('react-use/lib/useObservable', () => () => jest.fn()); + describe('', () => { const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); let testBed: HomeTestBed; diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/indices_tab.test.tsx b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/indices_tab.test.tsx index 5bc5a4e6282f6..1d5ae5031089a 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/indices_tab.test.tsx +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/home/indices_tab.test.tsx @@ -8,22 +8,9 @@ /* * Mocking EuiSearchBar because its onChange is not firing during tests */ +import React from 'react'; import { EuiSearchBoxProps } from '@elastic/eui/src/components/search_bar/search_box'; - import { applicationServiceMock } from '@kbn/core/public/mocks'; -jest.mock('@elastic/eui/lib/components/search_bar/search_box', () => { - return { - EuiSearchBox: (props: EuiSearchBoxProps) => ( - ) => { - props.onSearch(event.target.value); - }} - /> - ), - }; -}); -import React from 'react'; import { act } from 'react-dom/test-utils'; import { API_BASE_PATH, Index, INTERNAL_API_BASE_PATH } from '../../../common'; @@ -41,6 +28,20 @@ import { IndexManagementBreadcrumb, } from '../../../public/application/services/breadcrumbs'; +jest.mock('@elastic/eui/lib/components/search_bar/search_box', () => { + return { + EuiSearchBox: (props: EuiSearchBoxProps) => ( + ) => { + props.onSearch(event.target.value); + }} + /> + ), + }; +}); +jest.mock('react-use/lib/useObservable', () => () => jest.fn()); + describe('', () => { let testBed: IndicesTestBed; let httpSetup: ReturnType['httpSetup']; diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/components/index_table.test.js b/x-pack/platform/plugins/shared/index_management/__jest__/components/index_table.test.js index 2e0040eff87b1..72aa38b600996 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/components/index_table.test.js +++ b/x-pack/platform/plugins/shared/index_management/__jest__/components/index_table.test.js @@ -26,7 +26,11 @@ import { setExtensionsService } from '../../public/application/store/selectors/e import { ExtensionsService } from '../../public/services'; import { kibanaVersion } from '../client_integration/helpers'; -import { notificationServiceMock, executionContextServiceMock } from '@kbn/core/public/mocks'; +import { + notificationServiceMock, + executionContextServiceMock, + chromeServiceMock, +} from '@kbn/core/public/mocks'; let store = null; const indices = []; @@ -44,6 +48,8 @@ const getBaseFakeIndex = (isOpen) => { }; }; +jest.mock('react-use/lib/useObservable', () => () => jest.fn()); + for (let i = 0; i < 105; i++) { indices.push({ ...getBaseFakeIndex(true), @@ -159,6 +165,7 @@ describe('index table', () => { core: { getUrlForApp: () => {}, executionContext: executionContextServiceMock.createStartContract(), + chrome: chromeServiceMock.createStartContract(), }, plugins: {}, url: urlServiceMock, diff --git a/x-pack/platform/plugins/shared/index_management/public/application/app_context.tsx b/x-pack/platform/plugins/shared/index_management/public/application/app_context.tsx index 1019d580dec5d..5fc1363050026 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/app_context.tsx +++ b/x-pack/platform/plugins/shared/index_management/public/application/app_context.tsx @@ -19,6 +19,7 @@ import { HttpSetup, IUiSettingsClient, OverlayStart, + ChromeStart, } from '@kbn/core/public'; import type { MlPluginStart } from '@kbn/ml-plugin/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; @@ -43,6 +44,7 @@ export interface AppDependencies { http: HttpSetup; i18n: I18nStart; theme: ThemeServiceStart; + chrome: ChromeStart; }; plugins: { usageCollection: UsageCollectionSetup; diff --git a/x-pack/platform/plugins/shared/index_management/public/application/components/template_form/steps/step_review.tsx b/x-pack/platform/plugins/shared/index_management/public/application/components/template_form/steps/step_review.tsx index 4e1901538cb93..053a44e75effa 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/components/template_form/steps/step_review.tsx +++ b/x-pack/platform/plugins/shared/index_management/public/application/components/template_form/steps/step_review.tsx @@ -387,6 +387,7 @@ export const StepReview: React.FunctionComponent = React.memo( defaultMessage: 'Request', }), content: , + 'data-test-subj': 'stepReviewRequestTab', }, ]; @@ -397,6 +398,7 @@ export const StepReview: React.FunctionComponent = React.memo( defaultMessage: 'Preview', }), content: , + 'data-test-subj': 'stepReviewPreviewTab', }); } diff --git a/x-pack/platform/plugins/shared/index_management/public/application/mount_management_section.ts b/x-pack/platform/plugins/shared/index_management/public/application/mount_management_section.ts index 003f5279ae520..4cc57c2b06a07 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/mount_management_section.ts +++ b/x-pack/platform/plugins/shared/index_management/public/application/mount_management_section.ts @@ -5,6 +5,7 @@ * 2.0. */ +import '../index.scss'; import { i18n } from '@kbn/i18n'; import SemVer from 'semver/classes/semver'; import { CoreSetup, CoreStart, ScopedHistory } from '@kbn/core/public'; diff --git a/x-pack/platform/plugins/shared/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx b/x-pack/platform/plugins/shared/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx index 55d8348400f5f..8d50b6c695105 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx +++ b/x-pack/platform/plugins/shared/index_management/public/application/sections/home/data_stream_list/edit_data_retention_modal/edit_data_retention_modal.tsx @@ -201,16 +201,23 @@ export const EditDataRetentionModal: React.FunctionComponent = ({ onClose()} data-test-subj="editDataRetentionModal" - css={{ minWidth: isBulkEdit ? 650 : 450, maxWidth: 650 }} + css={{ width: 650 }} >
- + {isBulkEdit ? ( + + ) : ( + + )} @@ -292,7 +299,7 @@ export const EditDataRetentionModal: React.FunctionComponent = ({ ) } componentProps={{ - fullWidth: isBulkEdit, + fullWidth: true, euiFieldProps: { disabled: formData.infiniteRetentionPeriod || @@ -343,7 +350,7 @@ export const EditDataRetentionModal: React.FunctionComponent = ({ - {isBulkEdit && affectedDataStreams.length > 0 && !formData.infiniteRetentionPeriod && ( + {affectedDataStreams.length > 0 && !formData.infiniteRetentionPeriod && ( = ({ )} color="danger" iconType="warning" + data-test-subj="reducedDataRetentionCallout" >

- + values={{ + affectedDataStreamCount: affectedDataStreams.length, + }} + /> + ) : ( + + )}

- {affectedDataStreams.length <= 10 && ( + {isBulkEdit && affectedDataStreams.length <= 10 && (

void; @@ -20,9 +22,17 @@ export interface CreateIndexButtonProps { export const CreateIndexButton = ({ loadIndices, share }: CreateIndexButtonProps) => { const [createIndexModalOpen, setCreateIndexModalOpen] = useState(false); const createIndexUrl = share?.url.locators.get('SEARCH_CREATE_INDEX')?.useUrl({}); - const actionProp = createIndexUrl - ? { href: createIndexUrl } - : { onClick: () => setCreateIndexModalOpen(true) }; + + const { + core: { chrome }, + } = useAppContext(); + + const activeSolutionId = useObservable(chrome.getActiveSolutionNavId$()); + + const actionProp = + createIndexUrl && activeSolutionId === 'es' + ? { href: createIndexUrl } + : { onClick: () => setCreateIndexModalOpen(true) }; return ( <> diff --git a/x-pack/platform/plugins/shared/index_management/public/index.ts b/x-pack/platform/plugins/shared/index_management/public/index.ts index aef482471e91b..364b7a75a4c67 100644 --- a/x-pack/platform/plugins/shared/index_management/public/index.ts +++ b/x-pack/platform/plugins/shared/index_management/public/index.ts @@ -5,7 +5,6 @@ * 2.0. */ -import './index.scss'; import { PluginInitializerContext } from '@kbn/core/public'; import { IndexMgmtUIPlugin } from './plugin'; diff --git a/x-pack/platform/plugins/shared/inference/common/http_apis.ts b/x-pack/platform/plugins/shared/inference/common/http_apis.ts index 2bbc4c1ee9455..cf008c40c0b24 100644 --- a/x-pack/platform/plugins/shared/inference/common/http_apis.ts +++ b/x-pack/platform/plugins/shared/inference/common/http_apis.ts @@ -17,6 +17,7 @@ export type ChatCompleteRequestBody = { stream?: boolean; system?: string; temperature?: number; + modelName?: string; messages: Message[]; functionCalling?: FunctionCallingMode; } & ToolOptions; diff --git a/x-pack/platform/plugins/shared/inference/common/output/create_output_api.test.ts b/x-pack/platform/plugins/shared/inference/common/output/create_output_api.test.ts index d29f88009f8e5..e8d2aa2a334e7 100644 --- a/x-pack/platform/plugins/shared/inference/common/output/create_output_api.test.ts +++ b/x-pack/platform/plugins/shared/inference/common/output/create_output_api.test.ts @@ -33,12 +33,14 @@ describe('createOutputApi', () => { connectorId: '.my-connector', system: 'system', input: 'input message', + modelName: 'gpt-4o', }); expect(chatComplete).toHaveBeenCalledTimes(1); expect(chatComplete).toHaveBeenCalledWith({ connectorId: '.my-connector', functionCalling: 'native', + modelName: 'gpt-4o', stream: false, system: 'system', messages: [ diff --git a/x-pack/platform/plugins/shared/inference/common/output/create_output_api.ts b/x-pack/platform/plugins/shared/inference/common/output/create_output_api.ts index 7cd7e9cad144e..94899add465ff 100644 --- a/x-pack/platform/plugins/shared/inference/common/output/create_output_api.ts +++ b/x-pack/platform/plugins/shared/inference/common/output/create_output_api.ts @@ -32,6 +32,7 @@ export function createOutputApi(chatCompleteApi: ChatCompleteAPI) { schema, system, previousMessages, + modelName, functionCalling, stream, abortSignal, @@ -52,6 +53,7 @@ export function createOutputApi(chatCompleteApi: ChatCompleteAPI) { const response = chatCompleteApi({ connectorId, stream, + modelName, functionCalling, abortSignal, system, @@ -134,6 +136,7 @@ export function createOutputApi(chatCompleteApi: ChatCompleteAPI) { }) ?? []) ), functionCalling, + modelName, stream: false, retry: { onValidationError: retriesLeft - 1, diff --git a/x-pack/platform/plugins/shared/inference/public/chat_complete.test.ts b/x-pack/platform/plugins/shared/inference/public/chat_complete.test.ts index 7859922a6c9ea..6d3a7c8cd4fdb 100644 --- a/x-pack/platform/plugins/shared/inference/public/chat_complete.test.ts +++ b/x-pack/platform/plugins/shared/inference/public/chat_complete.test.ts @@ -25,6 +25,7 @@ describe('createChatCompleteApi', () => { functionCalling: 'native', system: 'system', temperature: 0.5, + modelName: 'gpt-4o', messages: [{ role: MessageRole.User, content: 'question' }], }; await chatComplete(params as ChatCompleteOptions); @@ -46,6 +47,7 @@ describe('createChatCompleteApi', () => { functionCalling: 'native', stream: true, temperature: 0.4, + modelName: 'gemini-1.5', system: 'system', messages: [{ role: MessageRole.User, content: 'question' }], }; diff --git a/x-pack/platform/plugins/shared/inference/public/chat_complete.ts b/x-pack/platform/plugins/shared/inference/public/chat_complete.ts index 059a7cb5fae3b..15bc33bddee41 100644 --- a/x-pack/platform/plugins/shared/inference/public/chat_complete.ts +++ b/x-pack/platform/plugins/shared/inference/public/chat_complete.ts @@ -25,6 +25,7 @@ export function createChatCompleteApi({ http }: { http: HttpStart }) { toolChoice, tools, temperature, + modelName, functionCalling, stream, }: ChatCompleteOptions): ChatCompleteCompositeResponse< @@ -38,6 +39,7 @@ export function createChatCompleteApi({ http }: { http: HttpStart }) { toolChoice, tools, temperature, + modelName, functionCalling, }; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts index 61c45418df7da..fbdda73e0cd55 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts @@ -447,5 +447,22 @@ describe('bedrockClaudeAdapter', () => { }), }); }); + + it('propagates the modelName parameter', () => { + bedrockClaudeAdapter.chatComplete({ + logger, + executor: executorMock, + messages: [{ role: MessageRole.User, content: 'question' }], + modelName: 'claude-opus-3.5', + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + expect(executorMock.invoke).toHaveBeenCalledWith({ + subAction: 'invokeStream', + subActionParams: expect.objectContaining({ + model: 'claude-opus-3.5', + }), + }); + }); }); }); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts index d70ea595b05d8..7d18d2c5333d2 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts @@ -33,6 +33,7 @@ export const bedrockClaudeAdapter: InferenceConnectorAdapter = { toolChoice, tools, temperature = 0, + modelName, abortSignal, }) => { const noToolUsage = toolChoice === ToolChoiceType.none; @@ -43,6 +44,7 @@ export const bedrockClaudeAdapter: InferenceConnectorAdapter = { tools: noToolUsage ? [] : toolsToBedrock(tools, messages), toolChoice: toolChoiceToBedrock(toolChoice), temperature, + model: modelName, stopSequences: ['\n\nHuman:'], signal: abortSignal, }; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts index a1b01dfad03b0..19bb83a02900b 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts @@ -519,5 +519,22 @@ describe('geminiAdapter', () => { }), }); }); + + it('propagates the modelName parameter', () => { + geminiAdapter.chatComplete({ + logger, + executor: executorMock, + messages: [{ role: MessageRole.User, content: 'question' }], + modelName: 'gemini-1.5', + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + expect(executorMock.invoke).toHaveBeenCalledWith({ + subAction: 'invokeStream', + subActionParams: expect.objectContaining({ + model: 'gemini-1.5', + }), + }); + }); }); }); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts index c2b63ba73186a..9204e4c9dfdc5 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts @@ -29,6 +29,7 @@ export const geminiAdapter: InferenceConnectorAdapter = { toolChoice, tools, temperature = 0, + modelName, abortSignal, }) => { return from( @@ -40,6 +41,7 @@ export const geminiAdapter: InferenceConnectorAdapter = { tools: toolsToGemini(tools), toolConfig: toolChoiceToConfig(toolChoice), temperature, + model: modelName, signal: abortSignal, stopSequences: ['\n\nHuman:'], }, diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts index 314966845d1df..4e68be4e14f30 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.test.ts @@ -163,5 +163,24 @@ describe('inferenceAdapter', () => { }), }); }); + + it('propagates the modelName parameter', () => { + inferenceAdapter.chatComplete({ + logger, + executor: executorMock, + messages: [{ role: MessageRole.User, content: 'question' }], + modelName: 'gpt-4o', + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + expect(executorMock.invoke).toHaveBeenCalledWith({ + subAction: 'unified_completion_stream', + subActionParams: expect.objectContaining({ + body: expect.objectContaining({ + model: 'gpt-4o', + }), + }), + }); + }); }); }); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts index ffb7ca0357210..344622dbb9c95 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/inference/inference_adapter.ts @@ -31,6 +31,7 @@ export const inferenceAdapter: InferenceConnectorAdapter = { tools, functionCalling, temperature = 0, + modelName, logger, abortSignal, }) => { @@ -46,11 +47,13 @@ export const inferenceAdapter: InferenceConnectorAdapter = { }); request = { temperature, + model: modelName, messages: messagesToOpenAI({ system: wrapped.system, messages: wrapped.messages }), }; } else { request = { temperature, + model: modelName, messages: messagesToOpenAI({ system, messages }), tool_choice: toolChoiceToOpenAI(toolChoice), tools: toolsToOpenAI(tools), diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts index ac1a77bb5a1c1..afefe0449856e 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts @@ -355,7 +355,7 @@ describe('openAIAdapter', () => { }); }); - it('propagates the temperature', () => { + it('propagates the temperature parameter', () => { openAIAdapter.chatComplete({ logger, executor: executorMock, @@ -366,6 +366,18 @@ describe('openAIAdapter', () => { expect(executorMock.invoke).toHaveBeenCalledTimes(1); expect(getRequest().body.temperature).toBe(0.7); }); + + it('propagates the modelName parameter', () => { + openAIAdapter.chatComplete({ + logger, + executor: executorMock, + messages: [{ role: MessageRole.User, content: 'question' }], + modelName: 'gpt-4o', + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + expect(getRequest().body.model).toBe('gpt-4o'); + }); }); describe('when handling the response', () => { diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts index 1e4206ac4c4a6..353e6720eb27b 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.ts @@ -27,6 +27,7 @@ export const openAIAdapter: InferenceConnectorAdapter = { tools, temperature = 0, functionCalling, + modelName, logger, abortSignal, }) => { @@ -43,12 +44,14 @@ export const openAIAdapter: InferenceConnectorAdapter = { request = { stream: true, temperature, + model: modelName, messages: messagesToOpenAI({ system: wrapped.system, messages: wrapped.messages }), }; } else { request = { stream: true, temperature, + model: modelName, messages: messagesToOpenAI({ system, messages }), tool_choice: toolChoiceToOpenAI(toolChoice), tools: toolsToOpenAI(tools), diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/api.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/api.test.ts index 9bc012ef3e9be..91aeab7414e73 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/api.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/api.test.ts @@ -85,6 +85,7 @@ describe('createChatCompleteApi', () => { connectorId: 'connectorId', messages: [{ role: MessageRole.User, content: 'question' }], temperature: 0.7, + modelName: 'gpt-4o', }); expect(inferenceAdapter.chatComplete).toHaveBeenCalledTimes(1); @@ -93,6 +94,7 @@ describe('createChatCompleteApi', () => { executor: inferenceExecutor, logger, temperature: 0.7, + modelName: 'gpt-4o', }); }); diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/api.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/api.ts index f2f6e714ab101..e69d09b97a671 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/api.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/api.ts @@ -41,6 +41,7 @@ export function createChatCompleteApi({ request, actions, logger }: CreateChatCo temperature, system, functionCalling, + modelName, stream, abortSignal, }: ChatCompleteOptions): ChatCompleteCompositeResponse< @@ -84,6 +85,7 @@ export function createChatCompleteApi({ request, actions, logger }: CreateChatCo temperature, logger, functionCalling, + modelName, abortSignal, }); }), diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/types.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/types.ts index 73b9411f59ca0..b10bd4ee24bf9 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/types.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/types.ts @@ -30,6 +30,7 @@ export interface InferenceConnectorAdapter { system?: string; functionCalling?: FunctionCallingMode; temperature?: number; + modelName?: string; abortSignal?: AbortSignal; logger: Logger; } & ToolOptions diff --git a/x-pack/platform/plugins/shared/inference/server/routes/chat_complete.ts b/x-pack/platform/plugins/shared/inference/server/routes/chat_complete.ts index 4460a02657887..87ace0b2b7cc6 100644 --- a/x-pack/platform/plugins/shared/inference/server/routes/chat_complete.ts +++ b/x-pack/platform/plugins/shared/inference/server/routes/chat_complete.ts @@ -88,6 +88,7 @@ const chatCompleteBodySchema: Type = schema.object({ schema.oneOf([schema.literal('native'), schema.literal('simulated')]) ), temperature: schema.maybe(schema.number()), + modelName: schema.maybe(schema.string()), }); export function registerChatCompleteRoute({ diff --git a/x-pack/platform/plugins/shared/lens/public/datasources/form_based/operations/definitions/ranges/ranges.test.tsx b/x-pack/platform/plugins/shared/lens/public/datasources/form_based/operations/definitions/ranges/ranges.test.tsx index a7c6e436dcfab..e85f6d6f7d550 100644 --- a/x-pack/platform/plugins/shared/lens/public/datasources/form_based/operations/definitions/ranges/ranges.test.tsx +++ b/x-pack/platform/plugins/shared/lens/public/datasources/form_based/operations/definitions/ranges/ranges.test.tsx @@ -577,45 +577,44 @@ describe('ranges', () => { /> ); - // This series of act closures are made to make it work properly the update flush - act(() => { - instance.find(EuiButtonEmpty).simulate('click'); - }); + instance.find(EuiButtonEmpty).simulate('click'); act(() => { - // need another wrapping for this in order to work instance.update(); + }); - expect(instance.find(RangePopover)).toHaveLength(2); + expect(instance.find(RangePopover)).toHaveLength(2); - // edit the range and check - instance - .find('RangePopover input[type="number"]') - .first() - .simulate('change', { - target: { - value: '50', - }, - }); + // edit the range and check + instance + .find('RangePopover input[type="number"]') + .first() + .simulate('change', { + target: { + value: '50', + }, + }); + jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); - jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); + act(() => { + instance.update(); + }); - expect(updateLayerSpy).toHaveBeenCalledWith({ - ...layer, - columns: { - ...layer.columns, - col1: { - ...layer.columns.col1, - params: { - ...(layer.columns.col1 as RangeIndexPatternColumn).params, - ranges: [ - { from: 0, to: DEFAULT_INTERVAL, label: '' }, - { from: 50, to: Infinity, label: '' }, - ], - }, + expect(updateLayerSpy).toHaveBeenCalledWith({ + ...layer, + columns: { + ...layer.columns, + col1: { + ...layer.columns.col1, + params: { + ...(layer.columns.col1 as RangeIndexPatternColumn).params, + ranges: [ + { from: 0, to: DEFAULT_INTERVAL, label: '' }, + { from: 50, to: Infinity, label: '' }, + ], }, }, - }); + }, }); }); @@ -632,45 +631,43 @@ describe('ranges', () => { /> ); - // This series of act closures are made to make it work properly the update flush - act(() => { - instance.find(EuiButtonEmpty).simulate('click'); - }); - + instance.find(EuiButtonEmpty).simulate('click'); act(() => { - // need another wrapping for this in order to work instance.update(); + }); + expect(instance.find(RangePopover)).toHaveLength(2); - expect(instance.find(RangePopover)).toHaveLength(2); + // edit the label and check + instance + .find('RangePopover input[type="text"]') + .first() + .simulate('change', { + target: { + value: 'customlabel', + }, + }); - // edit the label and check - instance - .find('RangePopover input[type="text"]') - .first() - .simulate('change', { - target: { - value: 'customlabel', - }, - }); + jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); - jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); + act(() => { + instance.update(); + }); - expect(updateLayerSpy).toHaveBeenCalledWith({ - ...layer, - columns: { - ...layer.columns, - col1: { - ...layer.columns.col1, - params: { - ...(layer.columns.col1 as RangeIndexPatternColumn).params, - ranges: [ - { from: 0, to: DEFAULT_INTERVAL, label: '' }, - { from: DEFAULT_INTERVAL, to: Infinity, label: 'customlabel' }, - ], - }, + expect(updateLayerSpy).toHaveBeenCalledWith({ + ...layer, + columns: { + ...layer.columns, + col1: { + ...layer.columns.col1, + params: { + ...(layer.columns.col1 as RangeIndexPatternColumn).params, + ranges: [ + { from: 0, to: DEFAULT_INTERVAL, label: '' }, + { from: DEFAULT_INTERVAL, to: Infinity, label: 'customlabel' }, + ], }, }, - }); + }, }); }); @@ -687,37 +684,37 @@ describe('ranges', () => { /> ); - // This series of act closures are made to make it work properly the update flush + instance.find(RangePopover).find(EuiLink).find('button').simulate('click'); act(() => { - instance.find(RangePopover).find(EuiLink).find('button').simulate('click'); + instance.update(); }); + instance + .find('RangePopover input[type="number"]') + .last() + .simulate('change', { + target: { + value: '50', + }, + }); + jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); + act(() => { - // need another wrapping for this in order to work instance.update(); - instance - .find('RangePopover input[type="number"]') - .last() - .simulate('change', { - target: { - value: '50', - }, - }); - jest.advanceTimersByTime(TYPING_DEBOUNCE_TIME * 4); + }); - expect(updateLayerSpy).toHaveBeenCalledWith({ - ...layer, - columns: { - ...layer.columns, - col1: { - ...layer.columns.col1, - params: { - ...(layer.columns.col1 as RangeIndexPatternColumn).params, - ranges: [{ from: 0, to: 50, label: '' }], - }, + expect(updateLayerSpy).toHaveBeenCalledWith({ + ...layer, + columns: { + ...layer.columns, + col1: { + ...layer.columns.col1, + params: { + ...(layer.columns.col1 as RangeIndexPatternColumn).params, + ranges: [{ from: 0, to: 50, label: '' }], }, }, - }); + }, }); }); diff --git a/x-pack/platform/plugins/shared/lens/public/shared_components/axis/orientation/axis_label_orientation_selector.test.tsx b/x-pack/platform/plugins/shared/lens/public/shared_components/axis/orientation/axis_label_orientation_selector.test.tsx new file mode 100644 index 0000000000000..3ce41ee32928e --- /dev/null +++ b/x-pack/platform/plugins/shared/lens/public/shared_components/axis/orientation/axis_label_orientation_selector.test.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { + AxisLabelOrientationSelector, + AxisLabelOrientationSelectorProps, +} from './axis_label_orientation_selector'; +import userEvent from '@testing-library/user-event'; + +const renderComponent = (propsOverrides?: Partial) => { + return render( + + ); +}; + +describe('AxisLabelOrientationSelector', () => { + it('should render all buttons', () => { + renderComponent(); + + expect(screen.getByRole('button', { pressed: true })).toHaveTextContent(/horizontal/i); + expect(screen.getByRole('button', { name: /vertical/i })).toBeEnabled(); + expect(screen.getByRole('button', { name: /angled/i })).toBeEnabled(); + }); + + it('should call setOrientation when changing the orientation', async () => { + const setLabelOrientation = jest.fn(); + renderComponent({ setLabelOrientation }); + + const button = screen.getByRole('button', { name: /vertical/i }); + await userEvent.click(button); + + expect(setLabelOrientation).toBeCalledTimes(1); + expect(setLabelOrientation).toBeCalledWith(-90); + }); +}); diff --git a/x-pack/platform/plugins/shared/lens/public/shared_components/axis/orientation/axis_label_orientation_selector.tsx b/x-pack/platform/plugins/shared/lens/public/shared_components/axis/orientation/axis_label_orientation_selector.tsx new file mode 100644 index 0000000000000..c3f224635bd19 --- /dev/null +++ b/x-pack/platform/plugins/shared/lens/public/shared_components/axis/orientation/axis_label_orientation_selector.tsx @@ -0,0 +1,83 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiFormRow, EuiButtonGroup } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +type AxesSettingsConfigKeys = 'x' | 'yRight' | 'yLeft'; + +export const allowedOrientations = [0, -45, -90] as const; +export type Orientation = (typeof allowedOrientations)[number]; + +const orientationOptions: Array<{ + id: string; + value: Orientation; + label: string; +}> = [ + { + id: 'axis_orientation_horizontal', + value: 0, + label: i18n.translate('xpack.lens.shared.axisOrientation.horizontal', { + defaultMessage: 'Horizontal', + }), + }, + { + id: 'axis_orientation_vertical', + value: -90, + label: i18n.translate('xpack.lens.shared.axisOrientation.vertical', { + defaultMessage: 'Vertical', + }), + }, + { + id: 'axis_orientation_angled', + value: -45, + label: i18n.translate('xpack.lens.shared.axisOrientation.angled', { + defaultMessage: 'Angled', + }), + }, +]; + +export interface AxisLabelOrientationSelectorProps { + axis: AxesSettingsConfigKeys; + selectedLabelOrientation: Orientation; + setLabelOrientation: (orientation: Orientation) => void; +} + +export const AxisLabelOrientationSelector: React.FunctionComponent< + AxisLabelOrientationSelectorProps +> = ({ axis = 'x', selectedLabelOrientation, setLabelOrientation }) => { + return ( + + value === selectedLabelOrientation)?.id ?? + orientationOptions[0].id + } + onChange={(optionId: string) => { + const newOrientation = + orientationOptions.find(({ id }) => id === optionId)?.value ?? + orientationOptions[0].value; + setLabelOrientation(newOrientation); + }} + /> + + ); +}; diff --git a/x-pack/platform/plugins/shared/lens/public/shared_components/index.ts b/x-pack/platform/plugins/shared/lens/public/shared_components/index.ts index 1e3f84dd2accb..cd5c6b83ef5d4 100644 --- a/x-pack/platform/plugins/shared/lens/public/shared_components/index.ts +++ b/x-pack/platform/plugins/shared/lens/public/shared_components/index.ts @@ -24,6 +24,9 @@ export * from './helpers'; export { ValueLabelsSettings } from './value_labels_settings'; export { ToolbarTitleSettings } from './axis/title/toolbar_title_settings'; export { AxisTicksSettings } from './axis/ticks/axis_ticks_settings'; +export type { Orientation } from './axis/orientation/axis_label_orientation_selector'; +export { allowedOrientations } from './axis/orientation/axis_label_orientation_selector'; +export { AxisLabelOrientationSelector } from './axis/orientation/axis_label_orientation_selector'; export * from './static_header'; export * from './vis_label'; export { ExperimentalBadge } from './experimental_badge'; diff --git a/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.scss b/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.scss deleted file mode 100644 index 360a76274416d..0000000000000 --- a/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.scss +++ /dev/null @@ -1,3 +0,0 @@ -.lnsVisToolbarAxis__popover { - width: 500px; -} \ No newline at end of file diff --git a/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.test.tsx b/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.test.tsx new file mode 100644 index 0000000000000..c075e55dc455f --- /dev/null +++ b/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.test.tsx @@ -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 React, { ComponentProps } from 'react'; +import { HeatmapToolbar } from './toolbar_component'; +import { render, screen, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { LegendSize } from '@kbn/visualizations-plugin/public'; +import { FramePublicAPI } from '../../types'; +import { HeatmapVisualizationState } from './types'; +import { HeatmapGridConfigResult } from '@kbn/expression-heatmap-plugin/common'; + +type Props = ComponentProps; + +const defaultProps: Props = { + state: { + layerId: '1', + layerType: 'data', + shape: 'heatmap', + xAccessor: 'x', + legend: { + isVisible: true, + legendSize: LegendSize.AUTO, + }, + gridConfig: { + isXAxisLabelVisible: true, + isXAxisTitleVisible: false, + } as HeatmapGridConfigResult, + } as HeatmapVisualizationState, + setState: jest.fn(), + frame: { + datasourceLayers: {}, + } as FramePublicAPI, +}; + +const renderComponent = (props: Partial = {}) => { + return render(); +}; + +const clickButtonByName = async (name: string | RegExp, container?: HTMLElement) => { + const query = container ? within(container) : screen; + await userEvent.click(query.getByRole('button', { name })); +}; + +const clickHorizontalAxisButton = async () => { + await clickButtonByName(/horizontal axis/i); +}; + +describe('HeatmapToolbar', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should have called setState with the proper value of xAxisLabelRotation', async () => { + renderComponent(); + await clickHorizontalAxisButton(); + + const orientationGroup = screen.getByRole('group', { name: /orientation/i }); + await clickButtonByName(/vertical/i, orientationGroup); + expect(defaultProps.setState).toBeCalledTimes(1); + expect(defaultProps.setState).toBeCalledWith({ + ...defaultProps.state, + gridConfig: { ...defaultProps.state.gridConfig, xAxisLabelRotation: -90 }, + }); + }); + + it('should hide the orientation group if isXAxisLabelVisible it set to not visible', async () => { + const { rerender } = renderComponent(); + await clickHorizontalAxisButton(); + + const orientationGroup = screen.getByRole('group', { name: /orientation/i }); + expect(orientationGroup).toBeInTheDocument(); + + rerender( + + ); + await clickHorizontalAxisButton(); + + const updatedOrientationGroup = screen.queryByRole('group', { name: /orientation/i }); + expect(updatedOrientationGroup).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.tsx b/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.tsx index cd1dd560954c8..c3112dadf4689 100644 --- a/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.tsx +++ b/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/toolbar_component.tsx @@ -19,13 +19,15 @@ import { ValueLabelsSettings, ToolbarTitleSettings, AxisTicksSettings, + AxisLabelOrientationSelector, + allowedOrientations, } from '../../shared_components'; +import type { Orientation } from '../../shared_components'; import type { HeatmapVisualizationState } from './types'; import { getDefaultVisualValuesForLayer } from '../../shared_components/datasource_default_values'; -import './toolbar_component.scss'; const PANEL_STYLE = { - width: '460px', + width: '500px', }; const legendOptions: Array<{ id: string; value: 'auto' | 'show' | 'hide'; label: string }> = [ @@ -59,6 +61,8 @@ export const HeatmapToolbar = memo( const [hadAutoLegendSize] = useState(() => legendSize === LegendSize.AUTO); + const isXAxisLabelVisible = state?.gridConfig.isXAxisLabelVisible; + return ( @@ -99,7 +103,7 @@ export const HeatmapToolbar = memo( groupPosition="left" isDisabled={!Boolean(state?.yAccessor)} buttonDataTestSubj="lnsHeatmapVerticalAxisButton" - panelClassName="lnsVisToolbarAxis__popover" + panelStyle={PANEL_STYLE} > + {isXAxisLabelVisible && ( + { + setState({ + ...state, + gridConfig: { ...state.gridConfig, xAxisLabelRotation: orientation }, + }); + }} + /> + )} diff --git a/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/visualization.tsx b/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/visualization.tsx index 4dfb17241866f..a563d18abaec4 100644 --- a/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/visualization.tsx +++ b/x-pack/platform/plugins/shared/lens/public/visualizations/heatmap/visualization.tsx @@ -345,6 +345,7 @@ export const getHeatmapVisualization = ({ yTitle: state.gridConfig.yTitle, // X-axis isXAxisLabelVisible: state.gridConfig.isXAxisLabelVisible, + xAxisLabelRotation: state.gridConfig.xAxisLabelRotation, isXAxisTitleVisible: state.gridConfig.isXAxisTitleVisible ?? false, xTitle: state.gridConfig.xTitle, } diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx index 680a92f559f0a..dc09d750b54ad 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx @@ -14,6 +14,7 @@ import { EuiText, EuiTextArea, EuiCallOut, + EuiLoadingSpinner, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { cloneDeep, isArray, isEmpty, last, once } from 'lodash'; @@ -288,16 +289,47 @@ export function Insight({ [service] ); + const getPromptToEdit = () => { + const clonedMessages = cloneDeep(messages.messages); + const lastUserPrompt = getLastMessageOfType(clonedMessages, MessageRole.User)?.message.content; + + if (!lastUserPrompt) { + return ''; + } + + try { + const { instructions = '' } = JSON.parse(lastUserPrompt); + return instructions.trim(); + } catch (e) { + return ''; + } + }; + const onEditPrompt = (newPrompt: string) => { const clonedMessages = cloneDeep(messages.messages); const userMessage = getLastMessageOfType(clonedMessages, MessageRole.User); if (!userMessage) return false; - userMessage.message.content = newPrompt; - setIsPromptUpdated(true); - setMessages({ messages: clonedMessages, status: FETCH_STATUS.SUCCESS }); - setEditingPrompt(false); - return true; + try { + const parsedContent = JSON.parse(userMessage.message.content || ''); + + if (!parsedContent.instructions) { + return false; + } + + // Assign the updated instructions + parsedContent.instructions = newPrompt; + userMessage.message.content = JSON.stringify(parsedContent); + + setIsPromptUpdated(true); + setMessages({ messages: clonedMessages, status: FETCH_STATUS.SUCCESS }); + setEditingPrompt(false); + return true; + } catch (e) { + // eslint-disable-next-line no-console + console.error('Failed to edit prompt:', e); + return false; + } }; const handleCancel = () => { @@ -372,15 +404,15 @@ export function Insight({ ); } else if (isEditingPrompt) { - children = ( - - ); + const promptToEdit = getPromptToEdit(); + + if (messages.status === FETCH_STATUS.SUCCESS && promptToEdit) { + children = ( + + ); + } else { + children = ; + } } else if (!connectors.loading && !connectors.connectors?.length) { children = ( diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts index 74d786bb6727d..d87ded0cd2c5a 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/functions/get_dataset_info/get_relevant_field_names.ts @@ -99,6 +99,7 @@ export async function getRelevantFieldNames({ const chunkResponse$ = ( await chat('get_relevant_dataset_names', { signal, + stream: true, messages: [ { '@timestamp': new Date().toISOString(), diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/chat/route.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/chat/route.ts index 5ef72dc8e7b56..1ca0eb9d1dc39 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/chat/route.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/routes/chat/route.ts @@ -157,6 +157,7 @@ const chatRoute = createObservabilityAIAssistantServerRoute({ ); const response$ = client.chat(name, { + stream: true, messages, connectorId, signal, @@ -203,6 +204,7 @@ const chatRecallRoute = createObservabilityAIAssistantServerRoute({ client .chat(name, { ...params, + stream: true, connectorId, simulateFunctionCalling, signal, diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.test.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.test.ts index 199a6d8f1cbca..e7b1169e9c03d 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.test.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.test.ts @@ -19,7 +19,10 @@ import { MessageAddEvent, StreamingChatResponseEventType, } from '../../../common/conversation_complete'; -import { ChatCompletionEventType as InferenceChatCompletionEventType } from '@kbn/inference-common'; +import { + ChatCompletionEventType as InferenceChatCompletionEventType, + ChatCompleteResponse, +} from '@kbn/inference-common'; import { InferenceClient } from '@kbn/inference-plugin/server'; import { createFunctionResponseMessage } from '../../../common/utils/create_function_response_message'; import { CONTEXT_FUNCTION_NAME } from '../../functions/context'; @@ -88,7 +91,10 @@ function createLlmSimulator(subscriber: any) { tool_calls: msg.function_call ? [{ function: msg.function_call }] : [], }); }, - complete: async () => { + complete: async (chatCompleteResponse?: ChatCompleteResponse) => { + if (chatCompleteResponse) { + subscriber.next(chatCompleteResponse); + } subscriber.complete(); }, error: (error: Error) => { @@ -245,10 +251,25 @@ describe('Observability AI Assistant client', () => { titleLlmPromiseResolve = (title: string) => { const titleLlmSimulator = createLlmSimulator(subscriber); titleLlmSimulator - .chunk({ content: title }) - .then(() => titleLlmSimulator.next({ content: title })) - .then(() => titleLlmSimulator.tokenCount({ completion: 0, prompt: 0, total: 0 })) - .then(() => titleLlmSimulator.complete()) + .complete({ + content: '', + toolCalls: [ + { + toolCallId: 'test_id', + function: { + name: 'title_conversation', + arguments: { + title, + }, + }, + }, + ], + tokens: { + completion: 0, + prompt: 0, + total: 0, + }, + }) .catch((error) => titleLlmSimulator.error(error)); }; titleLlmPromiseReject = (error: Error) => { @@ -291,7 +312,7 @@ describe('Observability AI Assistant client', () => { expect(inferenceClientMock.chatComplete.mock.calls[0]).toEqual([ expect.objectContaining({ connectorId: 'foo', - stream: true, + stream: false, functionCalling: 'native', toolChoice: expect.objectContaining({ function: 'title_conversation', diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts index 95856768c4c5d..bff57b6e75bb4 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/index.ts @@ -31,7 +31,7 @@ import { import { v4 } from 'uuid'; import type { AssistantScope } from '@kbn/ai-assistant-common'; import type { InferenceClient } from '@kbn/inference-plugin/server'; -import { ToolChoiceType } from '@kbn/inference-common'; +import { ChatCompleteResponse, FunctionCallingMode, ToolChoiceType } from '@kbn/inference-common'; import { resourceNames } from '..'; import { @@ -251,14 +251,14 @@ export class ObservabilityAIAssistantClient { getGeneratedTitle({ messages, logger: this.dependencies.logger, - chat: (name, chatParams) => { - return this.chat(name, { + chat: (name, chatParams) => + this.chat(name, { ...chatParams, simulateFunctionCalling, connectorId, signal, - }); - }, + stream: false, + }), tracer: completeTracer, }) ), @@ -294,6 +294,7 @@ export class ObservabilityAIAssistantClient { signal, simulateFunctionCalling, connectorId, + stream: true, }); }, // start out with the max number of function calls @@ -462,7 +463,7 @@ export class ObservabilityAIAssistantClient { ); }; - chat = ( + chat( name: string, { messages, @@ -472,6 +473,7 @@ export class ObservabilityAIAssistantClient { signal, simulateFunctionCalling, tracer, + stream, }: { messages: Message[]; connectorId: string; @@ -480,8 +482,11 @@ export class ObservabilityAIAssistantClient { signal: AbortSignal; simulateFunctionCalling?: boolean; tracer: LangTracer; + stream: TStream; } - ): Observable => { + ): TStream extends true + ? Observable + : Promise { let tools: Record | undefined; let toolChoice: ToolChoiceType | { function: string } | undefined; @@ -500,35 +505,44 @@ export class ObservabilityAIAssistantClient { } : ToolChoiceType.auto; } - - const chatComplete$ = defer(() => - this.dependencies.inferenceClient.chatComplete({ - connectorId, - stream: true, - messages: convertMessagesForInference( - messages.filter((message) => message.message.role !== MessageRole.System) - ), - functionCalling: simulateFunctionCalling ? 'simulated' : 'native', - toolChoice, - tools, - }) - ).pipe( - convertInferenceEventsToStreamingEvents(), - instrumentAndCountTokens(name), - failOnNonExistingFunctionCall({ functions }), - tap((event) => { - if ( - event.type === StreamingChatResponseEventType.ChatCompletionChunk && - this.dependencies.logger.isLevelEnabled('trace') - ) { - this.dependencies.logger.trace(`Received chunk: ${JSON.stringify(event.message)}`); - } - }), - shareReplay() - ); - - return chatComplete$; - }; + const options = { + connectorId, + messages: convertMessagesForInference( + messages.filter((message) => message.message.role !== MessageRole.System) + ), + toolChoice, + tools, + functionCalling: (simulateFunctionCalling ? 'simulated' : 'native') as FunctionCallingMode, + }; + if (stream) { + return defer(() => + this.dependencies.inferenceClient.chatComplete({ + ...options, + stream: true, + }) + ).pipe( + convertInferenceEventsToStreamingEvents(), + instrumentAndCountTokens(name), + failOnNonExistingFunctionCall({ functions }), + tap((event) => { + if ( + event.type === StreamingChatResponseEventType.ChatCompletionChunk && + this.dependencies.logger.isLevelEnabled('trace') + ) { + this.dependencies.logger.trace(`Received chunk: ${JSON.stringify(event.message)}`); + } + }), + shareReplay() + ) as TStream extends true + ? Observable + : never; + } else { + return this.dependencies.inferenceClient.chatComplete({ + ...options, + stream: false, + }) as TStream extends true ? never : Promise; + } + } find = async (options?: { query?: string }): Promise<{ conversations: Conversation[] }> => { const response = await this.dependencies.esClient.asInternalUser.search({ diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts index 4c55d32362878..b34517b07722d 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/continue_conversation.ts @@ -243,6 +243,7 @@ export function continueConversation({ functions: definitions, tracer, connectorId, + stream: true, }).pipe(emitWithConcatenatedMessage(), catchFunctionNotFoundError(functionLimitExceeded)); } diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/extract_token_count.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/extract_token_count.ts index 0d11db24732f3..cf4719ad75b8e 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/extract_token_count.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/extract_token_count.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { filter, OperatorFunction, scan } from 'rxjs'; +import { filter, OperatorFunction, scan, startWith } from 'rxjs'; import { StreamingChatResponseEvent, StreamingChatResponseEventType, @@ -30,7 +30,8 @@ export function extractTokenCount(): OperatorFunction< return acc; }, { completion: 0, prompt: 0, total: 0 } - ) + ), + startWith({ completion: 0, prompt: 0, total: 0 }) ); }; } diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts index a8ddd5233132a..42453f8d407b6 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts @@ -5,13 +5,8 @@ * 2.0. */ import { filter, lastValueFrom, of, throwError, toArray } from 'rxjs'; -import { - ChatCompletionChunkEvent, - Message, - MessageRole, - StreamingChatResponseEventType, -} from '../../../../common'; -import { ChatEvent } from '../../../../common/conversation_complete'; +import { ChatCompleteResponse } from '@kbn/inference-common'; +import { Message, MessageRole, StreamingChatResponseEventType } from '../../../../common'; import { LangTracer } from '../instrumentation/lang_tracer'; import { TITLE_CONVERSATION_FUNCTION_NAME, getGeneratedTitle } from './get_generated_title'; @@ -26,19 +21,27 @@ describe('getGeneratedTitle', () => { }, ]; - function createChatCompletionChunk( - content: string | { content?: string; function_call?: { name: string; arguments: string } } - ): ChatCompletionChunkEvent { - const msg = typeof content === 'string' ? { content } : content; - + function createChatCompletionResponse(content: { + content?: string; + function_call?: { name: string; arguments: { [key: string]: string } }; + }): ChatCompleteResponse { return { - type: StreamingChatResponseEventType.ChatCompletionChunk, - id: 'id', - message: msg, + content: content.content || '', + toolCalls: content.function_call + ? [ + { + toolCallId: 'test_id', + function: { + name: content.function_call?.name, + arguments: content.function_call?.arguments, + }, + }, + ] + : [], }; } - function callGenerateTitle(...rest: [ChatEvent[]] | [{}, ChatEvent[]]) { + function callGenerateTitle(...rest: [ChatCompleteResponse[]] | [{}, ChatCompleteResponse[]]) { const options = rest.length === 1 ? {} : rest[0]; const chunks = rest.length === 1 ? rest[0] : rest[1]; @@ -62,10 +65,10 @@ describe('getGeneratedTitle', () => { it('returns the given title as a string', async () => { const { title$ } = callGenerateTitle([ - createChatCompletionChunk({ + createChatCompletionResponse({ function_call: { name: 'title_conversation', - arguments: JSON.stringify({ title: 'My title' }), + arguments: { title: 'My title' }, }, }), ]); @@ -76,13 +79,12 @@ describe('getGeneratedTitle', () => { expect(title).toEqual('My title'); }); - it('calls chat with the user message', async () => { const { chatSpy, title$ } = callGenerateTitle([ - createChatCompletionChunk({ + createChatCompletionResponse({ function_call: { name: TITLE_CONVERSATION_FUNCTION_NAME, - arguments: JSON.stringify({ title: 'My title' }), + arguments: { title: 'My title' }, }, }), ]); @@ -99,10 +101,10 @@ describe('getGeneratedTitle', () => { it('strips quotes from the title', async () => { async function testTitle(title: string) { const { title$ } = callGenerateTitle([ - createChatCompletionChunk({ + createChatCompletionResponse({ function_call: { name: 'title_conversation', - arguments: JSON.stringify({ title }), + arguments: { title }, }, }), ]); @@ -117,37 +119,21 @@ describe('getGeneratedTitle', () => { expect(await testTitle(`"User's request for a title"`)).toEqual(`User's request for a title`); }); - it('handles partial updates', async () => { - const { title$ } = callGenerateTitle([ - createChatCompletionChunk({ - function_call: { - name: 'title_conversation', - arguments: '', - }, - }), - createChatCompletionChunk({ - function_call: { - name: '', - arguments: JSON.stringify({ title: 'My title' }), - }, - }), - ]); - - const title = await lastValueFrom(title$); - - expect(title).toEqual('My title'); - }); - it('ignores token count events and still passes them through', async () => { const { title$ } = callGenerateTitle([ - createChatCompletionChunk({ - function_call: { - name: 'title_conversation', - arguments: JSON.stringify({ title: 'My title' }), - }, - }), { - type: StreamingChatResponseEventType.TokenCount, + content: '', + toolCalls: [ + { + toolCallId: 'test_id', + function: { + name: 'title_conversation', + arguments: { + title: 'My title', + }, + }, + }, + ], tokens: { completion: 10, prompt: 10, diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts index 79dac3c036046..3f1b9f43cd35f 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts @@ -5,13 +5,12 @@ * 2.0. */ -import { catchError, last, map, Observable, of, tap } from 'rxjs'; +import { catchError, mergeMap, Observable, of, tap, from } from 'rxjs'; import { Logger } from '@kbn/logging'; +import { ChatCompleteResponse } from '@kbn/inference-common'; import type { ObservabilityAIAssistantClient } from '..'; -import { Message, MessageRole } from '../../../../common'; -import { concatenateChatCompletionChunks } from '../../../../common/utils/concatenate_chat_completion_chunks'; -import { hideTokenCountEvents } from './hide_token_count_events'; -import { ChatEvent, TokenCountEvent } from '../../../../common/conversation_complete'; +import { Message, MessageRole, StreamingChatResponseEventType } from '../../../../common'; +import { TokenCountEvent } from '../../../../common/conversation_complete'; import { LangTracer } from '../instrumentation/lang_tracer'; export const TITLE_CONVERSATION_FUNCTION_NAME = 'title_conversation'; @@ -22,7 +21,7 @@ type ChatFunctionWithoutConnectorAndTokenCount = ( Parameters[1], 'connectorId' | 'signal' | 'simulateFunctionCalling' > -) => Observable; +) => Promise; export function getGeneratedTitle({ messages, @@ -35,7 +34,7 @@ export function getGeneratedTitle({ logger: Pick; tracer: LangTracer; }): Observable { - return hideTokenCountEvents((hide) => + return from( chat('generate_title', { messages: [ { @@ -75,32 +74,44 @@ export function getGeneratedTitle({ ], functionCall: TITLE_CONVERSATION_FUNCTION_NAME, tracer, - }).pipe( - hide(), - concatenateChatCompletionChunks(), - last(), - map((concatenatedMessage) => { - const title: string = - (concatenatedMessage.message.function_call.name - ? JSON.parse(concatenatedMessage.message.function_call.arguments).title - : concatenatedMessage.message?.content) || ''; + stream: false, + }) + ).pipe( + mergeMap((response) => { + let title: string = + (response.toolCalls[0].function.name + ? (response.toolCalls[0].function.arguments as { title: string }).title + : response.content) || ''; - // This captures a string enclosed in single or double quotes. - // It extracts the string content without the quotes. - // Example matches: - // - "Hello, World!" => Captures: Hello, World! - // - 'Another Example' => Captures: Another Example - // - JustTextWithoutQuotes => Captures: JustTextWithoutQuotes + // This captures a string enclosed in single or double quotes. + // It extracts the string content without the quotes. + // Example matches: + // - "Hello, World!" => Captures: Hello, World! + // - 'Another Example' => Captures: Another Example + // - JustTextWithoutQuotes => Captures: JustTextWithoutQuotes + title = title.replace(/^"(.*)"$/g, '$1').replace(/^'(.*)'$/g, '$1'); - return title.replace(/^"(.*)"$/g, '$1').replace(/^'(.*)'$/g, '$1'); - }), - tap((event) => { - if (typeof event === 'string') { - logger.debug(`Generated title: ${event}`); - } - }) - ) - ).pipe( + const tokenCount: TokenCountEvent | undefined = response.tokens + ? { + type: StreamingChatResponseEventType.TokenCount, + tokens: { + completion: response.tokens.completion, + prompt: response.tokens.prompt, + total: response.tokens.total, + }, + } + : undefined; + + const events: Array = [title]; + if (tokenCount) events.push(tokenCount); + + return from(events); // Emit each event separately + }), + tap((event) => { + if (typeof event === 'string') { + logger.debug(`Generated title: ${event}`); + } + }), catchError((error) => { logger.error(`Error generating title`); logger.error(error); diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/utils/recall/score_suggestions.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/utils/recall/score_suggestions.ts index b57e5928ce0ba..9993e4e66fb3f 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/utils/recall/score_suggestions.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/utils/recall/score_suggestions.ts @@ -112,6 +112,7 @@ export async function scoreSuggestions({ functions: [scoreFunction], functionCall: 'score', signal, + stream: true, }).pipe(concatenateChatCompletionChunks()) ); diff --git a/x-pack/platform/plugins/shared/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx b/x-pack/platform/plugins/shared/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx index d80cbc4f0394d..a5990978a871c 100644 --- a/x-pack/platform/plugins/shared/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx +++ b/x-pack/platform/plugins/shared/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx @@ -7,6 +7,7 @@ import React, { useRef, memo, useCallback, useState } from 'react'; import { i18n } from '@kbn/i18n'; +import { css } from '@emotion/react'; import { EuiForm, EuiFieldText, @@ -116,7 +117,14 @@ export const ProfileQueryEditor = memo(() => { ); return ( - + {/* Form */} @@ -144,7 +152,12 @@ export const ProfileQueryEditor = memo(() => { {/* Editor */} - + { const loggingMock = loggingSystemMock.create().asLoggerFactory().get('xpack', 'spaces'); - const featuresPlugin = featuresPluginMock.createSetup(); + const featuresPlugin = featuresPluginMock.createStart(); featuresPlugin.getKibanaFeatures.mockReturnValue([ { id: 'feature-1', @@ -163,7 +163,7 @@ describe.skip('onPostAuthInterceptor', () => { initSpacesOnPostAuthRequestInterceptor({ http: http as unknown as CoreSetup['http'], log: loggingMock, - features: featuresPlugin, + getFeatures: async () => featuresPlugin, getSpacesService: () => spacesServiceStart, }); diff --git a/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts b/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts index 67617185ad0f2..7910ebe1d5172 100644 --- a/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts +++ b/x-pack/platform/plugins/shared/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts @@ -6,25 +6,25 @@ */ import type { CoreSetup, Logger } from '@kbn/core/server'; +import type { FeaturesPluginStart } from '@kbn/features-plugin/server'; import type { Space } from '../../../common'; import { addSpaceIdToPath } from '../../../common'; import { DEFAULT_SPACE_ID, ENTER_SPACE_PATH } from '../../../common/constants'; -import type { PluginsSetup } from '../../plugin'; -import type { SpacesServiceStart } from '../../spaces_service/spaces_service'; +import type { SpacesServiceStart } from '../../spaces_service'; import { wrapError } from '../errors'; import { getSpaceSelectorUrl } from '../get_space_selector_url'; import { withSpaceSolutionDisabledFeatures } from '../utils/space_solution_disabled_features'; export interface OnPostAuthInterceptorDeps { http: CoreSetup['http']; - features: PluginsSetup['features']; + getFeatures: () => Promise; getSpacesService: () => SpacesServiceStart; log: Logger; } export function initSpacesOnPostAuthRequestInterceptor({ - features, + getFeatures, getSpacesService, log, http, @@ -38,7 +38,7 @@ export function initSpacesOnPostAuthRequestInterceptor({ const spaceId = spacesService.getSpaceId(request); - // The root of kibana is also the root of the defaut space, + // The root of kibana is also the root of the default space, // since the default space does not have a URL Identifier (i.e., `/s/foo`). const isRequestingKibanaRoot = path === '/' && spaceId === DEFAULT_SPACE_ID; const isRequestingSpaceRoot = path === '/' && spaceId !== DEFAULT_SPACE_ID; @@ -106,7 +106,10 @@ export function initSpacesOnPostAuthRequestInterceptor({ } } - const allFeatures = features.getKibanaFeatures(); + // The Spaces client returns migrated feature IDs in `disabledFeatures`, so we need to omit + // deprecated features. Otherwise, apps granted by deprecated features will be considered + // available when they shouldn't be, since their IDs won't be present in `disabledFeatures`. + const allFeatures = (await getFeatures()).getKibanaFeatures({ omitDeprecated: true }); const disabledFeatureKeys = withSpaceSolutionDisabledFeatures( allFeatures, space.disabledFeatures, diff --git a/x-pack/platform/plugins/shared/spaces/server/plugin.ts b/x-pack/platform/plugins/shared/spaces/server/plugin.ts index e1c3c78976ecd..6f3e49688d5c0 100644 --- a/x-pack/platform/plugins/shared/spaces/server/plugin.ts +++ b/x-pack/platform/plugins/shared/spaces/server/plugin.ts @@ -191,7 +191,7 @@ export class SpacesPlugin http: core.http, log: this.log, getSpacesService, - features: plugins.features, + getFeatures: async () => (await core.getStartServices())[1].features, }); setupCapabilities(core, getSpacesService, this.log); diff --git a/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.test.ts b/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.test.ts index 4b7c1de0b3fcb..4d059dd49ad39 100644 --- a/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.test.ts +++ b/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.test.ts @@ -86,6 +86,37 @@ const features = [ }, }, }, + { + deprecated: { notice: 'It was another mistake.', replacedBy: ['feature_2'] }, + id: 'feature_5_deprecated', + name: 'Another deprecated Feature', + app: ['feature2', 'feature3'], + catalogue: ['feature2Entry', 'feature3Entry'], + category: { id: 'deprecated', label: 'deprecated' }, + scope: ['spaces', 'security'], + privileges: { + all: { + savedObject: { all: [], read: [] }, + ui: [], + app: ['feature2', 'feature3'], + catalogue: ['feature2Entry', 'feature3Entry'], + replacedBy: [ + { feature: 'feature_2', privileges: ['all'] }, + { feature: 'feature_3', privileges: ['all'] }, + ], + }, + read: { + savedObject: { all: [], read: [] }, + ui: [], + app: ['feature2', 'feature3'], + catalogue: ['feature2Entry', 'feature3Entry'], + replacedBy: [ + { feature: 'feature_2', privileges: ['read'] }, + { feature: 'feature_3', privileges: ['read'] }, + ], + }, + }, + }, ] as unknown as KibanaFeature[]; const featuresStart = featuresPluginMock.createStart(); @@ -135,7 +166,7 @@ describe('#getAll', () => { }, }, { - // alpha only has deprecated disabled features + // alpha has deprecated disabled features id: 'alpha', type: 'space', references: [], @@ -145,6 +176,17 @@ describe('#getAll', () => { disabledFeatures: ['feature_1', 'feature_4_deprecated'], }, }, + { + // beta has deprecated disabled features with specified `replacedBy` on feature level + id: 'beta', + type: 'space', + references: [], + attributes: { + name: 'beta-name', + description: 'beta-description', + disabledFeatures: ['feature_1', 'feature_5_deprecated'], + }, + }, ]; const expectedSpaces: Space[] = [ @@ -178,6 +220,12 @@ describe('#getAll', () => { description: 'alpha-description', disabledFeatures: ['feature_1', 'feature_2', 'feature_3'], }, + { + id: 'beta', + name: 'beta-name', + description: 'beta-description', + disabledFeatures: ['feature_1', 'feature_2'], + }, ]; test(`finds spaces using callWithRequestRepository`, async () => { diff --git a/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.ts b/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.ts index 66728636f9752..befa43e06a6b7 100644 --- a/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.ts +++ b/x-pack/platform/plugins/shared/spaces/server/spaces_client/spaces_client.ts @@ -301,6 +301,14 @@ export class SpacesClient implements ISpacesClient { continue; } + // If the feature is deprecated and replacement features are explicitly defined, use them. + // Otherwise, use the replacement features defined in the feature privileges. + const featureReplacedBy = feature.deprecated?.replacedBy; + if (featureReplacedBy) { + deprecatedFeatureReferences.set(feature.id, new Set(featureReplacedBy)); + continue; + } + // Collect all feature privileges including the ones provided by sub-features, if any. const allPrivileges = Object.values(feature.privileges ?? {}).concat( feature.subFeatures?.flatMap((subFeature) => diff --git a/x-pack/platform/plugins/shared/stack_connectors/common/microsoft_defender_endpoint/schema.ts b/x-pack/platform/plugins/shared/stack_connectors/common/microsoft_defender_endpoint/schema.ts index a6063340211fc..0daf547de21fa 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/common/microsoft_defender_endpoint/schema.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/common/microsoft_defender_endpoint/schema.ts @@ -203,6 +203,8 @@ export const GetActionsParamsSchema = schema.object({ ), page: schema.maybe(schema.number({ min: 1, defaultValue: 1 })), pageSize: schema.maybe(schema.number({ min: 1, max: 1000, defaultValue: 20 })), + sortField: schema.maybe(schema.string({ minLength: 1 })), + sortDirection: schema.maybe(schema.oneOf([schema.literal('asc'), schema.literal('desc')])), }); // ---------------------------------- diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.test.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.test.ts index 38be24e6aa224..24c84e62169a7 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.test.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.test.ts @@ -187,10 +187,13 @@ describe('Microsoft Defender for Endpoint Connector', () => { }); it.each` - title | options | expectedParams - ${'single value filters'} | ${{ id: '123', status: 'Succeeded', machineId: 'abc', page: 2 }} | ${{ $count: true, $filter: 'id eq 123 AND status eq Succeeded AND machineId eq abc', $skip: 20, $top: 20 }} - ${'multiple value filters'} | ${{ id: ['123', '321'], type: ['Isolate', 'Unisolate'], page: 1, pageSize: 100 }} | ${{ $count: true, $filter: "id in ('123','321') AND type in ('Isolate','Unisolate')", $top: 100 }} - ${'page and page size'} | ${{ id: ['123', '321'], type: ['Isolate', 'Unisolate'], page: 3, pageSize: 100 }} | ${{ $count: true, $filter: "id in ('123','321') AND type in ('Isolate','Unisolate')", $skip: 200, $top: 100 }} + title | options | expectedParams + ${'single value filters'} | ${{ id: '123', status: 'Succeeded', machineId: 'abc', page: 2 }} | ${{ $count: true, $filter: "id eq '123' AND status eq 'Succeeded' AND machineId eq 'abc'", $skip: 20, $top: 20 }} + ${'multiple value filters'} | ${{ id: ['123', '321'], type: ['Isolate', 'Unisolate'], page: 1, pageSize: 100 }} | ${{ $count: true, $filter: "id in ('123','321') AND type in ('Isolate','Unisolate')", $top: 100 }} + ${'page and page size'} | ${{ id: ['123', '321'], type: ['Isolate', 'Unisolate'], page: 3, pageSize: 100 }} | ${{ $count: true, $filter: "id in ('123','321') AND type in ('Isolate','Unisolate')", $skip: 200, $top: 100 }} + ${'with sortDirection but no sortField'} | ${{ id: '123', sortDirection: 'asc' }} | ${{ $count: true, $filter: "id eq '123'", $top: 20 }} + ${'with sortField and no sortDirection (desc is default)'} | ${{ id: '123', sortField: 'type' }} | ${{ $count: true, $filter: "id eq '123'", $top: 20, $orderby: 'type desc' }} + ${'with sortField and sortDirection'} | ${{ id: '123', sortField: 'type', sortDirection: 'asc' }} | ${{ $count: true, $filter: "id eq '123'", $top: 20, $orderby: 'type asc' }} `( 'should correctly build the oData URL params: $title', async ({ options, expectedParams }) => { @@ -226,7 +229,7 @@ describe('Microsoft Defender for Endpoint Connector', () => { expect(connectorMock.instanceMock.request).toHaveBeenCalledWith( expect.objectContaining({ url: 'https://api.mock__microsoft.com/api/machines', - params: { $count: true, $filter: 'id eq 1-2-3', $top: 20 }, + params: { $count: true, $filter: "id eq '1-2-3'", $top: 20 }, }), connectorMock.usageCollector ); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts index 203b5be802a50..d06112631cf45 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/microsoft_defender_endpoint/microsoft_defender_endpoint.ts @@ -132,7 +132,7 @@ export class MicrosoftDefenderEndpointConnector extends SubActionConnector< const responseBody = JSON.stringify(error.response?.data ?? {}); if (responseBody) { - return `${message}\nURL called: ${error.response?.config?.url}\nResponse body: ${responseBody}`; + return `${message}\nURL called:[${error.response?.config?.method}] ${error.response?.config?.url}\nResponse body: ${responseBody}`; } return message; @@ -153,10 +153,14 @@ export class MicrosoftDefenderEndpointConnector extends SubActionConnector< filter = {}, page = 1, pageSize = 20, + sortField = '', + sortDirection = 'desc', }: { filter: Record; - page: number; - pageSize: number; + page?: number; + pageSize?: number; + sortField?: string; + sortDirection?: string; }): Partial { const oDataQueryOptions: Partial = { $count: true, @@ -170,6 +174,10 @@ export class MicrosoftDefenderEndpointConnector extends SubActionConnector< oDataQueryOptions.$skip = page * pageSize - pageSize; } + if (sortField) { + oDataQueryOptions.$orderby = `${sortField} ${sortDirection}`; + } + const filterEntries = Object.entries(filter); if (filterEntries.length > 0) { @@ -185,7 +193,7 @@ export class MicrosoftDefenderEndpointConnector extends SubActionConnector< oDataQueryOptions.$filter += `${key} ${isArrayValue ? 'in' : 'eq'} ${ isArrayValue ? '(' + value.map((valueString) => `'${valueString}'`).join(',') + ')' - : value + : `'${value}'` }`; } } @@ -313,7 +321,13 @@ export class MicrosoftDefenderEndpointConnector extends SubActionConnector< } public async getActions( - { page = 1, pageSize = 20, ...filter }: MicrosoftDefenderEndpointGetActionsParams, + { + page = 1, + pageSize = 20, + sortField, + sortDirection = 'desc', + ...filter + }: MicrosoftDefenderEndpointGetActionsParams, connectorUsageCollector: ConnectorUsageCollector ): Promise { // API Reference: https://learn.microsoft.com/en-us/defender-endpoint/api/get-machineactions-collection @@ -323,7 +337,7 @@ export class MicrosoftDefenderEndpointConnector extends SubActionConnector< { url: `${this.urls.machineActions}`, method: 'GET', - params: this.buildODataUrlParams({ filter, page, pageSize }), + params: this.buildODataUrlParams({ filter, page, pageSize, sortField, sortDirection }), }, connectorUsageCollector ); @@ -342,4 +356,5 @@ interface BuildODataUrlParamsResponse { $top: number; $skip: number; $count: boolean; + $orderby: string; } diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx index 945ab23c43611..1e795a2cf3dd8 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx @@ -381,7 +381,7 @@ describe('action_type_form', () => { jest.useFakeTimers({ legacyFakeTimers: true }); wrapper.find('[data-test-subj="action-group-error-icon"]').first().simulate('mouseOver'); // Run the timers so the EuiTooltip will be visible - jest.runAllTimers(); + jest.runOnlyPendingTimers(); wrapper.update(); expect(wrapper.find('.euiToolTipPopover').last().text()).toBe('Action contains errors.'); // Clearing all mocks will also reset fake timers. diff --git a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts b/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts index 884f627353d9b..1ae06aa921fcb 100644 --- a/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts +++ b/x-pack/solutions/observability/packages/kbn-apm-types/src/es_schemas/raw/fields/user_agent.ts @@ -10,7 +10,7 @@ export interface UserAgent { name: string; }; name?: string; - original: string; + original?: string; os?: { name: string; version?: string; diff --git a/x-pack/solutions/observability/packages/utils_server/entities/get_data_streams_for_entity.ts b/x-pack/solutions/observability/packages/utils_server/entities/get_data_streams_for_entity.ts index 43d9134c7aaf3..9265a461db22e 100644 --- a/x-pack/solutions/observability/packages/utils_server/entities/get_data_streams_for_entity.ts +++ b/x-pack/solutions/observability/packages/utils_server/entities/get_data_streams_for_entity.ts @@ -54,7 +54,20 @@ export async function getDataStreamsForEntity({ }); const dataStreams = uniq( - compact(await resolveIndexResponse.indices.flatMap((idx) => idx.data_stream)) + compact([ + /* Check both data streams and indices. + * The response body shape differs depending on the request. Example: + * GET _resolve/index/logs-*-default* will return data in the `data_streams` key. + * GET _resolve/index/.ds-logs-*-default* will return data in the `indices` key */ + ...resolveIndexResponse.indices.flatMap((idx) => { + const remoteCluster = idx.name.includes(':') ? idx.name.split(':')[0] : null; + if (remoteCluster) { + return `${remoteCluster}:${idx.data_stream}`; + } + return idx.data_stream; + }), + ...resolveIndexResponse.data_streams.map((ds) => ds.name), + ]) ); return { diff --git a/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md b/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md index dccfe16afc4cd..c1c83768fd745 100644 --- a/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md +++ b/x-pack/solutions/observability/plugins/apm/dev_docs/testing.md @@ -136,35 +136,27 @@ node x-pack/solutions/observability/plugins/apm/scripts/test/dat --runner --stat The E2E tests are located in [`x-pack/solutions/observability/plugins/apm/ftr_e2e`](../ftr_e2e). -When PR is labeled with `apm:cypress-record`, test runs are recorded to the [Cypress Dashboard](https://dashboard.cypress.io). - -Tests run on buildkite PR pipeline are parallelized (4 parallel jobs) and are orchestrated by the Cypress dashboard service. It can be configured in [.buildkite/pipelines/pull_request/apm_cypress.yml](/~https://github.com/elastic/kibana/blob/main/.buildkite/pipelines/pull_request/apm_cypress.yml) with the property `parallelism`. +Tests run on buildkite PR pipeline are parallelized (8 parallel jobs) and are orchestrated by the Cypress dashboard service. It can be configured in [.buildkite/pipelines/pull_request/apm_cypress.yml](/~https://github.com/elastic/kibana/blob/main/.buildkite/pipelines/pull_request/apm_cypress.yml) with the property `parallelism`. ```yml ... depends_on: build - parallelism: 4 + parallelism: 8 ... ``` [Test tips and best practices](../ftr_e2e/README.md) -#### Start test server +#### Start Cypress dashboard ``` -node x-pack/solutions/observability/plugins/apm/scripts/test/e2e --server +node x-pack/solutions/observability/plugins/apm/scripts/test/e2e --headed ``` #### Run tests ``` -node x-pack/solutions/observability/plugins/apm/scripts/test/e2e --runner --open -``` - -### Run tests multiple times to check for flakiness - -``` -node x-pack/solutions/observability/plugins/apm/scripts/test/e2e --runner --times [--spec ] +node x-pack/solutions/observability/plugins/apm/scripts/test/e2e ``` ### A11y checks diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/README.md b/x-pack/solutions/observability/plugins/apm/ftr_e2e/README.md index 721760bc46b9a..cfa8f188d456e 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/README.md +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/README.md @@ -1,6 +1,6 @@ # APM E2E -APM uses [FTR](../../../../../../packages/kbn-test/README.mdx) (functional test runner) and [Cypress](https://www.cypress.io/) to run the e2e tests. The tests are located at `kibana/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/integration`. +APM uses [FTR](../../../../../../packages/kbn-test/README.mdx) (functional test runner) and [Cypress](https://www.cypress.io/) to run the e2e tests. The tests are located at `kibana/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/e2e`. ## Tips and best practices diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress.config.ts b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress.config.ts index 8dad8724264ee..79fd02bd35532 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress.config.ts +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress.config.ts @@ -9,28 +9,28 @@ import { defineCypressConfig } from '@kbn/cypress-config'; import { setupNodeEvents } from './setup_cypress_node_events'; export default defineCypressConfig({ - projectId: 'omwh6f', + reporter: '../../../../../../node_modules/cypress-multi-reporters', + reporterOptions: { + configFile: './reporter_config.json', + }, fileServerFolder: './cypress', fixturesFolder: './cypress/fixtures', screenshotsFolder: './cypress/screenshots', videosFolder: './cypress/videos', - requestTimeout: 10000, - responseTimeout: 40000, - defaultCommandTimeout: 30000, + defaultCommandTimeout: 60000, execTimeout: 120000, pageLoadTimeout: 120000, viewportHeight: 1800, viewportWidth: 1440, - video: true, - screenshotOnRunFailure: true, - retries: { - runMode: 1, - }, + video: false, + screenshotOnRunFailure: false, e2e: { setupNodeEvents, baseUrl: 'http://localhost:5601', supportFile: './cypress/support/e2e.ts', - specPattern: './cypress/e2e/**/*.cy.{js,jsx,ts,tsx}', + specPattern: './cypress/e2e/**/*.cy.ts', experimentalMemoryManagement: true, + numTestsKeptInMemory: 3, + experimentalRunAllSpecs: true, }, }); diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/.gitignore b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/.gitignore index c2f807a100b12..d501d1d6d3262 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/.gitignore +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/.gitignore @@ -1,2 +1,3 @@ /videos/* /screenshots/* +/downloads/* diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/support/e2e.ts b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/support/e2e.ts index 93daa0bc7ed2a..5f5d1eb3b3614 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/support/e2e.ts +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/support/e2e.ts @@ -10,4 +10,3 @@ Cypress.on('uncaught:exception', (err, runnable) => { }); import './commands'; -// import './output_command_timings'; diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/support/output_command_timings.ts b/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/support/output_command_timings.ts deleted file mode 100644 index fd305b0c7e98c..0000000000000 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/cypress/support/output_command_timings.ts +++ /dev/null @@ -1,65 +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. - */ - -const commands: Array<{ - name: string; - args: string; - started: number; - endedAt?: number; - elapsed: number; -}> = []; - -Cypress.on('test:after:run', (attributes, test) => { - if (attributes.state === 'pending') { - return; - } - - /* eslint-disable no-console */ - console.log('Test "%s" has finished in %dms', attributes.title, attributes.duration); - - let totalElapsed = 0; - - const commandsOutput = commands.map((e) => { - totalElapsed = totalElapsed + e.elapsed; - const startedDate = new Date(e.started); - return { - ...e, - started: `${startedDate.toLocaleTimeString()}:${startedDate.getMilliseconds()}`, - totalElapsed, - }; - }); - - commands.length = 0; - console.table(commandsOutput); - - if (test.state === 'failed') { - throw new Error(JSON.stringify(commandsOutput)); - } -}); - -Cypress.on('command:start', (c) => { - commands.push({ - name: c.attributes.name, - args: c.attributes.args - .slice(0, 5) - .map((arg: unknown) => JSON.stringify(arg)) - .join(','), - started: new Date().getTime(), - elapsed: 0, - }); -}); - -Cypress.on('command:end', (c) => { - const lastCommand = commands[commands.length - 1]; - - if (lastCommand.name !== c.attributes.name) { - throw new Error('Last command is wrong'); - } - - lastCommand.endedAt = new Date().getTime(); - lastCommand.elapsed = lastCommand.endedAt - lastCommand.started; -}); diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/package.json b/x-pack/solutions/observability/plugins/apm/ftr_e2e/package.json new file mode 100644 index 0000000000000..1bad8ad8eeb82 --- /dev/null +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/package.json @@ -0,0 +1,14 @@ +{ + "author": "Elastic", + "name": "@kbn/apm-ftr-e2e", + "version": "1.0.0", + "private": true, + "license": "Elastic License 2.0", + "scripts": { + "cypress": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../observability/plugins/apm/ftr_e2e/cypress.config.ts --ftr-config-file ../../../../../test/apm_cypress/cli_config", + "cypress:open": "yarn cypress open", + "cypress:run": "yarn cypress run", + "junit:merge": "../../../../../../node_modules/.bin/mochawesome-merge ../../../../../../target/kibana-apm/cypress/results/mochawesome*.json > ../../../../../../target/kibana-apm/cypress/results/output.json && ../../../../../../node_modules/.bin/marge ../../../../../../target/kibana-apm/cypress/results/output.json --reportDir ../../../../../../target/kibana-apm/cypress/results && yarn junit:transform && mkdir -p ../../../../../../target/junit && cp ../../../../../../target/kibana-apm/cypress/results/*.xml ../../../../../../target/junit/", + "junit:transform": "node ../../../../security/plugins/security_solution/scripts/junit_transformer --pathPattern '../../../../../../target/kibana-apm/cypress/results/*.xml' --rootDirectory ../../../../../../ --reportName 'APM Cypress' --writeInPlace" + } +} diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/reporter_config.json b/x-pack/solutions/observability/plugins/apm/ftr_e2e/reporter_config.json new file mode 100644 index 0000000000000..0852a2407e39f --- /dev/null +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/reporter_config.json @@ -0,0 +1,10 @@ +{ + "reporterEnabled": "mochawesome, mocha-junit-reporter", + "reporterOptions": { + "html": false, + "json": true, + "mochaFile": "../../../../../../target/kibana-apm/cypress/results/TEST-apm-cypress-[hash].xml", + "overwrite": false, + "reportDir": "../../../../../../target/kibana-apm/cypress/results" + } +} diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/setup_cypress_node_events.ts b/x-pack/solutions/observability/plugins/apm/ftr_e2e/setup_cypress_node_events.ts index e2fbf64f8f378..8a144fbae4c3a 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/setup_cypress_node_events.ts +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/setup_cypress_node_events.ts @@ -13,8 +13,6 @@ import { import { createEsClientForTesting } from '@kbn/test'; // eslint-disable-next-line @kbn/imports/no_unresolvable_imports import { initPlugin } from '@frsource/cypress-plugin-visual-regression-diff/plugins'; -import del from 'del'; -import { some } from 'lodash'; import { Readable } from 'stream'; export function setupNodeEvents(on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) { @@ -75,18 +73,6 @@ export function setupNodeEvents(on: Cypress.PluginEvents, config: Cypress.Plugin }, }); - on('after:spec', (spec, results) => { - // Delete videos that have no failures or retries - if (results && results.video) { - const failures = some(results.tests, (test) => { - return some(test.attempts, { state: 'failed' }); - }); - if (!failures) { - del(results.video); - } - } - }); - on('before:browser:launch', (browser, launchOptions) => { if (browser.name === 'electron' && browser.isHeadless) { launchOptions.preferences.width = 1440; diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/tsconfig.json b/x-pack/solutions/observability/plugins/apm/ftr_e2e/tsconfig.json index 87abf5bd4b4d9..4d3665ec9c3d1 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/tsconfig.json +++ b/x-pack/solutions/observability/plugins/apm/ftr_e2e/tsconfig.json @@ -11,11 +11,8 @@ "@kbn/test", "@kbn/apm-synthtrace", "@kbn/apm-synthtrace-client", - "@kbn/dev-utils", "@kbn/axe-config", "@kbn/cypress-config", "@kbn/apm-plugin", - "@kbn/ftr-common-functional-services", - "@kbn/ftr-common-functional-ui-services" ] } diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx b/x-pack/solutions/observability/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx index 2f43e738ed9ef..b1a1304a0e050 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { MetricDatum } from '@elastic/charts'; +import type { MetricWTrend } from '@elastic/charts'; import { MetricTrendShape } from '@elastic/charts'; import { i18n } from '@kbn/i18n'; import { EuiIcon, EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner, useEuiTheme } from '@elastic/eui'; @@ -105,7 +105,7 @@ export function MobileLocationStats({ [comparisonEnabled, previousPeriodLabel] ); - const metrics: MetricDatum[] = [ + const metrics: MetricWTrend[] = [ { color: euiTheme.colors.lightestShade, title: i18n.translate('xpack.apm.mobile.location.metrics.http.requests.title', { @@ -117,7 +117,7 @@ export function MobileLocationStats({ }), icon: getIcon('visBarHorizontal'), value: currentPeriod?.mostRequests.location ?? NOT_AVAILABLE_LABEL, - trend: currentPeriod?.mostRequests.timeseries, + trend: currentPeriod?.mostRequests.timeseries ?? [], trendShape: MetricTrendShape.Area, }, { @@ -131,7 +131,7 @@ export function MobileLocationStats({ }), icon: getIcon('bug'), value: currentPeriod?.mostCrashes.location ?? NOT_AVAILABLE_LABEL, - trend: currentPeriod?.mostCrashes.timeseries, + trend: currentPeriod?.mostCrashes.timeseries ?? [], trendShape: MetricTrendShape.Area, }, { @@ -145,7 +145,7 @@ export function MobileLocationStats({ }), icon: getIcon('timeslider'), value: currentPeriod?.mostSessions.location ?? NOT_AVAILABLE_LABEL, - trend: currentPeriod?.mostSessions.timeseries, + trend: currentPeriod?.mostSessions.timeseries ?? [], trendShape: MetricTrendShape.Area, }, { @@ -159,7 +159,7 @@ export function MobileLocationStats({ }), icon: getIcon('launch'), value: currentPeriod?.mostLaunches.location ?? NOT_AVAILABLE_LABEL, - trend: currentPeriod?.mostLaunches.timeseries, + trend: currentPeriod?.mostLaunches.timeseries ?? [], trendShape: MetricTrendShape.Area, }, ]; diff --git a/x-pack/solutions/observability/plugins/apm/scripts/package.json b/x-pack/solutions/observability/plugins/apm/scripts/package.json deleted file mode 100644 index d3303acb5c72d..0000000000000 --- a/x-pack/solutions/observability/plugins/apm/scripts/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "apm-scripts", - "version": "1.0.0", - "main": "index.js", - "license": "MIT" -} diff --git a/x-pack/solutions/observability/plugins/apm/scripts/test/e2e.js b/x-pack/solutions/observability/plugins/apm/scripts/test/e2e.js index 02cba1343fd4e..12708ea449218 100644 --- a/x-pack/solutions/observability/plugins/apm/scripts/test/e2e.js +++ b/x-pack/solutions/observability/plugins/apm/scripts/test/e2e.js @@ -6,97 +6,35 @@ */ /* eslint-disable no-console */ -const { times } = require('lodash'); const path = require('path'); const yargs = require('yargs'); const childProcess = require('child_process'); -const { REPO_ROOT } = require('@kbn/repo-info'); const { argv } = yargs(process.argv.slice(2)) .parserConfiguration({ 'unknown-options-as-args': true }) - .option('kibana-install-dir', { - default: '', - type: 'string', - description: 'Path to the Kibana install directory', - }) - .option('server', { - default: false, - type: 'boolean', - description: 'Start Elasticsearch and Kibana', - }) - .option('runner', { - default: false, - type: 'boolean', - description: - 'Run all tests (an instance of Elasticsearch and kibana are needs to be available)', - }) - .option('times', { - type: 'number', - description: 'Repeat the test n number of times', - }) - .option('bail', { + .option('headed', { default: false, type: 'boolean', - description: 'stop tests after the first failure', + description: 'Runs Cypress in headed mode', }) .help(); const e2eDir = path.join(__dirname, '../../ftr_e2e'); -let ftrScript = 'functional_tests.js'; -if (argv.server) { - ftrScript = 'functional_tests_server.js'; -} else if (argv.runner) { - ftrScript = 'functional_test_runner.js'; -} - -const cypressCliArgs = yargs(argv._).parserConfiguration({ - 'boolean-negation': false, -}).argv; - -if (cypressCliArgs.grep) { - throw new Error('--grep is not supported. Please use --spec instead'); -} - -const spawnArgs = [ - `${REPO_ROOT}/scripts/${ftrScript}`, - `--config=./ftr_config.ts`, - `--kibana-install-dir=${argv.kibanaInstallDir}`, - ...(argv.bail ? [`--bail`] : []), -]; - function runTests() { - console.log(`Running e2e tests: "node ${spawnArgs.join(' ')}"`); + const mode = argv.headed ? 'open' : 'run'; + console.log(`Running e2e tests: "yarn cypress:${mode}"`); - return childProcess.spawnSync('node', spawnArgs, { + return childProcess.spawnSync('yarn', [`cypress:${mode}`], { cwd: e2eDir, - env: { - ...process.env, - CYPRESS_CLI_ARGS: JSON.stringify(cypressCliArgs), - NODE_OPTIONS: '--openssl-legacy-provider', - }, encoding: 'utf8', stdio: 'inherit', }); } -const runCounter = { succeeded: 0, failed: 0, remaining: argv.times }; let exitStatus = 0; -times(argv.times ?? 1, () => { - const child = runTests(); - if (child.status === 0) { - runCounter.succeeded++; - } else { - exitStatus = child.status; - runCounter.failed++; - } - - runCounter.remaining--; - - if (argv.times > 1) { - console.log(runCounter); - } -}); +const child = runTests(); +exitStatus = child.status; process.exitCode = exitStatus; console.log(`Quitting with exit code ${exitStatus}`); diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/transactions/__snapshots__/queries.test.ts.snap b/x-pack/solutions/observability/plugins/apm/server/routes/transactions/__snapshots__/queries.test.ts.snap index c7f832fe5ca65..46ea360339f6a 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/transactions/__snapshots__/queries.test.ts.snap +++ b/x-pack/solutions/observability/plugins/apm/server/routes/transactions/__snapshots__/queries.test.ts.snap @@ -29,6 +29,11 @@ Object { "transaction.type", "processor.name", "service.language.name", + "url.full", + "transaction.page.url", + "http.response.status_code", + "http.request.method", + "user_agent.name", ], "query": Object { "bool": Object { diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/transactions/get_transaction/index.ts b/x-pack/solutions/observability/plugins/apm/server/routes/transactions/get_transaction/index.ts index e4076e174f9f7..d40c88ed3d53b 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/transactions/get_transaction/index.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/transactions/get_transaction/index.ts @@ -25,6 +25,11 @@ import { SPAN_LINKS, TRANSACTION_AGENT_MARKS, SERVICE_LANGUAGE_NAME, + URL_FULL, + HTTP_REQUEST_METHOD, + HTTP_RESPONSE_STATUS_CODE, + TRANSACTION_PAGE_URL, + USER_AGENT_NAME, } from '../../../../common/es_fields/apm'; import { asMutableArray } from '../../../../common/utils/as_mutable_array'; import type { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; @@ -58,7 +63,15 @@ export async function getTransaction({ TRANSACTION_TYPE, ] as const); - const optionalFields = asMutableArray([PROCESSOR_NAME, SERVICE_LANGUAGE_NAME] as const); + const optionalFields = asMutableArray([ + PROCESSOR_NAME, + SERVICE_LANGUAGE_NAME, + URL_FULL, + TRANSACTION_PAGE_URL, + HTTP_RESPONSE_STATUS_CODE, + HTTP_REQUEST_METHOD, + USER_AGENT_NAME, + ] as const); const resp = await apmEventClient.search('get_transaction', { apm: { diff --git a/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/call_kibana.ts b/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/call_kibana.ts index 9a24c55f4456f..637177ca89de5 100644 --- a/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/call_kibana.ts +++ b/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/call_kibana.ts @@ -6,7 +6,6 @@ */ import type { AxiosRequestConfig, AxiosError } from 'axios'; import axios from 'axios'; -import { once } from 'lodash'; import type { Elasticsearch, Kibana } from '../create_apm_users'; const DEFAULT_HEADERS = { @@ -34,7 +33,7 @@ export async function callKibana({ return data; } -const getBaseUrl = once(async (kibanaHostname: string) => { +const getBaseUrl = async (kibanaHostname: string) => { try { await axios.request({ url: kibanaHostname, @@ -52,7 +51,7 @@ const getBaseUrl = once(async (kibanaHostname: string) => { throw e; } return kibanaHostname; -}); +}; export function isAxiosError(e: AxiosError | Error): e is AxiosError { return 'isAxiosError' in e; diff --git a/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/create_custom_role.ts b/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/create_custom_role.ts index 0f1675e253ebc..6f5738fce202f 100644 --- a/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/create_custom_role.ts +++ b/x-pack/solutions/observability/plugins/apm/server/test_helpers/create_apm_users/helpers/create_custom_role.ts @@ -39,6 +39,9 @@ export async function createCustomRole({ data: { ...omit(role, 'applications'), }, + headers: { + 'elastic-api-version': '2023-10-31', + }, }, }); } diff --git a/x-pack/solutions/observability/plugins/infra/public/components/asset_details/tabs/dashboards/actions/actions.test.tsx b/x-pack/solutions/observability/plugins/infra/public/components/asset_details/tabs/dashboards/actions/actions.test.tsx index 27ae309078cad..bc1c59b3b8835 100644 --- a/x-pack/solutions/observability/plugins/infra/public/components/asset_details/tabs/dashboards/actions/actions.test.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/components/asset_details/tabs/dashboards/actions/actions.test.tsx @@ -9,6 +9,7 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import { EditDashboard, UnlinkDashboard, LinkDashboard } from '.'; import { useTabSwitcherContext } from '../../../hooks/use_tab_switcher'; +import * as fetchCustomDashboards from '../../../hooks/use_fetch_custom_dashboards'; import * as hooks from '../../../hooks/use_saved_objects_permissions'; const TEST_CURRENT_DASHBOARD = { @@ -114,34 +115,61 @@ describe('Custom Dashboards Actions', () => { expect(screen.getByTestId('infraLinkDashboardMenu')).toBeDisabled(); expect(screen.getByTestId('infraLinkDashboardMenu')).toHaveTextContent('Link new dashboard'); }); - it('should render the unlink dashboard action when the user can unlink a dashboard', () => { - jest.spyOn(hooks, 'useSavedObjectUserPermissions').mockImplementation(() => ({ - canSave: true, - canDelete: true, - })); - render( - {}} - assetType="host" - currentDashboard={TEST_CURRENT_DASHBOARD} - /> - ); - expect(screen.getByTestId('infraUnLinkDashboardMenu')).not.toBeDisabled(); - expect(screen.getByTestId('infraUnLinkDashboardMenu')).toHaveTextContent('Unlink dashboard'); - }); - it('should render the unlink dashboard action when the user cannot unlink a dashboard', () => { - jest.spyOn(hooks, 'useSavedObjectUserPermissions').mockImplementation(() => ({ - canSave: true, - canDelete: false, - })); - render( - {}} - assetType="host" - currentDashboard={TEST_CURRENT_DASHBOARD} - /> - ); - expect(screen.getByTestId('infraUnLinkDashboardMenu')).toBeDisabled(); - expect(screen.getByTestId('infraUnLinkDashboardMenu')).toHaveTextContent('Unlink dashboard'); + + describe('UnlinkDashboard', () => { + const fetchCustomDashboardsSpy = jest.spyOn(fetchCustomDashboards, 'useFetchCustomDashboards'); + + beforeEach(() => { + // provide mock for invocation to fetch custom dashboards + fetchCustomDashboardsSpy.mockReturnValue({ + dashboards: [ + { + id: 'test-so-id', + dashboardSavedObjectId: 'test-dashboard-id', + assetType: 'host', + dashboardFilterAssetIdEnabled: true, + }, + ], + loading: false, + error: null, + // @ts-expect-error we provide a mock function as we don't need to test the actual implementation + refetch: jest.fn(), + }); + }); + + afterEach(() => { + fetchCustomDashboardsSpy.mockClear(); + }); + + it('should render the unlink dashboard action when the user can unlink a dashboard', () => { + jest.spyOn(hooks, 'useSavedObjectUserPermissions').mockImplementation(() => ({ + canSave: true, + canDelete: true, + })); + render( + {}} + assetType="host" + currentDashboard={TEST_CURRENT_DASHBOARD} + /> + ); + expect(screen.getByTestId('infraUnLinkDashboardMenu')).not.toBeDisabled(); + expect(screen.getByTestId('infraUnLinkDashboardMenu')).toHaveTextContent('Unlink dashboard'); + }); + it('should render the unlink dashboard action when the user cannot unlink a dashboard', () => { + jest.spyOn(hooks, 'useSavedObjectUserPermissions').mockImplementation(() => ({ + canSave: true, + canDelete: false, + })); + render( + {}} + assetType="host" + currentDashboard={TEST_CURRENT_DASHBOARD} + /> + ); + expect(screen.getByTestId('infraUnLinkDashboardMenu')).toBeDisabled(); + expect(screen.getByTestId('infraUnLinkDashboardMenu')).toHaveTextContent('Unlink dashboard'); + }); }); }); diff --git a/x-pack/solutions/observability/plugins/infra/public/components/lens/lens_chart.tsx b/x-pack/solutions/observability/plugins/infra/public/components/lens/lens_chart.tsx index 6e3c4c7bb5c33..90622b53bc462 100644 --- a/x-pack/solutions/observability/plugins/infra/public/components/lens/lens_chart.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/components/lens/lens_chart.tsx @@ -35,7 +35,6 @@ const DEFAULT_DISABLED_ACTIONS = [ export type LensChartProps = BaseChartProps & Pick & { toolTip?: React.ReactElement; - reloadRequestTime?: number; description?: string; } & { lensAttributes: UseLensAttributesParams; @@ -55,7 +54,7 @@ export const LensChart = React.memo( onFilter, overrides, toolTip, - reloadRequestTime, + lastReloadRequestTime, disableTriggers = false, height = MIN_HEIGHT, loading = false, @@ -71,7 +70,7 @@ export const LensChart = React.memo( timeRange: dateRange, query, filters, - lastReloadRequestTime: reloadRequestTime, + lastReloadRequestTime, }); const handleBeforeBadgesRender = useCallback((messages: UserMessage[]) => { @@ -141,7 +140,7 @@ export const LensChart = React.memo( query={query} overrides={overrides} onBrushEnd={onBrushEnd} - lastReloadRequestTime={reloadRequestTime} + lastReloadRequestTime={lastReloadRequestTime} onFilter={onFilter} onBeforeBadgesRender={handleBeforeBadgesRender} /> diff --git a/x-pack/solutions/observability/plugins/infra/server/routes/entities/get_data_stream_types.ts b/x-pack/solutions/observability/plugins/infra/server/routes/entities/get_data_stream_types.ts index 3b34bd5dceeac..bdd592fda201a 100644 --- a/x-pack/solutions/observability/plugins/infra/server/routes/entities/get_data_stream_types.ts +++ b/x-pack/solutions/observability/plugins/infra/server/routes/entities/get_data_stream_types.ts @@ -67,5 +67,5 @@ export async function getDataStreamTypes({ }); } - return Array.from(sourceDataStreams); + return Array.from(sourceDataStreams).filter(Boolean); } diff --git a/x-pack/solutions/observability/plugins/investigate_app/common/rca/llm_context.ts b/x-pack/solutions/observability/plugins/investigate_app/common/rca/llm_context.ts new file mode 100644 index 0000000000000..c382026306998 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/common/rca/llm_context.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common'; +import { + ALERT_FLAPPING_HISTORY, + ALERT_RULE_EXECUTION_TIMESTAMP, + ALERT_RULE_EXECUTION_UUID, + EVENT_ACTION, + EVENT_KIND, +} from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; +import { omit } from 'lodash'; + +export function sanitizeAlert(alert: EcsFieldsResponse) { + return omit( + alert, + ALERT_RULE_EXECUTION_TIMESTAMP, + '_index', + ALERT_FLAPPING_HISTORY, + EVENT_ACTION, + EVENT_KIND, + ALERT_RULE_EXECUTION_UUID, + '@timestamp' + ); +} + +export function getRCAContext(alert: EcsFieldsResponse, serviceName: string) { + return `The user is investigating an alert for the ${serviceName} service, + and wants to find the root cause. Here is the alert: + + ${JSON.stringify(sanitizeAlert(alert))}`; +} diff --git a/x-pack/solutions/observability/plugins/investigate_app/public/pages/details/components/assistant_hypothesis/assistant_hypothesis.tsx b/x-pack/solutions/observability/plugins/investigate_app/public/pages/details/components/assistant_hypothesis/assistant_hypothesis.tsx index 57ced473922d0..9b13892b5a9ea 100644 --- a/x-pack/solutions/observability/plugins/investigate_app/public/pages/details/components/assistant_hypothesis/assistant_hypothesis.tsx +++ b/x-pack/solutions/observability/plugins/investigate_app/public/pages/details/components/assistant_hypothesis/assistant_hypothesis.tsx @@ -8,19 +8,12 @@ import { i18n } from '@kbn/i18n'; import type { RootCauseAnalysisEvent } from '@kbn/observability-ai-server/root_cause_analysis'; import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common'; -import { - ALERT_FLAPPING_HISTORY, - ALERT_RULE_EXECUTION_TIMESTAMP, - ALERT_RULE_EXECUTION_UUID, - EVENT_ACTION, - EVENT_KIND, -} from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; import { isRequestAbortedError } from '@kbn/server-route-repository-client'; -import { omit } from 'lodash'; import React, { useEffect, useRef, useState } from 'react'; import { useKibana } from '../../../../hooks/use_kibana'; import { useUpdateInvestigation } from '../../../../hooks/use_update_investigation'; import { useInvestigation } from '../../contexts/investigation_context'; +import { getRCAContext } from '../../../../../common/rca/llm_context'; export interface InvestigationContextualInsight { key: string; @@ -90,10 +83,7 @@ export function AssistantHypothesis() { body: { investigationId: investigation!.id, connectorId, - context: `The user is investigating an alert for the ${serviceName} service, - and wants to find the root cause. Here is the alert: - - ${JSON.stringify(sanitizeAlert(nonNullishAlert))}`, + context: getRCAContext(nonNullishAlert, nonNullishServiceName), rangeFrom, rangeTo, serviceName: nonNullishServiceName, @@ -190,16 +180,3 @@ export function AssistantHypothesis() { /> ); } - -function sanitizeAlert(alert: EcsFieldsResponse) { - return omit( - alert, - ALERT_RULE_EXECUTION_TIMESTAMP, - '_index', - ALERT_FLAPPING_HISTORY, - EVENT_ACTION, - EVENT_KIND, - ALERT_RULE_EXECUTION_UUID, - '@timestamp' - ); -} diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/README.md b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/README.md new file mode 100644 index 0000000000000..4f06a97699c5a --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/README.md @@ -0,0 +1,35 @@ +# Investigation RCA Evaluation Framework + +## Overview + +This tool is developed for our team working on the Elastic Observability platform, specifically focusing on evaluating the Investigation RCA AI Integration. It simplifies archiving data critical for evaluating the Investigation UI and it's integration with large language models (LLM). + +## Setup requirements + +- An Elasticsearch instance + +You'll need an instance configured with cross cluster search for the [edge-rca](https://studious-disco-k66oojq.pages.github.io/edge-rca/) cluster. To create one, utilize [oblt-cli](https://studious-disco-k66oojq.pages.github.io/user-guide/cluster-create-ccs/) and select `edge-rca` as the remote cluster. + +## Running archive + +Run the tool using: + +`$ node x-pack/solutions/observability/plugins/investigate_app/scripts/archive/index.js --kibana http://admin:[YOUR_CLUSTER_PASSWORD]@localhost:5601` + +This will archive the observability alerts index to use as fixtures within the tests. + +Archived data will automatically be saved at the root of the kibana project in the `.rca/archives` folder. + +## Creating a test fixture + +To create a test fixture, create a new folder in `x-pack/solutions/observability/plugins/investigate_app/scripts/load/fixtures` with the `data.json.gz` file and the `mappings.json` file. The fixture will now be loaded when running `$ node x-pack/solutions/observability/plugins/investigate_app/scripts/load/index.js` + +### Configuration + +#### Kibana and Elasticsearch + +By default, the tool will look for a Kibana instance running locally (at `http://localhost:5601`, which is the default address for running Kibana in development mode). It will also attempt to read the Kibana config file for the Elasticsearch address & credentials. If you want to override these settings, use `--kibana` and `--es`. Only basic auth is supported, e.g. `--kibana http://username:password@localhost:5601`. If you want to use a specific space, use `--spaceId` + +#### filePath + +Use `--filePath` to specify a custom file path to store your archived data. By default, data is stored at `.rca/archives` diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/archive.ts b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/archive.ts new file mode 100644 index 0000000000000..44966ffd2ad02 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/archive.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 { spawnSync } from 'child_process'; +import { run } from '@kbn/dev-cli-runner'; +import yargs from 'yargs'; +import { getServiceUrls } from '@kbn/observability-ai-assistant-app-plugin/scripts/evaluation/get_service_urls'; +import { options } from './cli'; + +async function archiveAllRelevantData({ filePath, esUrl }: { filePath: string; esUrl: string }) { + spawnSync( + 'node', + ['scripts/es_archiver', 'save', `${filePath}/alerts`, '.internal.alerts-*', '--es-url', esUrl], + { + stdio: 'inherit', + } + ); +} + +function archiveData() { + yargs(process.argv.slice(2)) + .command('*', 'Archive RCA data', async () => { + const argv = await options(yargs); + run( + async ({ log }) => { + const serviceUrls = await getServiceUrls({ + log, + elasticsearch: argv.elasticsearch, + kibana: argv.kibana, + }); + await archiveAllRelevantData({ + esUrl: serviceUrls.esUrl, + filePath: argv.filePath, + }); + }, + { + log: { + defaultLevel: argv.logLevel as any, + }, + flags: { + allowUnexpected: true, + }, + } + ); + }) + .parse(); +} + +archiveData(); diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/cli.ts b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/cli.ts new file mode 100644 index 0000000000000..179d8ce767e7f --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/cli.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 * as inquirer from 'inquirer'; +import * as fs from 'fs'; +import { Argv } from 'yargs'; +import { + elasticsearchOption, + kibanaOption, +} from '@kbn/observability-ai-assistant-app-plugin/scripts/evaluation/cli'; + +function getISOStringWithoutMicroseconds(): string { + const now = new Date(); + const isoString = now.toISOString(); + return isoString.split('.')[0] + 'Z'; +} + +export async function options(y: Argv) { + const argv = y + .option('filePath', { + string: true as const, + describe: 'file path to store the archived data', + default: `./.rca/archives/${getISOStringWithoutMicroseconds()}`, + }) + .option('kibana', kibanaOption) + .option('elasticsearch', elasticsearchOption) + .option('logLevel', { + describe: 'Log level', + default: 'info', + }).argv; + + if ( + fs.existsSync(`${argv.filePath}/data.json.gz`) || + fs.existsSync(`${argv.filePath}/mappings.json`) + ) { + const { confirmOverwrite } = await inquirer.prompt([ + { + type: 'confirm', + name: 'confirmOverwrite', + message: `Archived data already exists at path: ${argv.filePath}. Do you want to overwrite it?`, + default: false, + }, + ]); + + if (!confirmOverwrite) { + process.exit(1); + } + } + + return argv; +} diff --git a/x-pack/solutions/observability/plugins/apm/ftr_e2e/ftr_provider_context.d.ts b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/index.js similarity index 66% rename from x-pack/solutions/observability/plugins/apm/ftr_e2e/ftr_provider_context.d.ts rename to x-pack/solutions/observability/plugins/investigate_app/scripts/archive/index.js index 30a5f1fe518da..105baeba7af57 100644 --- a/x-pack/solutions/observability/plugins/apm/ftr_e2e/ftr_provider_context.d.ts +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/archive/index.js @@ -5,6 +5,6 @@ * 2.0. */ -import type { GenericFtrProviderContext } from '@kbn/test'; +require('@kbn/babel-register').install(); -export type FtrProviderContext = GenericFtrProviderContext<{}, {}>; +require('./archive'); diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/.eslintrc.json b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/.eslintrc.json new file mode 100644 index 0000000000000..4eef2a5557280 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "overrides": [ + { + "files": [ + "**/*.spec.ts" + ], + "rules": { + "@kbn/imports/require_import": [ + "error", + "@kbn/ambient-ftr-types" + ], + "@typescript-eslint/triple-slash-reference": "off", + "spaced-comment": "off" + } + } + ] +} diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/README.md b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/README.md new file mode 100644 index 0000000000000..d83f97b39f9d6 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/README.md @@ -0,0 +1,53 @@ +# Investigation RCA Evaluation Framework + +## Overview + +This tool is developed for our team working on the Elastic Observability platform, specifically focusing on evaluating the Investigation RCA AI Integration. It simplifies scripting and evaluating various scenarios with the Large Language Model (LLM) integration. + +## Setup requirements + +- An Elasticsearch instance configured with cross cluster search pointing to the edge-rca cluster +- A Kibana instance +- At least one .gen-ai connector set up + +## Running evaluations + +### Prerequists + +#### Elasticsearch instance + +You'll need an instance configured with cross cluster search for the [edge-rca](https://studious-disco-k66oojq.pages.github.io/edge-rca/) cluster. To create one, utilize [oblt-cli](https://studious-disco-k66oojq.pages.github.io/user-guide/cluster-create-ccs/) and select `edge-rca` as the remote cluster. + +Once your cluster is created, paste the the yml config provided in your `kibana.dev.yml` file. + +#### Fixture data + +To load the fixtures needed for the tests, first run: + +`$ node x-pack/solutions/observability/plugins/investigate_app/scripts/load/index.js --kibana http://admin:[YOUR_CLUSTER_PASSWORD]@localhost:5601` + +### Executing tests + +Run the tool using: + +`$ $ node x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/index.js --files=x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/scenarios/rca/index.spec.ts --kibana http://admin:[YOUR_CLUSTER_PASSWORD]@localhost:5601` + +This will evaluate all existing scenarios, and write the evaluation results to the terminal. + +### Configuration + +#### Kibana and Elasticsearch + +By default, the tool will look for a Kibana instance running locally (at `http://localhost:5601`, which is the default address for running Kibana in development mode). It will also attempt to read the Kibana config file for the Elasticsearch address & credentials. If you want to override these settings, use `--kibana` and `--es`. Only basic auth is supported, e.g. `--kibana http://username:password@localhost:5601`. If you want to use a specific space, use `--spaceId` + +#### Connector + +Use `--connectorId` to specify a `.gen-ai` or `.bedrock` connector to use. If none are given, it will prompt you to select a connector based on the ones that are available. If only a single supported connector is found, it will be used without prompting. + +#### Persisting conversations + +By default, completed conversations are not persisted. If you do want to persist them, for instance for reviewing purposes, set the `--persist` flag to store them. This will also generate a clickable link in the output of the evaluation that takes you to the conversation. + +If you want to clear conversations on startup, use the `--clear` flag. This only works when `--persist` is enabled. If `--spaceId` is set, only conversations for the current space will be cleared. + +When storing conversations, the name of the scenario is used as a title. Set the `--autoTitle` flag to have the LLM generate a title for you. diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/rca_client.ts b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/rca_client.ts new file mode 100644 index 0000000000000..c6187d8e418c3 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/rca_client.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 { Readable } from 'stream'; +import { AxiosResponse } from 'axios'; +import { v4 as uuidv4 } from 'uuid'; +import datemath from '@kbn/datemath'; +import { ToolingLog } from '@kbn/tooling-log'; +import { CreateInvestigationResponse } from '@kbn/investigation-shared'; +import type { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common'; +import { httpResponseIntoObservable } from '@kbn/sse-utils-client'; +import { defer, lastValueFrom, toArray } from 'rxjs'; +import { KibanaClient } from '@kbn/observability-ai-assistant-app-plugin/scripts/evaluation/kibana_client'; +import type { RootCauseAnalysisEvent } from '@kbn/observability-ai-server/root_cause_analysis'; +import { getRCAContext } from '../../common/rca/llm_context'; + +export class RCAClient { + constructor(protected readonly kibanaClient: KibanaClient, protected readonly log: ToolingLog) {} + + async getAlert(alertId: string): Promise { + const response = await this.kibanaClient.callKibana('get', { + pathname: '/internal/rac/alerts', + query: { + id: alertId, + }, + }); + return response.data; + } + + async getTimeRange({ + fromOffset = 'now-15m', + toOffset = 'now+15m', + alert, + }: { + fromOffset: string; + toOffset: string; + alert: EcsFieldsResponse; + }) { + const alertStart = alert['kibana.alert.start'] as string | undefined; + if (!alertStart) { + throw new Error( + 'Alert start time is missing from the alert data. Please double check your alert fixture.' + ); + } + const from = datemath.parse(fromOffset, { forceNow: new Date(alertStart) })?.valueOf()!; + const to = datemath.parse(toOffset, { forceNow: new Date(alertStart) })?.valueOf()!; + return { + from, + to, + }; + } + + async createInvestigation({ + alertId, + from, + to, + }: { + alertId: string; + from: number; + to: number; + }): Promise { + const body = { + id: uuidv4(), + title: 'Investigate Custom threshold breached', + params: { + timeRange: { + from, + to, + }, + }, + tags: [], + origin: { + type: 'alert', + id: alertId, + }, + externalIncidentUrl: null, + }; + + const response = await this.kibanaClient.callKibana( + 'post', + { + pathname: '/api/observability/investigations', + }, + body + ); + + return response.data.id; + } + + async deleteInvestigation({ investigationId }: { investigationId: string }): Promise { + await this.kibanaClient.callKibana('delete', { + pathname: `/api/observability/investigations/${investigationId}`, + }); + } + + async rootCauseAnalysis({ + connectorId, + investigationId, + from, + to, + alert, + }: { + connectorId: string; + investigationId: string; + from: string; + to: string; + alert?: EcsFieldsResponse; + }) { + this.log.debug(`Calling root cause analysis API`); + const that = this; + const serviceName = alert?.['service.name'] as string | undefined; + if (!alert) { + throw new Error( + 'Alert not found. Please ensure you have loaded test fixture data prior to running tests.' + ); + } + if (!serviceName) { + throw new Error( + 'Service name is missing from the alert data. Please double check your alert fixture.' + ); + } + const context = getRCAContext(alert, serviceName); + const body = { + investigationId, + connectorId, + context, + rangeFrom: from, + rangeTo: to, + serviceName: 'controller', + completeInBackground: false, + }; + + const chat$ = defer(async () => { + const response: AxiosResponse = await this.kibanaClient.callKibana( + 'post', + { + pathname: '/internal/observability/investigation/root_cause_analysis', + }, + body, + { responseType: 'stream', timeout: NaN } + ); + + return { + response: { + body: new ReadableStream({ + start(controller) { + response.data.on('data', (chunk: Buffer) => { + that.log.info(`Analyzing root cause...`); + controller.enqueue(chunk); + }); + + response.data.on('end', () => { + that.log.info(`Root cause analysis completed`); + controller.close(); + }); + + response.data.on('error', (err: Error) => { + that.log.error(`Error while analyzing root cause: ${err}`); + controller.error(err); + }); + }, + }), + }, + }; + }).pipe(httpResponseIntoObservable(), toArray()); + + const events = await lastValueFrom(chat$); + + return events.map((event) => event.event) as RootCauseAnalysisEvent[]; + } +} diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/scenarios/rca/index.spec.ts b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/scenarios/rca/index.spec.ts new file mode 100644 index 0000000000000..1a6ecea09f3b9 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/evaluate/scenarios/rca/index.spec.ts @@ -0,0 +1,150 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/// + +import type { + RootCauseAnalysisEvent, + EndProcessToolMessage, + InvestigateEntityToolMessage, + ObservationToolMessage, + ToolErrorMessage, +} from '@kbn/observability-ai-server/root_cause_analysis'; +import { + chatClient, + kibanaClient, + logger, +} from '@kbn/observability-ai-assistant-app-plugin/scripts/evaluation/services'; +import { RCAClient } from '../../rca_client'; + +type ToolCallMessage = + | EndProcessToolMessage + | InvestigateEntityToolMessage + | ObservationToolMessage + | ToolErrorMessage; + +const ALERT_FIXTURE_ID = '0265d890-8d8d-4c7e-a5bd-a3951f79574e'; + +describe('Root cause analysis', () => { + const investigations: string[] = []; + const rcaChatClient = new RCAClient(kibanaClient, logger); + function countEntities(entities: InvestigateEntityToolMessage[]) { + const entityCount: Record = {}; + entities.forEach((entity) => { + const name = entity.response.entity['service.name']; + entityCount[name] = (entityCount[name] || 0) + 1; + }); + return entityCount; + } + + function categorizeEvents(events: RootCauseAnalysisEvent[]) { + const report: EndProcessToolMessage[] = []; + const observations: ObservationToolMessage[] = []; + const errors: ToolErrorMessage[] = []; + const entities: InvestigateEntityToolMessage[] = []; + const other: RootCauseAnalysisEvent[] = []; + const toolCallEvents = events.filter((event): event is ToolCallMessage => { + const maybeToolEvent = event as EndProcessToolMessage; + return ( + maybeToolEvent?.name === 'endProcessAndWriteReport' || + maybeToolEvent?.name === 'observe' || + maybeToolEvent?.name === 'error' || + maybeToolEvent?.name === 'investigateEntity' + ); + }); + toolCallEvents.forEach((event) => { + if (event.name) { + switch (event.name) { + case 'endProcessAndWriteReport': + report.push(event as EndProcessToolMessage); + break; + case 'observe': + observations.push(event as ObservationToolMessage); + break; + case 'error': + errors.push(event as ToolErrorMessage); + break; + case 'investigateEntity': + entities.push(event as InvestigateEntityToolMessage); + break; + default: + other.push(event); + } + } + }); + if (report.length > 1) { + throw new Error('More than one final report found'); + } + if (report.length === 0) { + throw new Error('No final report found'); + } + return { report: report[0], observations, errors, entities, other }; + } + + it('can accurately pinpoint the root cause of cartservice bad entrypoint failure', async () => { + const alert = await rcaChatClient.getAlert(ALERT_FIXTURE_ID); + const connectorId = chatClient.getConnectorId(); + const { from, to } = await rcaChatClient.getTimeRange({ + fromOffset: 'now-15m', + toOffset: 'now+15m', + alert, + }); + const investigationId = await rcaChatClient.createInvestigation({ + alertId: ALERT_FIXTURE_ID, + from, + to, + }); + investigations.push(investigationId); + const events = await rcaChatClient.rootCauseAnalysis({ + investigationId, + from: new Date(from).toISOString(), + to: new Date(to).toISOString(), + alert, + connectorId, + }); + const { report, entities, errors } = categorizeEvents(events); + const prompt = ` + An investigation was performed by the Observability AI Assistant to identify the root cause of an alert for the controller service. Here is the alert: + + ${JSON.stringify(alert)} + + The following entities were analyzed during the investigation. + ${Object.entries(countEntities(entities)) + .map(([name, count]) => { + return ` - ${name} (analyzed ${count} times)`; + }) + .join('\n')} + + During the course of the investigation, the Observability AI Assistant encountered ${ + errors.length + } errors when attempting to analyze the entities.${ + errors.length + ? ' These errors were failures to retrieve data from the entities and do not reflect issues in the system being evaluated' + : '' + }. + + A report was written by the Observability AI Assistant detailing issues throughout the system, including the controller service and it's dependencies. The report includes a hypothesis about the underlying root cause of the system failure. Here is the report: + + ${report.response.report} + `; + + const conversation = await chatClient.complete({ messages: prompt }); + + await chatClient.evaluate(conversation, [ + 'Effectively reflects the actual root cause in the report. The actual root cause of the system failure was a misconfiguration related to the `cartservice`. A bad container entrypoint was configured for the cart service, causing it to fail to start', + 'Analyzes the cartservice during the course of the investigation.', + 'Analyzes each entity only once.', + 'The Observability AI Assistant encountered 0 errors when attempting to analyze the system failure.', + ]); + }); + + after(async () => { + for (const investigationId of investigations) { + await rcaChatClient.deleteInvestigation({ investigationId }); + } + }); +}); diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/load/README.md b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/README.md new file mode 100644 index 0000000000000..de4452c036612 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/README.md @@ -0,0 +1,25 @@ +# Investigation RCA Evaluation Framework + +## Overview + +This tool is developed for our team working on the Elastic Observability platform, specifically focusing on evaluating the Investigation RCA AI Integration. It simplifies archiving data critical for evaluating the Investigation UI and it's integration with large language models (LLM). + +## Setup requirements + +- An Elasticsearch instance + +You'll need an instance configured with cross cluster search for the [edge-rca](https://studious-disco-k66oojq.pages.github.io/edge-rca/) cluster. To create one, utilize [oblt-cli](https://studious-disco-k66oojq.pages.github.io/user-guide/cluster-create-ccs/) and select `edge-rca` as the remote cluster. + +## Running archive + +Run the tool using: + +`$ node x-pack/solutions/observability/plugins/investigate_app/scripts/load/index.js --kibana http://admin:[YOUR_CLUSTER_PASSWORD]@localhost:5601` + +This will load all fixtures located in `./fixtures`. + +### Configuration + +#### Kibana and Elasticsearch + +By default, the tool will look for a Kibana instance running locally (at `http://localhost:5601`, which is the default address for running Kibana in development mode). It will also attempt to read the Kibana config file for the Elasticsearch address & credentials. If you want to override these settings, use `--kibana` and `--es`. Only basic auth is supported, e.g. `--kibana http://username:password@localhost:5601`. If you want to use a specific space, use `--spaceId` diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/load/cli.ts b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/cli.ts new file mode 100644 index 0000000000000..61e0235a439fa --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/cli.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { Argv } from 'yargs'; +import { + elasticsearchOption, + kibanaOption, +} from '@kbn/observability-ai-assistant-app-plugin/scripts/evaluation/cli'; + +export async function options(y: Argv) { + const argv = y + .option('kibana', kibanaOption) + .option('elasticsearch', elasticsearchOption) + .option('logLevel', { + describe: 'Log level', + default: 'info', + }).argv; + + return argv; +} diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/load/fixtures/custom_threshold_alerts/data.json.gz b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/fixtures/custom_threshold_alerts/data.json.gz new file mode 100644 index 0000000000000..df19f47f804b2 Binary files /dev/null and b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/fixtures/custom_threshold_alerts/data.json.gz differ diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/load/fixtures/custom_threshold_alerts/mappings.json b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/fixtures/custom_threshold_alerts/mappings.json new file mode 100644 index 0000000000000..99d57716fe7b6 --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/fixtures/custom_threshold_alerts/mappings.json @@ -0,0 +1,33106 @@ +{ + "type": "index", + "value": { + "aliases": { + ".alerts-observability.apm.alerts-default": { + "is_write_index": true + } + }, + "index": ".internal.alerts-observability.apm.alerts-default-000001", + "mappings": { + "_meta": { + "kibana": { + "version": "9.0.0" + }, + "managed": true, + "namespace": "default" + }, + "dynamic": "false", + "properties": { + "@timestamp": { + "ignore_malformed": false, + "type": "date" + }, + "agent": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "container": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "type": "keyword" + } + } + }, + "error": { + "properties": { + "grouping_key": { + "type": "keyword" + }, + "grouping_name": { + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "kibana": { + "properties": { + "alert": { + "properties": { + "action_group": { + "type": "keyword" + }, + "case_ids": { + "type": "keyword" + }, + "consecutive_matches": { + "type": "long" + }, + "context": { + "type": "object" + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "end": { + "type": "date" + }, + "evaluation": { + "properties": { + "threshold": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "value": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "values": { + "scaling_factor": 100, + "type": "scaled_float" + } + } + }, + "flapping": { + "type": "boolean" + }, + "flapping_history": { + "type": "boolean" + }, + "group": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "intended_timestamp": { + "type": "date" + }, + "last_detected": { + "type": "date" + }, + "maintenance_window_ids": { + "type": "keyword" + }, + "previous_action_group": { + "type": "keyword" + }, + "reason": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "rule": { + "properties": { + "author": { + "type": "keyword" + }, + "category": { + "type": "keyword" + }, + "consumer": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "enabled": { + "type": "keyword" + }, + "execution": { + "properties": { + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + } + } + }, + "from": { + "type": "keyword" + }, + "interval": { + "type": "keyword" + }, + "license": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "note": { + "type": "keyword" + }, + "parameters": { + "ignore_above": 4096, + "type": "flattened" + }, + "producer": { + "type": "keyword" + }, + "references": { + "type": "keyword" + }, + "revision": { + "type": "long" + }, + "rule_id": { + "type": "keyword" + }, + "rule_name_override": { + "type": "keyword" + }, + "rule_type_id": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "to": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "severity": { + "type": "keyword" + }, + "severity_improving": { + "type": "boolean" + }, + "start": { + "type": "date" + }, + "status": { + "type": "keyword" + }, + "suppression": { + "properties": { + "docs_count": { + "type": "long" + }, + "end": { + "type": "date" + }, + "start": { + "type": "date" + }, + "terms": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + } + } + }, + "system_status": { + "type": "keyword" + }, + "time_range": { + "format": "epoch_millis||strict_date_optional_time", + "type": "date_range" + }, + "url": { + "ignore_above": 2048, + "index": false, + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "workflow_assignee_ids": { + "type": "keyword" + }, + "workflow_reason": { + "type": "keyword" + }, + "workflow_status": { + "type": "keyword" + }, + "workflow_status_updated_at": { + "type": "date" + }, + "workflow_tags": { + "type": "keyword" + }, + "workflow_user": { + "type": "keyword" + } + } + }, + "space_ids": { + "type": "keyword" + }, + "version": { + "type": "version" + } + } + }, + "labels": { + "dynamic": "true", + "type": "object" + }, + "processor": { + "properties": { + "event": { + "type": "keyword" + } + } + }, + "service": { + "properties": { + "environment": { + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "name": { + "type": "keyword" + } + } + }, + "tags": { + "type": "keyword" + }, + "transaction": { + "properties": { + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "lifecycle": { + "name": ".alerts-ilm-policy", + "rollover_alias": ".alerts-observability.apm.alerts-default" + }, + "mapping": { + "ignore_malformed": "true", + "total_fields": { + "limit": "2500" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + ".alerts-observability.logs.alerts-default": { + "is_write_index": true + } + }, + "index": ".internal.alerts-observability.logs.alerts-default-000001", + "mappings": { + "_meta": { + "kibana": { + "version": "9.0.0" + }, + "managed": true, + "namespace": "default" + }, + "dynamic": "false", + "properties": { + "@timestamp": { + "ignore_malformed": false, + "type": "date" + }, + "agent": { + "properties": { + "build": { + "properties": { + "original": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "target": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "container": { + "properties": { + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "hash": { + "properties": { + "all": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "memory": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + }, + "security_context": { + "properties": { + "privileged": { + "type": "boolean" + } + } + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "device": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "manufacturer": { + "ignore_above": 1024, + "type": "keyword" + }, + "model": { + "properties": { + "identifier": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "type": "keyword" + } + } + }, + "email": { + "properties": { + "attachments": { + "properties": { + "file": { + "properties": { + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + } + } + } + }, + "type": "nested" + }, + "bcc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "delivery_timestamp": { + "type": "date" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "from": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "local_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message_id": { + "type": "wildcard" + }, + "origination_timestamp": { + "type": "date" + }, + "reply_to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "sender": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "subject": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x_mailer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "type": "match_only_text" + }, + "stack_trace": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reason": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "faas": { + "properties": { + "coldstart": { + "type": "boolean" + }, + "execution": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "boot": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pid_ns_ino": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + } + } + }, + "http": { + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kibana": { + "properties": { + "alert": { + "properties": { + "action_group": { + "type": "keyword" + }, + "case_ids": { + "type": "keyword" + }, + "consecutive_matches": { + "type": "long" + }, + "context": { + "type": "object" + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "end": { + "type": "date" + }, + "evaluation": { + "properties": { + "threshold": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "value": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "values": { + "scaling_factor": 100, + "type": "scaled_float" + } + } + }, + "flapping": { + "type": "boolean" + }, + "flapping_history": { + "type": "boolean" + }, + "group": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "intended_timestamp": { + "type": "date" + }, + "last_detected": { + "type": "date" + }, + "maintenance_window_ids": { + "type": "keyword" + }, + "previous_action_group": { + "type": "keyword" + }, + "reason": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "rule": { + "properties": { + "author": { + "type": "keyword" + }, + "category": { + "type": "keyword" + }, + "consumer": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "enabled": { + "type": "keyword" + }, + "execution": { + "properties": { + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + } + } + }, + "from": { + "type": "keyword" + }, + "interval": { + "type": "keyword" + }, + "license": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "note": { + "type": "keyword" + }, + "parameters": { + "ignore_above": 4096, + "type": "flattened" + }, + "producer": { + "type": "keyword" + }, + "references": { + "type": "keyword" + }, + "revision": { + "type": "long" + }, + "rule_id": { + "type": "keyword" + }, + "rule_name_override": { + "type": "keyword" + }, + "rule_type_id": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "to": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "severity": { + "type": "keyword" + }, + "severity_improving": { + "type": "boolean" + }, + "start": { + "type": "date" + }, + "status": { + "type": "keyword" + }, + "suppression": { + "properties": { + "docs_count": { + "type": "long" + }, + "end": { + "type": "date" + }, + "start": { + "type": "date" + }, + "terms": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + } + } + }, + "system_status": { + "type": "keyword" + }, + "time_range": { + "format": "epoch_millis||strict_date_optional_time", + "type": "date_range" + }, + "url": { + "ignore_above": 2048, + "index": false, + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "workflow_assignee_ids": { + "type": "keyword" + }, + "workflow_reason": { + "type": "keyword" + }, + "workflow_status": { + "type": "keyword" + }, + "workflow_status_updated_at": { + "type": "date" + }, + "workflow_tags": { + "type": "keyword" + }, + "workflow_user": { + "type": "keyword" + } + } + }, + "space_ids": { + "type": "keyword" + }, + "version": { + "type": "version" + } + } + }, + "labels": { + "type": "object" + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "syslog": { + "properties": { + "appname": { + "ignore_above": 1024, + "type": "keyword" + }, + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "msgid": { + "ignore_above": 1024, + "type": "keyword" + }, + "priority": { + "type": "long" + }, + "procid": { + "ignore_above": 1024, + "type": "keyword" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "structured_data": { + "type": "flattened" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "message": { + "type": "match_only_text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "orchestrator": { + "properties": { + "api_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "cluster": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "properties": { + "annotation": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "label": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "attested_groups": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "attested_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_meta": { + "properties": { + "source": { + "properties": { + "ip": { + "type": "ip" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "env_vars": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "io": { + "properties": { + "bytes_skipped": { + "properties": { + "length": { + "type": "long" + }, + "offset": { + "type": "long" + } + } + }, + "max_bytes_per_process_exceeded": { + "type": "boolean" + }, + "text": { + "type": "wildcard" + }, + "total_bytes_captured": { + "type": "long" + }, + "total_bytes_skipped": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "previous": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "session_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + }, + "columns": { + "type": "long" + }, + "rows": { + "type": "long" + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "hosts": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "type": "keyword" + }, + "threat": { + "properties": { + "enrichments": { + "properties": { + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "matched": { + "properties": { + "atomic": { + "ignore_above": 1024, + "type": "keyword" + }, + "field": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "index": { + "ignore_above": 1024, + "type": "keyword" + }, + "occurred": { + "type": "date" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + }, + "type": "nested" + }, + "feed": { + "properties": { + "dashboard_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platforms": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "subtechnique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "properties": { + "changes": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "effective": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "user_agent": { + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "lifecycle": { + "name": ".alerts-ilm-policy", + "rollover_alias": ".alerts-observability.logs.alerts-default" + }, + "mapping": { + "ignore_malformed": "true", + "total_fields": { + "limit": "2500" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + ".alerts-observability.metrics.alerts-default": { + "is_write_index": true + } + }, + "index": ".internal.alerts-observability.metrics.alerts-default-000001", + "mappings": { + "_meta": { + "kibana": { + "version": "9.0.0" + }, + "managed": true, + "namespace": "default" + }, + "dynamic": "false", + "properties": { + "@timestamp": { + "ignore_malformed": false, + "type": "date" + }, + "agent": { + "properties": { + "build": { + "properties": { + "original": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "target": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "container": { + "properties": { + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "hash": { + "properties": { + "all": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "memory": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + }, + "security_context": { + "properties": { + "privileged": { + "type": "boolean" + } + } + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "device": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "manufacturer": { + "ignore_above": 1024, + "type": "keyword" + }, + "model": { + "properties": { + "identifier": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "type": "keyword" + } + } + }, + "email": { + "properties": { + "attachments": { + "properties": { + "file": { + "properties": { + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + } + } + } + }, + "type": "nested" + }, + "bcc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "delivery_timestamp": { + "type": "date" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "from": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "local_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message_id": { + "type": "wildcard" + }, + "origination_timestamp": { + "type": "date" + }, + "reply_to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "sender": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "subject": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x_mailer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "type": "match_only_text" + }, + "stack_trace": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reason": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "faas": { + "properties": { + "coldstart": { + "type": "boolean" + }, + "execution": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "boot": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pid_ns_ino": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + } + } + }, + "http": { + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kibana": { + "properties": { + "alert": { + "properties": { + "action_group": { + "type": "keyword" + }, + "case_ids": { + "type": "keyword" + }, + "consecutive_matches": { + "type": "long" + }, + "context": { + "type": "object" + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "end": { + "type": "date" + }, + "evaluation": { + "properties": { + "threshold": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "value": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "values": { + "scaling_factor": 100, + "type": "scaled_float" + } + } + }, + "flapping": { + "type": "boolean" + }, + "flapping_history": { + "type": "boolean" + }, + "group": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "intended_timestamp": { + "type": "date" + }, + "last_detected": { + "type": "date" + }, + "maintenance_window_ids": { + "type": "keyword" + }, + "previous_action_group": { + "type": "keyword" + }, + "reason": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "rule": { + "properties": { + "author": { + "type": "keyword" + }, + "category": { + "type": "keyword" + }, + "consumer": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "enabled": { + "type": "keyword" + }, + "execution": { + "properties": { + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + } + } + }, + "from": { + "type": "keyword" + }, + "interval": { + "type": "keyword" + }, + "license": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "note": { + "type": "keyword" + }, + "parameters": { + "ignore_above": 4096, + "type": "flattened" + }, + "producer": { + "type": "keyword" + }, + "references": { + "type": "keyword" + }, + "revision": { + "type": "long" + }, + "rule_id": { + "type": "keyword" + }, + "rule_name_override": { + "type": "keyword" + }, + "rule_type_id": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "to": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "severity": { + "type": "keyword" + }, + "severity_improving": { + "type": "boolean" + }, + "start": { + "type": "date" + }, + "status": { + "type": "keyword" + }, + "suppression": { + "properties": { + "docs_count": { + "type": "long" + }, + "end": { + "type": "date" + }, + "start": { + "type": "date" + }, + "terms": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + } + } + }, + "system_status": { + "type": "keyword" + }, + "time_range": { + "format": "epoch_millis||strict_date_optional_time", + "type": "date_range" + }, + "url": { + "ignore_above": 2048, + "index": false, + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "workflow_assignee_ids": { + "type": "keyword" + }, + "workflow_reason": { + "type": "keyword" + }, + "workflow_status": { + "type": "keyword" + }, + "workflow_status_updated_at": { + "type": "date" + }, + "workflow_tags": { + "type": "keyword" + }, + "workflow_user": { + "type": "keyword" + } + } + }, + "space_ids": { + "type": "keyword" + }, + "version": { + "type": "version" + } + } + }, + "labels": { + "type": "object" + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "syslog": { + "properties": { + "appname": { + "ignore_above": 1024, + "type": "keyword" + }, + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "msgid": { + "ignore_above": 1024, + "type": "keyword" + }, + "priority": { + "type": "long" + }, + "procid": { + "ignore_above": 1024, + "type": "keyword" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "structured_data": { + "type": "flattened" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "message": { + "type": "match_only_text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "orchestrator": { + "properties": { + "api_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "cluster": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "properties": { + "annotation": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "label": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "attested_groups": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "attested_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_meta": { + "properties": { + "source": { + "properties": { + "ip": { + "type": "ip" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "env_vars": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "io": { + "properties": { + "bytes_skipped": { + "properties": { + "length": { + "type": "long" + }, + "offset": { + "type": "long" + } + } + }, + "max_bytes_per_process_exceeded": { + "type": "boolean" + }, + "text": { + "type": "wildcard" + }, + "total_bytes_captured": { + "type": "long" + }, + "total_bytes_skipped": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "previous": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "session_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + }, + "columns": { + "type": "long" + }, + "rows": { + "type": "long" + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "hosts": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "type": "keyword" + }, + "threat": { + "properties": { + "enrichments": { + "properties": { + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "matched": { + "properties": { + "atomic": { + "ignore_above": 1024, + "type": "keyword" + }, + "field": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "index": { + "ignore_above": 1024, + "type": "keyword" + }, + "occurred": { + "type": "date" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + }, + "type": "nested" + }, + "feed": { + "properties": { + "dashboard_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platforms": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "subtechnique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "properties": { + "changes": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "effective": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "user_agent": { + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "lifecycle": { + "name": ".alerts-ilm-policy", + "rollover_alias": ".alerts-observability.metrics.alerts-default" + }, + "mapping": { + "ignore_malformed": "true", + "total_fields": { + "limit": "2500" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + ".alerts-observability.slo.alerts-default": { + "is_write_index": true + } + }, + "index": ".internal.alerts-observability.slo.alerts-default-000001", + "mappings": { + "_meta": { + "kibana": { + "version": "9.0.0" + }, + "managed": true, + "namespace": "default" + }, + "dynamic": "false", + "properties": { + "@timestamp": { + "ignore_malformed": false, + "type": "date" + }, + "agent": { + "properties": { + "build": { + "properties": { + "original": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "target": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "container": { + "properties": { + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "hash": { + "properties": { + "all": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "memory": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + }, + "security_context": { + "properties": { + "privileged": { + "type": "boolean" + } + } + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "device": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "manufacturer": { + "ignore_above": 1024, + "type": "keyword" + }, + "model": { + "properties": { + "identifier": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "type": "keyword" + } + } + }, + "email": { + "properties": { + "attachments": { + "properties": { + "file": { + "properties": { + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + } + } + } + }, + "type": "nested" + }, + "bcc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "delivery_timestamp": { + "type": "date" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "from": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "local_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message_id": { + "type": "wildcard" + }, + "origination_timestamp": { + "type": "date" + }, + "reply_to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "sender": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "subject": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x_mailer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "type": "match_only_text" + }, + "stack_trace": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reason": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "faas": { + "properties": { + "coldstart": { + "type": "boolean" + }, + "execution": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "boot": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pid_ns_ino": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + } + } + }, + "http": { + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kibana": { + "properties": { + "alert": { + "properties": { + "action_group": { + "type": "keyword" + }, + "case_ids": { + "type": "keyword" + }, + "consecutive_matches": { + "type": "long" + }, + "context": { + "type": "object" + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "end": { + "type": "date" + }, + "evaluation": { + "properties": { + "threshold": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "value": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "values": { + "scaling_factor": 100, + "type": "scaled_float" + } + } + }, + "flapping": { + "type": "boolean" + }, + "flapping_history": { + "type": "boolean" + }, + "group": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "intended_timestamp": { + "type": "date" + }, + "last_detected": { + "type": "date" + }, + "maintenance_window_ids": { + "type": "keyword" + }, + "previous_action_group": { + "type": "keyword" + }, + "reason": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "rule": { + "properties": { + "author": { + "type": "keyword" + }, + "category": { + "type": "keyword" + }, + "consumer": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "enabled": { + "type": "keyword" + }, + "execution": { + "properties": { + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + } + } + }, + "from": { + "type": "keyword" + }, + "interval": { + "type": "keyword" + }, + "license": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "note": { + "type": "keyword" + }, + "parameters": { + "ignore_above": 4096, + "type": "flattened" + }, + "producer": { + "type": "keyword" + }, + "references": { + "type": "keyword" + }, + "revision": { + "type": "long" + }, + "rule_id": { + "type": "keyword" + }, + "rule_name_override": { + "type": "keyword" + }, + "rule_type_id": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "to": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "severity": { + "type": "keyword" + }, + "severity_improving": { + "type": "boolean" + }, + "start": { + "type": "date" + }, + "status": { + "type": "keyword" + }, + "suppression": { + "properties": { + "docs_count": { + "type": "long" + }, + "end": { + "type": "date" + }, + "start": { + "type": "date" + }, + "terms": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + } + } + }, + "system_status": { + "type": "keyword" + }, + "time_range": { + "format": "epoch_millis||strict_date_optional_time", + "type": "date_range" + }, + "url": { + "ignore_above": 2048, + "index": false, + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "workflow_assignee_ids": { + "type": "keyword" + }, + "workflow_reason": { + "type": "keyword" + }, + "workflow_status": { + "type": "keyword" + }, + "workflow_status_updated_at": { + "type": "date" + }, + "workflow_tags": { + "type": "keyword" + }, + "workflow_user": { + "type": "keyword" + } + } + }, + "space_ids": { + "type": "keyword" + }, + "version": { + "type": "version" + } + } + }, + "labels": { + "type": "object" + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "syslog": { + "properties": { + "appname": { + "ignore_above": 1024, + "type": "keyword" + }, + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "msgid": { + "ignore_above": 1024, + "type": "keyword" + }, + "priority": { + "type": "long" + }, + "procid": { + "ignore_above": 1024, + "type": "keyword" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "structured_data": { + "type": "flattened" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "message": { + "type": "match_only_text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "orchestrator": { + "properties": { + "api_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "cluster": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "properties": { + "annotation": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "label": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "attested_groups": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "attested_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_meta": { + "properties": { + "source": { + "properties": { + "ip": { + "type": "ip" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "env_vars": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "io": { + "properties": { + "bytes_skipped": { + "properties": { + "length": { + "type": "long" + }, + "offset": { + "type": "long" + } + } + }, + "max_bytes_per_process_exceeded": { + "type": "boolean" + }, + "text": { + "type": "wildcard" + }, + "total_bytes_captured": { + "type": "long" + }, + "total_bytes_skipped": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "previous": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "session_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + }, + "columns": { + "type": "long" + }, + "rows": { + "type": "long" + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "hosts": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "slo": { + "properties": { + "id": { + "type": "keyword" + }, + "instanceId": { + "type": "keyword" + }, + "revision": { + "type": "long" + } + } + }, + "source": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "type": "keyword" + }, + "threat": { + "properties": { + "enrichments": { + "properties": { + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "matched": { + "properties": { + "atomic": { + "ignore_above": 1024, + "type": "keyword" + }, + "field": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "index": { + "ignore_above": 1024, + "type": "keyword" + }, + "occurred": { + "type": "date" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + }, + "type": "nested" + }, + "feed": { + "properties": { + "dashboard_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platforms": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "subtechnique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "properties": { + "changes": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "effective": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "user_agent": { + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "lifecycle": { + "name": ".alerts-ilm-policy", + "rollover_alias": ".alerts-observability.slo.alerts-default" + }, + "mapping": { + "ignore_malformed": "true", + "total_fields": { + "limit": "2500" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + ".alerts-observability.threshold.alerts-default": { + "is_write_index": true + } + }, + "index": ".internal.alerts-observability.threshold.alerts-default-000001", + "mappings": { + "_meta": { + "kibana": { + "version": "9.0.0" + }, + "managed": true, + "namespace": "default" + }, + "dynamic": "false", + "properties": { + "@timestamp": { + "ignore_malformed": false, + "type": "date" + }, + "agent": { + "properties": { + "build": { + "properties": { + "original": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "target": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "container": { + "properties": { + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "hash": { + "properties": { + "all": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "memory": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + }, + "security_context": { + "properties": { + "privileged": { + "type": "boolean" + } + } + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "device": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "manufacturer": { + "ignore_above": 1024, + "type": "keyword" + }, + "model": { + "properties": { + "identifier": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "email": { + "properties": { + "attachments": { + "properties": { + "file": { + "properties": { + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + } + } + } + }, + "type": "nested" + }, + "bcc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cc": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "delivery_timestamp": { + "type": "date" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "from": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "local_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message_id": { + "type": "wildcard" + }, + "origination_timestamp": { + "type": "date" + }, + "reply_to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "sender": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "subject": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "to": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x_mailer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "type": "match_only_text" + }, + "stack_trace": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reason": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "faas": { + "properties": { + "coldstart": { + "type": "boolean" + }, + "execution": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "boot": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pid_ns_ino": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + } + } + }, + "http": { + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kibana": { + "properties": { + "alert": { + "properties": { + "action_group": { + "type": "keyword" + }, + "case_ids": { + "type": "keyword" + }, + "consecutive_matches": { + "type": "long" + }, + "context": { + "type": "object" + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "end": { + "type": "date" + }, + "evaluation": { + "properties": { + "threshold": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "value": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "values": { + "scaling_factor": 100, + "type": "scaled_float" + } + } + }, + "flapping": { + "type": "boolean" + }, + "flapping_history": { + "type": "boolean" + }, + "group": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "intended_timestamp": { + "type": "date" + }, + "last_detected": { + "type": "date" + }, + "maintenance_window_ids": { + "type": "keyword" + }, + "previous_action_group": { + "type": "keyword" + }, + "reason": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "keyword" + }, + "rule": { + "properties": { + "category": { + "type": "keyword" + }, + "consumer": { + "type": "keyword" + }, + "execution": { + "properties": { + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + } + } + }, + "name": { + "type": "keyword" + }, + "parameters": { + "ignore_above": 4096, + "type": "flattened" + }, + "producer": { + "type": "keyword" + }, + "revision": { + "type": "long" + }, + "rule_type_id": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + } + } + }, + "severity_improving": { + "type": "boolean" + }, + "start": { + "type": "date" + }, + "status": { + "type": "keyword" + }, + "time_range": { + "format": "epoch_millis||strict_date_optional_time", + "type": "date_range" + }, + "url": { + "ignore_above": 2048, + "index": false, + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "workflow_assignee_ids": { + "type": "keyword" + }, + "workflow_status": { + "type": "keyword" + }, + "workflow_tags": { + "type": "keyword" + } + } + }, + "space_ids": { + "type": "keyword" + }, + "version": { + "type": "version" + } + } + }, + "labels": { + "type": "object" + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "syslog": { + "properties": { + "appname": { + "ignore_above": 1024, + "type": "keyword" + }, + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "msgid": { + "ignore_above": 1024, + "type": "keyword" + }, + "priority": { + "type": "long" + }, + "procid": { + "ignore_above": 1024, + "type": "keyword" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "structured_data": { + "type": "flattened" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "message": { + "type": "match_only_text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "orchestrator": { + "properties": { + "api_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "cluster": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "properties": { + "annotation": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "label": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "attested_groups": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "attested_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "entry_meta": { + "properties": { + "source": { + "properties": { + "ip": { + "type": "ip" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "env_vars": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "io": { + "properties": { + "bytes_skipped": { + "properties": { + "length": { + "type": "long" + }, + "offset": { + "type": "long" + } + } + }, + "max_bytes_per_process_exceeded": { + "type": "boolean" + }, + "text": { + "type": "wildcard" + }, + "total_bytes_captured": { + "type": "long" + }, + "total_bytes_skipped": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "macho": { + "properties": { + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "symhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "previous": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "session_leader": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interactive": { + "type": "boolean" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "session_leader": { + "properties": { + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "start": { + "type": "date" + }, + "vpid": { + "type": "long" + } + } + }, + "pid": { + "type": "long" + }, + "real_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "real_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "same_as_process": { + "type": "boolean" + }, + "saved_group": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "saved_user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + } + } + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "start": { + "type": "date" + }, + "supplemental_groups": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "thread": { + "properties": { + "capabilities": { + "properties": { + "effective": { + "ignore_above": 1024, + "type": "keyword" + }, + "permitted": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "tty": { + "properties": { + "char_device": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + } + } + }, + "columns": { + "type": "long" + }, + "rows": { + "type": "long" + } + } + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vpid": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "hosts": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "role": { + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "type": "keyword" + }, + "threat": { + "properties": { + "enrichments": { + "properties": { + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "matched": { + "properties": { + "atomic": { + "ignore_above": 1024, + "type": "keyword" + }, + "field": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "index": { + "ignore_above": 1024, + "type": "keyword" + }, + "occurred": { + "type": "date" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + }, + "type": "nested" + }, + "feed": { + "properties": { + "dashboard_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "var_entropy": { + "type": "long" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha384": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlsh": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "go_imports": { + "type": "flattened" + }, + "go_imports_names_entropy": { + "type": "long" + }, + "go_imports_names_var_entropy": { + "type": "long" + }, + "go_stripped": { + "type": "boolean" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "import_hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "imports": { + "type": "flattened" + }, + "imports_names_entropy": { + "type": "long" + }, + "imports_names_var_entropy": { + "type": "long" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "pehash": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "sections": { + "properties": { + "entropy": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "var_entropy": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + }, + "tlp_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platforms": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "subtechnique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "properties": { + "changes": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "effective": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "risk": { + "properties": { + "calculated_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "calculated_score": { + "type": "float" + }, + "calculated_score_norm": { + "type": "float" + }, + "static_level": { + "ignore_above": 1024, + "type": "keyword" + }, + "static_score": { + "type": "float" + }, + "static_score_norm": { + "type": "float" + } + } + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "user_agent": { + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "lifecycle": { + "name": ".alerts-ilm-policy", + "rollover_alias": ".alerts-observability.threshold.alerts-default" + }, + "mapping": { + "ignore_malformed": "true", + "total_fields": { + "limit": "2500" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + ".alerts-observability.uptime.alerts-default": { + "is_write_index": true + } + }, + "index": ".internal.alerts-observability.uptime.alerts-default-000001", + "mappings": { + "_meta": { + "kibana": { + "version": "9.0.0" + }, + "managed": true, + "namespace": "default" + }, + "dynamic": "false", + "properties": { + "@timestamp": { + "ignore_malformed": false, + "type": "date" + }, + "agent": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "anomaly": { + "properties": { + "bucket_span": { + "properties": { + "minutes": { + "type": "keyword" + } + } + }, + "start": { + "type": "date" + } + } + }, + "configId": { + "type": "keyword" + }, + "ecs": { + "properties": { + "version": { + "type": "keyword" + } + } + }, + "error": { + "properties": { + "message": { + "type": "text" + }, + "stack_trace": { + "type": "wildcard" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "kibana": { + "properties": { + "alert": { + "properties": { + "action_group": { + "type": "keyword" + }, + "case_ids": { + "type": "keyword" + }, + "consecutive_matches": { + "type": "long" + }, + "context": { + "type": "object" + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "end": { + "type": "date" + }, + "evaluation": { + "properties": { + "threshold": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "value": { + "scaling_factor": 100, + "type": "scaled_float" + }, + "values": { + "scaling_factor": 100, + "type": "scaled_float" + } + } + }, + "flapping": { + "type": "boolean" + }, + "flapping_history": { + "type": "boolean" + }, + "group": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "intended_timestamp": { + "type": "date" + }, + "last_detected": { + "type": "date" + }, + "maintenance_window_ids": { + "type": "keyword" + }, + "previous_action_group": { + "type": "keyword" + }, + "reason": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "rule": { + "properties": { + "author": { + "type": "keyword" + }, + "category": { + "type": "keyword" + }, + "consumer": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "enabled": { + "type": "keyword" + }, + "execution": { + "properties": { + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + } + } + }, + "from": { + "type": "keyword" + }, + "interval": { + "type": "keyword" + }, + "license": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "note": { + "type": "keyword" + }, + "parameters": { + "ignore_above": 4096, + "type": "flattened" + }, + "producer": { + "type": "keyword" + }, + "references": { + "type": "keyword" + }, + "revision": { + "type": "long" + }, + "rule_id": { + "type": "keyword" + }, + "rule_name_override": { + "type": "keyword" + }, + "rule_type_id": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "to": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "severity": { + "type": "keyword" + }, + "severity_improving": { + "type": "boolean" + }, + "start": { + "type": "date" + }, + "status": { + "type": "keyword" + }, + "suppression": { + "properties": { + "docs_count": { + "type": "long" + }, + "end": { + "type": "date" + }, + "start": { + "type": "date" + }, + "terms": { + "properties": { + "field": { + "type": "keyword" + }, + "value": { + "type": "keyword" + } + } + } + } + }, + "system_status": { + "type": "keyword" + }, + "time_range": { + "format": "epoch_millis||strict_date_optional_time", + "type": "date_range" + }, + "url": { + "ignore_above": 2048, + "index": false, + "type": "keyword" + }, + "uuid": { + "type": "keyword" + }, + "workflow_assignee_ids": { + "type": "keyword" + }, + "workflow_reason": { + "type": "keyword" + }, + "workflow_status": { + "type": "keyword" + }, + "workflow_status_updated_at": { + "type": "date" + }, + "workflow_tags": { + "type": "keyword" + }, + "workflow_user": { + "type": "keyword" + } + } + }, + "space_ids": { + "type": "keyword" + }, + "version": { + "type": "version" + } + } + }, + "labels": { + "type": "object" + }, + "location": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "monitor": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "state": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "tags": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "observer": { + "properties": { + "geo": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "name": { + "type": "keyword" + } + } + }, + "service": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "tags": { + "type": "keyword" + }, + "tls": { + "properties": { + "server": { + "properties": { + "hash": { + "properties": { + "sha256": { + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "issuer": { + "properties": { + "common_name": { + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "properties": { + "common_name": { + "type": "keyword" + } + } + } + } + } + } + } + } + }, + "url": { + "properties": { + "full": { + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "hidden": "true", + "lifecycle": { + "name": ".alerts-ilm-policy", + "rollover_alias": ".alerts-observability.uptime.alerts-default" + }, + "mapping": { + "ignore_malformed": "true", + "total_fields": { + "limit": "2500" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1" + } + } + } +} \ No newline at end of file diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/load/index.js b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/index.js new file mode 100644 index 0000000000000..e4ff64980bb6e --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/index.js @@ -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. + */ + +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +require('@kbn/babel-register').install(); + +require('./load'); diff --git a/x-pack/solutions/observability/plugins/investigate_app/scripts/load/load.ts b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/load.ts new file mode 100644 index 0000000000000..e27f38c6d405e --- /dev/null +++ b/x-pack/solutions/observability/plugins/investigate_app/scripts/load/load.ts @@ -0,0 +1,110 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import axios from 'axios'; +import { spawnSync } from 'child_process'; +import { run } from '@kbn/dev-cli-runner'; +import { ToolingLog } from '@kbn/tooling-log'; +import { getServiceUrls } from '@kbn/observability-ai-assistant-app-plugin/scripts/evaluation/get_service_urls'; +import yargs from 'yargs'; +import fs from 'fs'; +import path from 'path'; +import { options } from './cli'; + +async function loadFixtureData({ + esUrl, + kibanaUrl, + log, +}: { + esUrl: string; + kibanaUrl: string; + log: ToolingLog; +}) { + const directory = `${__dirname}/fixtures`; + const directories = getDirectories({ filePath: `${__dirname}/fixtures`, log }); + await axios.post( + `${kibanaUrl}/internal/kibana/settings`, + { + changes: { + 'observability:logSources': [ + 'remote_cluster:logs-*-*', + 'remote_cluster:logs-*', + 'remote_cluster:filebeat-*', + ], + }, + }, + { + headers: { + 'kbn-xsrf': 'foo', + 'x-elastic-internal-origin': 'observability-ai-assistant', + }, + } + ); + log.info('Logs sources updated'); + directories.forEach((dir) => { + spawnSync( + 'node', + [ + 'scripts/es_archiver', + 'load', + `${directory}/${dir}`, + '--es-url', + esUrl, + '--kibana-url', + kibanaUrl, + ], + { + stdio: 'inherit', + } + ); + }); +} + +function getDirectories({ filePath, log }: { filePath: string; log: ToolingLog }): string[] { + try { + const items = fs.readdirSync(filePath); + const folders = items.filter((item) => { + const itemPath = path.join(filePath, item); + return fs.statSync(itemPath).isDirectory(); + }); + return folders; + } catch (error) { + log.error(`Error reading directory: ${error.message}`); + return []; + } +} + +function loadData() { + yargs(process.argv.slice(2)) + .command('*', 'Load RCA data', async () => { + const argv = await options(yargs); + run( + async ({ log }) => { + const serviceUrls = await getServiceUrls({ + log, + elasticsearch: argv.elasticsearch, + kibana: argv.kibana, + }); + loadFixtureData({ + esUrl: serviceUrls.esUrl, + kibanaUrl: serviceUrls.kibanaUrl, + log, + }); + }, + { + log: { + defaultLevel: argv.logLevel as any, + }, + flags: { + allowUnexpected: true, + }, + } + ); + }) + .parse(); +} + +loadData(); diff --git a/x-pack/solutions/observability/plugins/investigate_app/server/services/create_investigation.ts b/x-pack/solutions/observability/plugins/investigate_app/server/services/create_investigation.ts index 6a7355c0ef875..2f1bdf51d1d5a 100644 --- a/x-pack/solutions/observability/plugins/investigate_app/server/services/create_investigation.ts +++ b/x-pack/solutions/observability/plugins/investigate_app/server/services/create_investigation.ts @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import { CreateInvestigationParams, CreateInvestigationResponse } from '@kbn/investigation-shared'; import type { AuthenticatedUser } from '@kbn/core-security-common'; import { InvestigationRepository } from './investigation_repository'; @@ -23,7 +22,7 @@ export async function createInvestigation( ...params, updatedAt: now, createdAt: now, - createdBy: user.profile_uid!, + createdBy: user.profile_uid! || user.username, status: 'triage', notes: [], items: [], diff --git a/x-pack/solutions/observability/plugins/investigate_app/tsconfig.json b/x-pack/solutions/observability/plugins/investigate_app/tsconfig.json index 55e63cfdcf95f..e467bd40918fd 100644 --- a/x-pack/solutions/observability/plugins/investigate_app/tsconfig.json +++ b/x-pack/solutions/observability/plugins/investigate_app/tsconfig.json @@ -10,6 +10,7 @@ "typings/**/*", "public/**/*.json", "server/**/*", + "scripts/**/*", ".storybook/**/*" ], "exclude": [ @@ -80,5 +81,10 @@ "@kbn/utility-types-jest", "@kbn/visualization-utils", "@kbn/zod", + "@kbn/babel-register", + "@kbn/tooling-log", + "@kbn/dev-cli-runner", + "@kbn/datemath", + "@kbn/sse-utils-client", ], } diff --git a/x-pack/solutions/observability/plugins/logs_explorer/common/hashed_cache.ts b/x-pack/solutions/observability/plugins/logs_explorer/common/hashed_cache.ts index 4b5ac5c614472..0cb68f0b31cc1 100644 --- a/x-pack/solutions/observability/plugins/logs_explorer/common/hashed_cache.ts +++ b/x-pack/solutions/observability/plugins/logs_explorer/common/hashed_cache.ts @@ -13,7 +13,7 @@ export interface IHashedCache { reset(): void; } -export class HashedCache { +export class HashedCache { private cache: LRUCache; constructor(options: LRUCache.Options = { max: 500 }) { diff --git a/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.test.ts b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.test.ts index 996030cf890cf..1a18c4261291a 100644 --- a/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.test.ts +++ b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.test.ts @@ -128,6 +128,12 @@ describe('buildEsQuery', () => { ]; test.each(testData)('should generate correct es query for $title', ({ alert }) => { - expect(getLogRateAnalysisEQQuery(alert)).toMatchSnapshot(); + expect( + getLogRateAnalysisEQQuery(alert, { + allowLeadingWildcards: true, + queryStringOptions: {}, + ignoreFilterIfFieldNotInIndex: false, + }) + ).toMatchSnapshot(); }); }); diff --git a/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.ts b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.ts index bea80bfb5ab5e..99c3047863a60 100644 --- a/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.ts +++ b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/helpers/log_rate_analysis_query.ts @@ -7,6 +7,7 @@ import { get } from 'lodash'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { EsQueryConfig } from '@kbn/es-query'; import { ALERT_RULE_PARAMETERS } from '@kbn/rule-data-utils'; import { CustomThresholdAlert } from '../../types'; import { getGroupFilters } from '../../../../../../common/custom_threshold_rule/helpers/get_group'; @@ -32,7 +33,8 @@ const getKuery = (metrics: CustomThresholdExpressionMetric[], filter?: string) = }; export const getLogRateAnalysisEQQuery = ( - alert: CustomThresholdAlert + alert: CustomThresholdAlert, + config: EsQueryConfig ): QueryDslQueryContainer | undefined => { const ruleParams = alert.fields[ALERT_RULE_PARAMETERS]; // We only show log rate analysis for one condition with one count aggregation @@ -50,6 +52,7 @@ export const getLogRateAnalysisEQQuery = ( const boolQuery = buildEsQuery({ kuery: getKuery(ruleParams.criteria[0].metrics, optionalFilter), filters: groupByFilters, + config, }); return boolQuery; diff --git a/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.test.tsx b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.test.tsx new file mode 100644 index 0000000000000..60292e2cd7273 --- /dev/null +++ b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.test.tsx @@ -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 React from 'react'; +import { render } from '@testing-library/react'; +import { COMPARATORS } from '@kbn/alerting-comparators'; +import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import { ALERT_RULE_PARAMETERS } from '@kbn/rule-data-utils'; +import { Aggregators } from '../../../../../common/custom_threshold_rule/types'; +import { + buildCustomThresholdAlert, + buildCustomThresholdRule, +} from '../../mocks/custom_threshold_rule'; +import { kibanaStartMock } from '../../../../utils/kibana_react.mock'; +import { CustomThresholdAlert } from '../types'; +import { LogRateAnalysis } from './log_rate_analysis'; + +describe('AlertDetailsAppSection', () => { + const renderComponent = (alert: Partial = {}) => { + return render( + + + + ); + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + // To avoid /~https://github.com/elastic/kibana/issues/206588 + it('should render LogRateAnalysis without throwing error', async () => { + expect(renderComponent).not.toThrowError(); + }); +}); diff --git a/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx index 45950968cfcd1..4efc0ab496e35 100644 --- a/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx @@ -15,6 +15,7 @@ import { } from '@kbn/aiops-log-rate-analysis/log_rate_analysis_type'; import { getLogRateAnalysisParametersFromAlert } from '@kbn/aiops-log-rate-analysis/get_log_rate_analysis_parameters_from_alert'; import { LogRateAnalysisContent, type LogRateAnalysisResultsData } from '@kbn/aiops-plugin/public'; +import { getEsQueryConfig } from '@kbn/data-service'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -43,6 +44,7 @@ export function LogRateAnalysis({ alert, dataView, services }: AlertDetailsLogRa ObservabilityAIAssistantContextualInsight, getContextualInsightMessages, }, + uiSettings, } = services; const [esSearchQuery, setEsSearchQuery] = useState(); const [logRateAnalysisParams, setLogRateAnalysisParams] = useState< @@ -52,12 +54,12 @@ export function LogRateAnalysis({ alert, dataView, services }: AlertDetailsLogRa const ruleParams = alert.fields[ALERT_RULE_PARAMETERS]; useEffect(() => { - const esSearchRequest = getLogRateAnalysisEQQuery(alert); + const esSearchRequest = getLogRateAnalysisEQQuery(alert, getEsQueryConfig(uiSettings)); if (esSearchRequest) { setEsSearchQuery(esSearchRequest); } - }, [alert]); + }, [alert, uiSettings]); const { timeRange, windowParameters } = useMemo(() => { const alertStartedAt = moment(alert.start).toISOString(); diff --git a/x-pack/solutions/observability/plugins/observability/public/plugin.mock.tsx b/x-pack/solutions/observability/plugins/observability/public/plugin.mock.tsx index 93892427c01f9..378bdf888df84 100644 --- a/x-pack/solutions/observability/plugins/observability/public/plugin.mock.tsx +++ b/x-pack/solutions/observability/plugins/observability/public/plugin.mock.tsx @@ -10,6 +10,7 @@ import { mockCasesContract } from '@kbn/cases-plugin/public/mocks'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { contentManagementMock } from '@kbn/content-management-plugin/public/mocks'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import type { AlertActionsProps } from '@kbn/triggers-actions-ui-plugin/public/types'; @@ -128,6 +129,7 @@ export const observabilityPublicPluginsStartMock = { dataViews: dataViews.createStart(), discover: null, lens: lensPluginMock.createStartContract(), + observabilityAIAssistant: observabilityAIAssistantPluginMock.createStartContract(), share: sharePluginMock.createStartContract(), triggersActionsUi: triggersActionsUiStartMock.createStart(), unifiedSearch: unifiedSearchPluginMock.createStartContract(), diff --git a/x-pack/solutions/observability/plugins/observability/tsconfig.json b/x-pack/solutions/observability/plugins/observability/tsconfig.json index 7ae72a4bf995b..0d8d34ed76377 100644 --- a/x-pack/solutions/observability/plugins/observability/tsconfig.json +++ b/x-pack/solutions/observability/plugins/observability/tsconfig.json @@ -112,7 +112,8 @@ "@kbn/es-types", "@kbn/logging-mocks", "@kbn/response-ops-rule-form", - "@kbn/streams-plugin" + "@kbn/streams-plugin", + "@kbn/data-service" ], "exclude": ["target/**/*"] } diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/README.md b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/README.md index 5b16b7ba76abc..ed9c0125274cf 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/README.md +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/README.md @@ -24,7 +24,9 @@ This tool is developed for our team working on the Elastic Observability platfor This will evaluate all existing scenarios, and write the evaluation results to the terminal. #### To run the evaluation using a hosted deployment: + - Add the credentials of Elasticsearch to `kibana.dev.yml` as follows: + ``` elasticsearch.hosts: https://: elasticsearch.username: @@ -32,6 +34,7 @@ elasticsearch.password: elasticsearch.ssl.verificationMode: none elasticsearch.ignoreVersionMismatch: true ``` + - Start Kibana - Run this command to start evaluating: `node x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/index.js --kibana http://:@localhost:5601` @@ -41,6 +44,7 @@ E.g.: `node x-pack/solutions/observability/plugins/observability_ai_assistant_ap The `--kibana` and `--es` flags override the default credentials. Only basic auth is supported. ## Other (optional) configuration flags + - `--connectorId` - Specify a generative AI connector to use. If none are given, it will prompt you to select a connector based on the ones that are available. If only a single supported connector is found, it will be used without prompting. - `--evaluateWith`: The connector ID to evaluate with. Leave empty to use the same connector, use "other" to get a selection menu. - `--spaceId` - Specify the space ID if you want to use a specific space. diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/cli.ts b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/cli.ts index 23fb67f77bbd7..9373abf13f91d 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/cli.ts +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/cli.ts @@ -25,8 +25,8 @@ export const elasticsearchOption = { describe: 'Where Elasticsearch is running', string: true as const, default: format({ - ...parse(config['elasticsearch.hosts']), - auth: `${config['elasticsearch.username']}:${config['elasticsearch.password']}`, + ...parse(config.elasticsearch.hosts || 'http://localhost:9200'), + auth: `${config.elasticsearch.username}:${config.elasticsearch.password}`, }), }; diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts index ef4d3988679fa..7b078d4cb5fc9 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/kibana_client.ts @@ -25,7 +25,7 @@ import { throwSerializedChatCompletionErrors } from '@kbn/observability-ai-assis import { Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; import { streamIntoObservable } from '@kbn/observability-ai-assistant-plugin/server'; import { ToolingLog } from '@kbn/tooling-log'; -import axios, { AxiosInstance, AxiosResponse, isAxiosError } from 'axios'; +import axios, { AxiosInstance, AxiosResponse, isAxiosError, AxiosRequestConfig } from 'axios'; import { omit, pick, remove } from 'lodash'; import pRetry from 'p-retry'; import { @@ -81,6 +81,7 @@ export interface ChatClient { ) => Promise; getResults: () => EvaluationResult[]; onResult: (cb: (result: EvaluationResult) => void) => () => void; + getConnectorId: () => string; } export class KibanaClient { @@ -93,6 +94,7 @@ export class KibanaClient { this.axios = axios.create({ headers: { 'kbn-xsrf': 'foo', + 'x-elastic-internal-origin': 'kibana', }, }); } @@ -118,17 +120,15 @@ export class KibanaClient { callKibana( method: string, props: { query?: UrlObject['query']; pathname: string; ignoreSpaceId?: boolean }, - data?: any + data?: any, + axiosParams: Partial = {} ) { const url = this.getUrl(props); return this.axios({ method, url, ...(method.toLowerCase() === 'delete' && !data ? {} : { data: data || {} }), - headers: { - 'kbn-xsrf': 'true', - 'x-elastic-internal-origin': 'Kibana', - }, + ...axiosParams, }).catch((error) => { if (isAxiosError(error)) { const interestingPartsOfError = { @@ -635,6 +635,7 @@ export class KibanaClient { onResultCallbacks.push({ callback, unregister }); return unregister; }, + getConnectorId: () => connectorId, }; } diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/read_kibana_config.ts b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/read_kibana_config.ts index e6a44cbb4a549..66fb66bf06aeb 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/read_kibana_config.ts +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/scripts/evaluation/read_kibana_config.ts @@ -9,6 +9,7 @@ import path from 'path'; import fs from 'fs'; import yaml from 'js-yaml'; import { identity, pickBy } from 'lodash'; +import { unflattenObject } from '@kbn/observability-utils-common/object/unflatten_object'; export type KibanaConfig = ReturnType; @@ -35,10 +36,14 @@ export const readKibanaConfig = () => { }; return { - 'elasticsearch.hosts': 'http://localhost:9200', - 'elasticsearch.username': 'elastic', - 'elasticsearch.password': 'changeme', - ...loadedKibanaConfig, - ...cliEsCredentials, + elasticsearch: { + hosts: 'http://localhost:9200', + username: 'elastic', + password: 'changeme', + }, + ...unflattenObject({ + ...loadedKibanaConfig, + ...cliEsCredentials, + }), }; }; diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/server/functions/alerts.ts b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/server/functions/alerts.ts index bf797bb170606..fda783c187b46 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/server/functions/alerts.ts +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/server/functions/alerts.ts @@ -117,6 +117,7 @@ export function registerAlertsFunction({ functionCall, functions: nextFunctions, signal, + stream: true, }); }, }); diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/auto_detect.spec.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/auto_detect.spec.ts index cff927a2061c1..dd86abc0ee08e 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/auto_detect.spec.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/auto_detect.spec.ts @@ -36,6 +36,19 @@ test('Auto-detect logs and metrics', async ({ page, onboardingHomePage, autoDete fs.writeFileSync(outputPath, clipboardData); await autoDetectFlowPage.assertReceivedDataIndicator(); + + /** + * Host Details page sometime shows "No Data" + * even when we've detected data during + * the onboarding flow. This is most prominent + * in a test script which click on the "Explore Data" + * CTA immediately. Having a timeout before going + * to the Host Details page "solves" the issue. + * 2 minutes is generous and should be more then enough + * for the data to propagate everywhere. + */ + await page.waitForTimeout(2 * 60000); + await autoDetectFlowPage.clickAutoDetectSystemIntegrationCTA(); /** @@ -44,22 +57,5 @@ test('Auto-detect logs and metrics', async ({ page, onboardingHomePage, autoDete */ const hostDetailsPage = new HostDetailsPage(await page.waitForEvent('popup')); - /** - * There is a glitch on the Hosts page where it can show "No data" - * screen even though data is available and it can show it with a delay - * after the Hosts page layout was loaded. This workaround waits for - * the No Data screen to be visible, and if so - reloads the page. - * If the No Data screen does not appear, the test can proceed normally. - * Seems like some caching issue with the Hosts page. - */ - try { - await hostDetailsPage.noData().waitFor({ state: 'visible', timeout: 10000 }); - await hostDetailsPage.page.waitForTimeout(2000); - await hostDetailsPage.page.reload(); - } catch { - /* Ignore if "No Data" screen never showed up */ - } - - await hostDetailsPage.clickHostDetailsLogsTab(); - await hostDetailsPage.assertHostDetailsLogsStream(); + await hostDetailsPage.assertCpuPercentageNotEmpty(); }); diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/fixtures/base_page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/fixtures/base_page.ts index e10be1d60cc1c..83a5dd5e32ea2 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/fixtures/base_page.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/fixtures/base_page.ts @@ -12,6 +12,8 @@ import { SpaceSelector } from '../pom/components/space_selector.component'; import { KubernetesOverviewDashboardPage } from '../pom/pages/kubernetes_overview_dashboard.page'; import { AutoDetectFlowPage } from '../pom/pages/auto_detect_flow.page'; import { KubernetesEAFlowPage } from '../pom/pages/kubernetes_ea_flow.page'; +import { OtelKubernetesFlowPage } from '../pom/pages/otel_kubernetes_flow.page'; +import { OtelKubernetesOverviewDashboardPage } from '../pom/pages/otel_kubernetes_overview_dashboard.page'; export const test = base.extend<{ headerBar: HeaderBar; @@ -19,7 +21,9 @@ export const test = base.extend<{ onboardingHomePage: OnboardingHomePage; autoDetectFlowPage: AutoDetectFlowPage; kubernetesEAFlowPage: KubernetesEAFlowPage; + otelKubernetesFlowPage: OtelKubernetesFlowPage; kubernetesOverviewDashboardPage: KubernetesOverviewDashboardPage; + otelKubernetesOverviewDashboardPage: OtelKubernetesOverviewDashboardPage; }>({ headerBar: async ({ page }, use) => { await use(new HeaderBar(page)); @@ -41,7 +45,15 @@ export const test = base.extend<{ await use(new KubernetesEAFlowPage(page)); }, + otelKubernetesFlowPage: async ({ page }, use) => { + await use(new OtelKubernetesFlowPage(page)); + }, + kubernetesOverviewDashboardPage: async ({ page }, use) => { await use(new KubernetesOverviewDashboardPage(page)); }, + + otelKubernetesOverviewDashboardPage: async ({ page }, use) => { + await use(new OtelKubernetesOverviewDashboardPage(page)); + }, }); diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/kubernetes_ea.spec.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/kubernetes_ea.spec.ts index 8478630b232f0..fbae86548efe5 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/kubernetes_ea.spec.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/kubernetes_ea.spec.ts @@ -45,22 +45,19 @@ test('Kubernetes EA', async ({ fs.writeFileSync(outputPath, clipboardData); await kubernetesEAFlowPage.assertReceivedDataIndicatorKubernetes(); - await kubernetesEAFlowPage.clickKubernetesAgentCTA(); - await kubernetesOverviewDashboardPage.openNodesInspector(); /** * There might be a case that dashboard still does not show * the data even though it was ingested already. This usually - * happens during in the test when navigation from the onboarding + * happens during the test when navigation from the onboarding * flow to the dashboard happens almost immediately. - * Waiting for a few seconds and reloading the page handles - * this case and makes the test a bit more robust. + * Having a timeout before going to the dashboard "solves" + * the issue. 2 minutes is generous and should be more then enough + * for the data to propagate everywhere. */ - try { - await kubernetesOverviewDashboardPage.assertNodesNoResultsNotVisible(); - } catch { - await kubernetesOverviewDashboardPage.page.waitForTimeout(2000); - await kubernetesOverviewDashboardPage.page.reload(); - } - await kubernetesOverviewDashboardPage.assetNodesInspectorStatusTableCells(); + await page.waitForTimeout(2 * 60000); + + await kubernetesEAFlowPage.clickKubernetesAgentCTA(); + + await kubernetesOverviewDashboardPage.assertNodesPanelNotEmpty(); }); diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/kubernetes_otel.spec.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/kubernetes_otel.spec.ts new file mode 100644 index 0000000000000..de24a025e16ed --- /dev/null +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/kubernetes_otel.spec.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import fs from 'node:fs'; +import path from 'node:path'; +import { test } from './fixtures/base_page'; +import { assertEnv } from '../lib/assert_env'; + +test.beforeEach(async ({ page }) => { + await page.goto(`${process.env.KIBANA_BASE_URL}/app/observabilityOnboarding`); +}); + +test('Otel Kubernetes', async ({ + page, + onboardingHomePage, + otelKubernetesFlowPage, + otelKubernetesOverviewDashboardPage, +}) => { + assertEnv(process.env.ARTIFACTS_FOLDER, 'ARTIFACTS_FOLDER is not defined.'); + + const fileName = 'code_snippet_otel_kubernetes.sh'; + const outputPath = path.join(__dirname, '..', process.env.ARTIFACTS_FOLDER, fileName); + + await onboardingHomePage.selectKubernetesUseCase(); + await onboardingHomePage.selectOtelKubernetesQuickstart(); + + await otelKubernetesFlowPage.copyHelmRepositorySnippetToClipboard(); + const helmRepoSnippet = (await page.evaluate('navigator.clipboard.readText()')) as string; + + await otelKubernetesFlowPage.copyInstallStackSnippetToClipboard(); + const installStackSnippet = (await page.evaluate('navigator.clipboard.readText()')) as string; + + const codeSnippet = `${helmRepoSnippet}\n${installStackSnippet}`; + + /** + * Ensemble story watches for the code snippet file + * to be created and then executes it + */ + fs.writeFileSync(outputPath, codeSnippet); + + /** + * There is no explicit data ingest indication + * in the flow, so we need to rely on a timeout. + * 3 minutes should be enough for the stack to be + * created and to start pushing data. + */ + await page.waitForTimeout(3 * 60000); + + await otelKubernetesFlowPage.clickClusterOverviewDashboardCTA(); + await otelKubernetesOverviewDashboardPage.assertNodesPanelNotEmpty(); +}); diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/auto_detect_flow.page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/auto_detect_flow.page.ts index b1090b3cf091d..49f1f34ea0936 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/auto_detect_flow.page.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/auto_detect_flow.page.ts @@ -5,47 +5,46 @@ * 2.0. */ -import { expect, Page } from '@playwright/test'; +import { expect, type Page, type Locator } from '@playwright/test'; export class AutoDetectFlowPage { page: Page; + private readonly copyToClipboardButton: Locator; + private readonly receivedDataIndicator: Locator; + private readonly autoDetectSystemIntegrationActionLink: Locator; + private readonly codeBlock: Locator; + constructor(page: Page) { this.page = page; - } - - private readonly copyToClipboardButton = () => - this.page.getByTestId('observabilityOnboardingCopyToClipboardButton'); - - private readonly receivedDataIndicator = () => - this.page + this.copyToClipboardButton = this.page.getByTestId( + 'observabilityOnboardingCopyToClipboardButton' + ); + this.receivedDataIndicator = this.page .getByTestId('observabilityOnboardingAutoDetectPanelDataReceivedProgressIndicator') .getByText('Your data is ready to explore!'); - - private readonly autoDetectSystemIntegrationActionLink = () => - this.page.getByTestId( + this.autoDetectSystemIntegrationActionLink = this.page.getByTestId( 'observabilityOnboardingDataIngestStatusActionLink-inventory-host-details' ); - - private readonly codeBlock = () => - this.page.getByTestId('observabilityOnboardingAutoDetectPanelCodeSnippet'); + this.codeBlock = this.page.getByTestId('observabilityOnboardingAutoDetectPanelCodeSnippet'); + } public async copyToClipboard() { - await this.copyToClipboardButton().click(); + await this.copyToClipboardButton.click(); } public async assertVisibilityCodeBlock() { - await expect(this.codeBlock(), 'Code block should be visible').toBeVisible(); + await expect(this.codeBlock, 'Code block should be visible').toBeVisible(); } public async assertReceivedDataIndicator() { await expect( - this.receivedDataIndicator(), + this.receivedDataIndicator, 'Received data indicator should be visible' ).toBeVisible(); } public async clickAutoDetectSystemIntegrationCTA() { - await this.autoDetectSystemIntegrationActionLink().click(); + await this.autoDetectSystemIntegrationActionLink.click(); } } diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/host_details.page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/host_details.page.ts index d22b33d851639..ce6c09cc911a2 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/host_details.page.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/host_details.page.ts @@ -5,34 +5,23 @@ * 2.0. */ -import { expect, Page } from '@playwright/test'; +import { expect, type Page, type Locator } from '@playwright/test'; export class HostDetailsPage { page: Page; - public readonly hostDetailsLogsTab = () => this.page.getByTestId('infraAssetDetailsLogsTab'); - - private readonly hostDetailsLogsStream = () => this.page.getByTestId('logStream'); - - public readonly noData = () => this.page.getByTestId('kbnNoDataPage'); + private readonly cpuPercentageValue: Locator; constructor(page: Page) { this.page = page; - } - public async clickHostDetailsLogsTab() { - await this.hostDetailsLogsTab().click(); + this.cpuPercentageValue = this.page + .getByTestId('infraAssetDetailsKPIcpuUsage') + .locator('.echMetricText__value'); } - public async assertHostDetailsLogsStream() { - await expect( - this.hostDetailsLogsStream(), - 'Host details log stream should be visible' - /** - * Using toBeAttached() instead of toBeVisible() because the element - * we're selecting here has a bit weird layout with 0 height and - * overflowing child elements. 0 height makes toBeVisible() fail. - */ - ).toBeAttached(); + public async assertCpuPercentageNotEmpty() { + await expect(this.cpuPercentageValue).toBeVisible(); + expect(await this.cpuPercentageValue.textContent()).toMatch(/\d+%$/); } } diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_ea_flow.page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_ea_flow.page.ts index e956de4855579..82ad9ac6ac854 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_ea_flow.page.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_ea_flow.page.ts @@ -5,47 +5,47 @@ * 2.0. */ -import { expect, Page } from '@playwright/test'; +import { expect, type Page, type Locator } from '@playwright/test'; export class KubernetesEAFlowPage { page: Page; + private readonly receivedDataIndicatorKubernetes: Locator; + private readonly kubernetesAgentExploreDataActionLink: Locator; + private readonly codeBlock: Locator; + private readonly copyToClipboardButton: Locator; + constructor(page: Page) { this.page = page; - } - private readonly receivedDataIndicatorKubernetes = () => - this.page + this.receivedDataIndicatorKubernetes = this.page .getByTestId('observabilityOnboardingKubernetesPanelDataProgressIndicator') .getByText('We are monitoring your cluster'); - - private readonly kubernetesAgentExploreDataActionLink = () => - this.page.getByTestId( + this.kubernetesAgentExploreDataActionLink = this.page.getByTestId( 'observabilityOnboardingDataIngestStatusActionLink-kubernetes-f4dc26db-1b53-4ea2-a78b-1bfab8ea267c' ); - - private readonly codeBlock = () => - this.page.getByTestId('observabilityOnboardingKubernetesPanelCodeSnippet'); - - private readonly copyToClipboardButton = () => - this.page.getByTestId('observabilityOnboardingCopyToClipboardButton'); + this.codeBlock = this.page.getByTestId('observabilityOnboardingKubernetesPanelCodeSnippet'); + this.copyToClipboardButton = this.page.getByTestId( + 'observabilityOnboardingCopyToClipboardButton' + ); + } public async assertVisibilityCodeBlock() { - await expect(this.codeBlock(), 'Code block should be visible').toBeVisible(); + await expect(this.codeBlock, 'Code block should be visible').toBeVisible(); } public async copyToClipboard() { - await this.copyToClipboardButton().click(); + await this.copyToClipboardButton.click(); } public async assertReceivedDataIndicatorKubernetes() { await expect( - this.receivedDataIndicatorKubernetes(), + this.receivedDataIndicatorKubernetes, 'Received data indicator should be visible' ).toBeVisible(); } public async clickKubernetesAgentCTA() { - await this.kubernetesAgentExploreDataActionLink().click(); + await this.kubernetesAgentExploreDataActionLink.click(); } } diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_overview_dashboard.page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_overview_dashboard.page.ts index 9562f0262994f..1059d0793f6c2 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_overview_dashboard.page.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/kubernetes_overview_dashboard.page.ts @@ -5,44 +5,22 @@ * 2.0. */ -import { expect, Page } from '@playwright/test'; +import { expect, type Page, type Locator } from '@playwright/test'; export class KubernetesOverviewDashboardPage { page: Page; + private readonly nodesPanelChart: Locator; + constructor(page: Page) { this.page = page; - } - - private readonly nodesPanelHeader = () => this.page.getByTestId('embeddablePanelHeading-Nodes'); - - private readonly nodesInspectorButton = () => - this.page - .getByTestId('embeddablePanelHoverActions-Nodes') - .getByTestId('embeddablePanelAction-openInspector'); - - private readonly nodesInspectorTableNoResults = () => - this.page.getByTestId('inspectorTable').getByText('No items found'); - - private readonly nodesInspectorTableStatusTableCells = () => - this.page.getByTestId('inspectorTable').getByText('Status'); - - public async assertNodesNoResultsNotVisible() { - await expect( - this.nodesInspectorTableNoResults(), - 'Nodes "No results" message should not be visible' - ).toBeHidden(); - } - public async openNodesInspector() { - await this.nodesPanelHeader().hover(); - await this.nodesInspectorButton().click(); + this.nodesPanelChart = this.page + .locator(`#panel-7116207b-48ce-4d93-9fbd-26d73af1c185`) + .getByTestId('xyVisChart'); } - public async assetNodesInspectorStatusTableCells() { - await expect( - this.nodesInspectorTableStatusTableCells(), - 'Status table cell should exist' - ).toBeVisible(); + async assertNodesPanelNotEmpty() { + await expect(this.nodesPanelChart).toBeVisible(); } } diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/onboarding_home.page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/onboarding_home.page.ts index 6997001496521..4b04507d27f04 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/onboarding_home.page.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/onboarding_home.page.ts @@ -5,40 +5,50 @@ * 2.0. */ -import { Page } from '@playwright/test'; +import type { Page, Locator } from '@playwright/test'; export class OnboardingHomePage { page: Page; + private readonly otelKubernetesQuickStartCard: Locator; + private readonly useCaseKubernetes: Locator; + private readonly kubernetesQuickStartCard: Locator; + private readonly useCaseHost: Locator; + private readonly autoDetectElasticAgent: Locator; + constructor(page: Page) { this.page = page; - } - - private readonly useCaseKubernetes = () => - this.page.getByTestId('observabilityOnboardingUseCaseCard-kubernetes').getByRole('radio'); - - private readonly kubernetesQuickStartCard = () => - this.page.getByTestId('integration-card:kubernetes-quick-start'); - private readonly useCaseHost = () => - this.page.getByTestId('observabilityOnboardingUseCaseCard-host').getByRole('radio'); - - private readonly autoDetectElasticAgent = () => - this.page.getByTestId('integration-card:auto-detect-logs'); + this.otelKubernetesQuickStartCard = this.page.getByTestId('integration-card:otel-kubernetes'); + this.useCaseKubernetes = this.page + .getByTestId('observabilityOnboardingUseCaseCard-kubernetes') + .getByRole('radio'); + this.kubernetesQuickStartCard = this.page.getByTestId( + 'integration-card:kubernetes-quick-start' + ); + this.useCaseHost = this.page + .getByTestId('observabilityOnboardingUseCaseCard-host') + .getByRole('radio'); + this.autoDetectElasticAgent = this.page.getByTestId('integration-card:auto-detect-logs'); + } public async selectHostUseCase() { - await this.useCaseHost().click(); + await this.useCaseHost.click(); } public async selectKubernetesUseCase() { - await this.useCaseKubernetes().click(); + await this.useCaseKubernetes.click(); } public async selectAutoDetectWithElasticAgent() { - await this.autoDetectElasticAgent().click(); + await this.autoDetectElasticAgent.click(); } public async selectKubernetesQuickstart() { - await this.kubernetesQuickStartCard().click(); + await this.kubernetesQuickStartCard.click(); + } + + public async selectOtelKubernetesQuickstart() { + await this.otelKubernetesQuickStartCard.click(); } } diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/otel_kubernetes_flow.page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/otel_kubernetes_flow.page.ts new file mode 100644 index 0000000000000..8c5362f0dac17 --- /dev/null +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/otel_kubernetes_flow.page.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Page } from '@playwright/test'; + +export class OtelKubernetesFlowPage { + page: Page; + + constructor(page: Page) { + this.page = page; + } + + public async copyHelmRepositorySnippetToClipboard() { + await this.page + .getByTestId('observabilityOnboardingOtelKubernetesPanelAddRepositoryCopyToClipboard') + .click(); + } + + public async copyInstallStackSnippetToClipboard() { + await this.page + .getByTestId('observabilityOnboardingOtelKubernetesPanelInstallStackCopyToClipboard') + .click(); + } + + public async clickClusterOverviewDashboardCTA() { + await this.page + .getByTestId( + 'observabilityOnboardingDataIngestStatusActionLink-kubernetes_otel-cluster-overview' + ) + .click(); + } +} diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/otel_kubernetes_overview_dashboard.page.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/otel_kubernetes_overview_dashboard.page.ts new file mode 100644 index 0000000000000..f7159632ef0d9 --- /dev/null +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/pom/pages/otel_kubernetes_overview_dashboard.page.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { expect, type Page, type Locator } from '@playwright/test'; + +export class OtelKubernetesOverviewDashboardPage { + page: Page; + + private readonly nodesPanelValue: Locator; + + constructor(page: Page) { + this.page = page; + + this.nodesPanelValue = this.page.locator( + `#panel-6119419c-1899-4765-aed4-c050cde4c30a .echMetricText__value` + ); + } + + async assertNodesPanelNotEmpty() { + await expect(this.nodesPanelValue).toBeVisible(); + expect(await this.nodesPanelValue.textContent()).toMatch(/\d+/); + } +} diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/elastic_agent/route.ts b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/elastic_agent/route.ts index b6223c9a820a2..ea641fc20be99 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/elastic_agent/route.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/elastic_agent/route.ts @@ -18,7 +18,12 @@ const generateConfig = createObservabilityOnboardingServerRoute({ params: t.type({ query: t.type({ onboardingId: t.string }), }), - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'Authorization is checked by the Saved Object client', + }, + }, async handler(resources): Promise { const { params: { @@ -32,7 +37,7 @@ const generateConfig = createObservabilityOnboardingServerRoute({ const authApiKey = getAuthenticationAPIKey(request); const coreStart = await core.start(); - const savedObjectsClient = coreStart.savedObjects.createInternalRepository(); + const savedObjectsClient = coreStart.savedObjects.getScopedClient(request); const elasticsearchUrl = plugins.cloud?.setup?.elasticsearchUrl ? [plugins.cloud?.setup?.elasticsearchUrl] diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/firehose/route.ts b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/firehose/route.ts index 06d8231696764..c8b90d2f309a3 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/firehose/route.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/firehose/route.ts @@ -36,7 +36,12 @@ interface DocumentCountPerIndexBucket { const createFirehoseOnboardingFlowRoute = createObservabilityOnboardingServerRoute({ endpoint: 'POST /internal/observability_onboarding/firehose/flow', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'This route has custom authorization logic using Elasticsearch client', + }, + }, async handler({ context, request, @@ -95,7 +100,12 @@ const hasFirehoseDataRoute = createObservabilityOnboardingServerRoute({ stackName: t.string, }), }), - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'Authorization is checked by Elasticsearch client', + }, + }, async handler(resources): Promise { const { streamName, stackName } = resources.params.query; const { elasticsearch } = await resources.context.core; diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/flow/route.ts b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/flow/route.ts index 738c9f1fefd57..290e003d72661 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/flow/route.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/flow/route.ts @@ -30,7 +30,12 @@ import { makeTar, type Entry } from './make_tar'; const updateOnboardingFlowRoute = createObservabilityOnboardingServerRoute({ endpoint: 'PUT /internal/observability_onboarding/flow/{onboardingId}', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'Authorization is checked by the Saved Object client', + }, + }, params: t.type({ path: t.type({ onboardingId: t.string, @@ -65,7 +70,13 @@ const updateOnboardingFlowRoute = createObservabilityOnboardingServerRoute({ const stepProgressUpdateRoute = createObservabilityOnboardingServerRoute({ endpoint: 'POST /internal/observability_onboarding/flow/{id}/step/{name}', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: + "This endpoint is meant to be called from user's terminal and authenticated using API key with a limited privileges. For this reason there is no authorization and saved object is accessed using an internal Kibana user (the API key used by the user should not have those privileges)", + }, + }, params: t.type({ path: t.type({ id: t.string, @@ -129,7 +140,12 @@ const stepProgressUpdateRoute = createObservabilityOnboardingServerRoute({ const getProgressRoute = createObservabilityOnboardingServerRoute({ endpoint: 'GET /internal/observability_onboarding/flow/{onboardingId}/progress', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'Authorization is checked by the Saved Object client', + }, + }, params: t.type({ path: t.type({ onboardingId: t.string, @@ -190,7 +206,12 @@ const getProgressRoute = createObservabilityOnboardingServerRoute({ */ const createFlowRoute = createObservabilityOnboardingServerRoute({ endpoint: 'POST /internal/observability_onboarding/flow', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'Authorization is checked by the Saved Object client', + }, + }, params: t.type({ body: t.type({ name: t.string, @@ -308,7 +329,13 @@ const createFlowRoute = createObservabilityOnboardingServerRoute({ */ const integrationsInstallRoute = createObservabilityOnboardingServerRoute({ endpoint: 'POST /internal/observability_onboarding/flow/{onboardingId}/integrations/install', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: + "This endpoint is meant to be called from user's terminal. Authorization is partially checked by the Package Service client, and saved object is accessed using internal Kibana user because the API key used for installing integrations should not have those privileges.", + }, + }, params: t.type({ path: t.type({ onboardingId: t.string, diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/kubernetes/route.ts b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/kubernetes/route.ts index b5ea3ef4ee5e6..87100e78175b8 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/kubernetes/route.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/kubernetes/route.ts @@ -33,7 +33,13 @@ const createKubernetesOnboardingFlowRoute = createObservabilityOnboardingServerR params: t.type({ body: t.type({ pkgName: t.union([t.literal('kubernetes'), t.literal('kubernetes_otel')]) }), }), - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: + 'Authorization is checked by custom logic using Elasticsearch client and by the Package Service client', + }, + }, async handler({ context, request, @@ -90,7 +96,12 @@ const hasKubernetesDataRoute = createObservabilityOnboardingServerRoute({ onboardingId: t.string, }), }), - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'Authorization is checked by Elasticsearch', + }, + }, async handler(resources): Promise { const { onboardingId } = resources.params.path; const { elasticsearch } = await resources.context.core; diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/logs/route.ts b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/logs/route.ts index 6302df917469a..63770341ab1c8 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/logs/route.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/logs/route.ts @@ -19,8 +19,12 @@ import { hasLogMonitoringPrivileges } from '../../lib/api_key/has_log_monitoring const logMonitoringPrivilegesRoute = createObservabilityOnboardingServerRoute({ endpoint: 'GET /internal/observability_onboarding/logs/setup/privileges', - options: { tags: [] }, - + security: { + authz: { + enabled: false, + reason: 'This route has custom authorization logic using Elasticsearch client', + }, + }, handler: async (resources): Promise<{ hasPrivileges: boolean }> => { const { context } = resources; @@ -36,7 +40,12 @@ const logMonitoringPrivilegesRoute = createObservabilityOnboardingServerRoute({ const installShipperSetupRoute = createObservabilityOnboardingServerRoute({ endpoint: 'GET /internal/observability_onboarding/logs/setup/environment', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: "This route only reads cluster's metadata and does not require authorization", + }, + }, async handler(resources): Promise<{ apiEndpoint: string; scriptDownloadUrl: string; @@ -75,7 +84,12 @@ const installShipperSetupRoute = createObservabilityOnboardingServerRoute({ const createAPIKeyRoute = createObservabilityOnboardingServerRoute({ endpoint: 'POST /internal/observability_onboarding/otel/api_key', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'This route has custom authorization logic using Elasticsearch client', + }, + }, params: t.type({}), async handler(resources): Promise<{ apiKeyEncoded: string }> { const { context } = resources; @@ -96,7 +110,12 @@ const createAPIKeyRoute = createObservabilityOnboardingServerRoute({ const createFlowRoute = createObservabilityOnboardingServerRoute({ endpoint: 'POST /internal/observability_onboarding/logs/flow', - options: { tags: [] }, + security: { + authz: { + enabled: false, + reason: 'Authorization is checked by the Saved Object client and Elasticsearch client', + }, + }, params: t.type({ body: t.intersection([ t.type({ diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/types.ts b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/types.ts index 1d30cf05ab255..4a1e818995409 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/types.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/server/routes/types.ts @@ -46,7 +46,6 @@ export interface ObservabilityOnboardingRouteHandlerResources { } export interface ObservabilityOnboardingRouteCreateOptions { - tags: string[]; xsrfRequired?: boolean; } diff --git a/x-pack/solutions/observability/plugins/slo/server/services/mocks/index.ts b/x-pack/solutions/observability/plugins/slo/server/services/mocks/index.ts index c6fa4a3d949f3..0b3c1d4d07453 100644 --- a/x-pack/solutions/observability/plugins/slo/server/services/mocks/index.ts +++ b/x-pack/solutions/observability/plugins/slo/server/services/mocks/index.ts @@ -26,6 +26,7 @@ const createTransformManagerMock = (): jest.Mocked => { start: jest.fn(), stop: jest.fn(), inspect: jest.fn(), + getVersion: jest.fn(), }; }; @@ -37,6 +38,7 @@ const createSummaryTransformManagerMock = (): jest.Mocked => { start: jest.fn(), stop: jest.fn(), inspect: jest.fn(), + getVersion: jest.fn(), }; }; diff --git a/x-pack/solutions/observability/plugins/slo/server/services/summay_transform_manager.ts b/x-pack/solutions/observability/plugins/slo/server/services/summay_transform_manager.ts index 9389210505b4c..139827b0425a3 100644 --- a/x-pack/solutions/observability/plugins/slo/server/services/summay_transform_manager.ts +++ b/x-pack/solutions/observability/plugins/slo/server/services/summay_transform_manager.ts @@ -111,4 +111,21 @@ export class DefaultSummaryTransformManager implements TransformManager { throw err; } } + + async getVersion(transformId: TransformId): Promise { + try { + const response = await retryTransientEsErrors( + () => + this.scopedClusterClient.asSecondaryAuthUser.transform.getTransform( + { transform_id: transformId }, + { ignore: [404] } + ), + { logger: this.logger } + ); + return response?.transforms[0]?._meta?.version; + } catch (err) { + this.logger.error(`Cannot retrieve SLO transform version [${transformId}]. ${err}`); + throw err; + } + } } diff --git a/x-pack/solutions/observability/plugins/slo/server/services/transform_manager.ts b/x-pack/solutions/observability/plugins/slo/server/services/transform_manager.ts index c07c8d78a5ca4..e95b04ca6b7da 100644 --- a/x-pack/solutions/observability/plugins/slo/server/services/transform_manager.ts +++ b/x-pack/solutions/observability/plugins/slo/server/services/transform_manager.ts @@ -21,6 +21,7 @@ export interface TransformManager { start(transformId: TransformId): Promise; stop(transformId: TransformId): Promise; uninstall(transformId: TransformId): Promise; + getVersion(transformId: TransformId): Promise; } export class DefaultTransformManager implements TransformManager { @@ -133,6 +134,23 @@ export class DefaultTransformManager implements TransformManager { } } + async getVersion(transformId: TransformId): Promise { + try { + const response = await retryTransientEsErrors( + () => + this.scopedClusterClient.asSecondaryAuthUser.transform.getTransform( + { transform_id: transformId }, + { ignore: [404] } + ), + { logger: this.logger } + ); + return response?.transforms[0]?._meta?.version; + } catch (err) { + this.logger.error(`Cannot retrieve SLO transform version [${transformId}]. ${err}`); + throw err; + } + } + async scheduleNowTransform(transformId: TransformId) { this.scopedClusterClient.asSecondaryAuthUser.transform .scheduleNowTransform({ transform_id: transformId }) diff --git a/x-pack/solutions/observability/plugins/slo/server/services/update_slo.test.ts b/x-pack/solutions/observability/plugins/slo/server/services/update_slo.test.ts index 9417e4779a5e2..b473c39818138 100644 --- a/x-pack/solutions/observability/plugins/slo/server/services/update_slo.test.ts +++ b/x-pack/solutions/observability/plugins/slo/server/services/update_slo.test.ts @@ -21,6 +21,7 @@ import { getSLOSummaryTransformId, getSLOTransformId, SLO_DESTINATION_INDEX_PATTERN, + SLO_RESOURCES_VERSION, SLO_SUMMARY_DESTINATION_INDEX_PATTERN, } from '../../common/constants'; import { SLODefinition } from '../domain/models'; @@ -68,7 +69,7 @@ describe('UpdateSLO', () => { ); }); - describe('when the update payload does not change the original SLO', () => { + describe('when the update does not change the original SLO', () => { function expectNoCallsToAnyMocks() { expect(mockEsClient.security.hasPrivileges).not.toBeCalled(); @@ -86,6 +87,10 @@ describe('UpdateSLO', () => { expect(mockScopedClusterClient.asSecondaryAuthUser.ingest.putPipeline).not.toBeCalled(); } + beforeEach(() => { + mockSummaryTransformManager.getVersion.mockResolvedValue(SLO_RESOURCES_VERSION); + }); + it('returns early with a fully identical SLO payload', async () => { const slo = createSLO(); mockRepository.findById.mockResolvedValueOnce(slo); @@ -194,11 +199,67 @@ describe('UpdateSLO', () => { }); }); - describe('handles breaking changes', () => { + describe('without breaking changes update', () => { + beforeEach(() => { + mockEsClient.security.hasPrivileges.mockResolvedValue({ + has_all_requested: true, + } as SecurityHasPrivilegesResponse); + }); + + describe('when resources are up-to-date', () => { + beforeEach(() => { + mockSummaryTransformManager.getVersion.mockResolvedValue(SLO_RESOURCES_VERSION); + }); + it('updates the summary pipeline with the new non-breaking changes', async () => { + const slo = createSLO(); + mockRepository.findById.mockResolvedValueOnce(slo); + await updateSLO.execute(slo.id, { name: 'updated name' }); + + expectNonBreakingChangeUpdatedResources(); + }); + + function expectNonBreakingChangeUpdatedResources() { + expect(mockScopedClusterClient.asSecondaryAuthUser.ingest.putPipeline).toHaveBeenCalled(); + + expect(mockTransformManager.install).not.toHaveBeenCalled(); + expect(mockTransformManager.start).not.toHaveBeenCalled(); + expect(mockSummaryTransformManager.install).not.toHaveBeenCalled(); + expect(mockSummaryTransformManager.start).not.toHaveBeenCalled(); + + expect(mockEsClient.index).not.toHaveBeenCalled(); + } + }); + + describe('when resources are running on an older version', () => { + beforeEach(() => { + mockSummaryTransformManager.getVersion.mockResolvedValue(SLO_RESOURCES_VERSION - 2); + }); + + it('consideres the non-breaking changes as breaking', async () => { + const slo = createSLO(); + mockRepository.findById.mockResolvedValueOnce(slo); + await updateSLO.execute(slo.id, { name: 'updated name' }); + + expect(mockRepository.update).toHaveBeenCalledWith( + expect.objectContaining({ + ...slo, + name: 'updated name', + revision: 2, + updatedAt: expect.anything(), + }) + ); + expectInstallationOfUpdatedSLOResources(); + expectDeletionOfOriginalSLOResources(slo); + }); + }); + }); + + describe('with breaking changes update', () => { beforeEach(() => { mockEsClient.security.hasPrivileges.mockResolvedValue({ has_all_requested: true, } as SecurityHasPrivilegesResponse); + mockSummaryTransformManager.getVersion.mockResolvedValue(SLO_RESOURCES_VERSION); }); it('consideres a settings change as a breaking change', async () => { @@ -315,6 +376,7 @@ describe('UpdateSLO', () => { mockEsClient.security.hasPrivileges.mockResolvedValue({ has_all_requested: true, } as SecurityHasPrivilegesResponse); + mockSummaryTransformManager.getVersion.mockResolvedValue(SLO_RESOURCES_VERSION); }); it('throws a SecurityException error when the user does not have the required privileges on the source index', async () => { diff --git a/x-pack/solutions/observability/plugins/slo/server/services/update_slo.ts b/x-pack/solutions/observability/plugins/slo/server/services/update_slo.ts index 30d62140f80d9..4fdd488fa69a8 100644 --- a/x-pack/solutions/observability/plugins/slo/server/services/update_slo.ts +++ b/x-pack/solutions/observability/plugins/slo/server/services/update_slo.ts @@ -11,6 +11,7 @@ import { asyncForEach } from '@kbn/std'; import { isEqual, pick } from 'lodash'; import { SLO_DESTINATION_INDEX_PATTERN, + SLO_RESOURCES_VERSION, SLO_SUMMARY_DESTINATION_INDEX_PATTERN, SLO_SUMMARY_TEMP_INDEX_NAME, getSLOPipelineId, @@ -53,15 +54,7 @@ export class UpdateSLO { return this.toResponse(originalSlo); } - const fields = [ - 'indicator', - 'groupBy', - 'timeWindow', - 'objective', - 'budgetingMethod', - 'settings', - ]; - const requireRevisionBump = !isEqual(pick(originalSlo, fields), pick(updatedSlo, fields)); + const requireRevisionBump = await this.isRevisionBumpRequired(originalSlo, updatedSlo); updatedSlo = Object.assign(updatedSlo, { updatedAt: new Date(), @@ -77,23 +70,8 @@ export class UpdateSLO { rollbackOperations.push(() => this.repository.update(originalSlo)); if (!requireRevisionBump) { - // At this point, we still need to update the sli and summary pipeline to include the changes (id and revision in the rollup index) and (name, desc, tags, ...) in the summary index - + // we only have to update the summary pipeline to include the non-breaking changes (name, desc, tags, ...) in the summary index try { - await retryTransientEsErrors( - () => - this.scopedClusterClient.asSecondaryAuthUser.ingest.putPipeline( - getSLOPipelineTemplate(updatedSlo) - ), - { logger: this.logger } - ); - rollbackOperations.push(() => - this.scopedClusterClient.asSecondaryAuthUser.ingest.deletePipeline( - { id: getSLOPipelineId(updatedSlo.id, updatedSlo.revision) }, - { ignore: [404] } - ) - ); - await retryTransientEsErrors( () => this.scopedClusterClient.asSecondaryAuthUser.ingest.putPipeline( @@ -205,6 +183,26 @@ export class UpdateSLO { return this.toResponse(updatedSlo); } + private async isRevisionBumpRequired(originalSlo: SLODefinition, updatedSlo: SLODefinition) { + const fields = [ + 'indicator', + 'groupBy', + 'timeWindow', + 'objective', + 'budgetingMethod', + 'settings', + ]; + const hasBreakingChanges = !isEqual(pick(originalSlo, fields), pick(updatedSlo, fields)); + const currentResourcesVersion = await this.summaryTransformManager.getVersion( + getSLOSummaryTransformId(originalSlo.id, originalSlo.revision) + ); + + const hasOutdatedVersion = + currentResourcesVersion === undefined || currentResourcesVersion < SLO_RESOURCES_VERSION; + + return hasBreakingChanges || hasOutdatedVersion; + } + private async deleteOriginalSLO(originalSlo: SLODefinition) { try { const originalRollupTransformId = getSLOTransformId(originalSlo.id, originalSlo.revision); diff --git a/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts b/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts index 9c0aa321721d6..a4ab3823d41da 100644 --- a/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts +++ b/x-pack/solutions/observability/plugins/streams/server/lib/streams/client.ts @@ -215,11 +215,9 @@ export class StreamsClient { ); if (!isRoutingToChild) { - /** - * The routing condition is defined in the parent. An empty condition - * means it is not actively routed. Consider this a placeholder until - * the routing condition is configured in its parent. - */ + // If the parent is not routing to the child, we need to update the parent + // to include the child in the routing with an empty condition, which means that no data is routed. + // The user can set the condition later on the parent await this.updateStreamRouting({ definition: parentDefinition, routing: parentDefinition.stream.ingest.routing.concat({ @@ -227,6 +225,31 @@ export class StreamsClient { }), }); } + } else if (isWiredStream(definition)) { + // if there is no parent, this is either the root stream, or + // there are intermediate streams missing in the tree. + // In the latter case, we need to create the intermediate streams first. + const parentId = getParentId(definition.name); + if (parentId) { + await this.upsertStream({ + definition: { + name: parentId, + stream: { + ingest: { + processing: [], + routing: [ + { + name: definition.name, + }, + ], + wired: { + fields: {}, + }, + }, + }, + }, + }); + } } return { acknowledged: true, result }; @@ -340,6 +363,11 @@ export class StreamsClient { if (descendantsById[child.name]) { continue; } + if (!isChildOf(definition.name, child.name)) { + throw new MalformedStreamId( + `The ID (${child.name}) from the child stream must start with the parent's id (${definition.name}), followed by a dot and a name` + ); + } await this.validateAndUpsertStream({ definition: { name: child.name, diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/index.ts b/x-pack/solutions/observability/plugins/streams/server/routes/index.ts index 340900050d1c9..afdb803b3e067 100644 --- a/x-pack/solutions/observability/plugins/streams/server/routes/index.ts +++ b/x-pack/solutions/observability/plugins/streams/server/routes/index.ts @@ -5,40 +5,22 @@ * 2.0. */ -import { dashboardRoutes } from './dashboards/route'; import { esqlRoutes } from './esql/route'; -import { deleteStreamRoute } from './streams/delete'; -import { streamDetailRoute } from './streams/details'; -import { disableStreamsRoute } from './streams/disable'; -import { editStreamRoute } from './streams/edit'; -import { enableStreamsRoute } from './streams/enable'; -import { forkStreamsRoute } from './streams/fork'; -import { listStreamsRoute } from './streams/list'; -import { readStreamRoute } from './streams/read'; -import { resyncStreamsRoute } from './streams/resync'; -import { sampleStreamRoute } from './streams/sample'; -import { schemaFieldsSimulationRoute } from './streams/schema/fields_simulation'; -import { unmappedFieldsRoute } from './streams/schema/unmapped_fields'; -import { simulateProcessorRoute } from './streams/processing/simulate'; -import { streamsStatusRoutes } from './streams/settings'; +import { dashboardRoutes } from './dashboards/route'; +import { crudRoutes } from './streams/crud/route'; +import { enablementRoutes } from './streams/enablement/route'; +import { managementRoutes } from './streams/management/route'; +import { schemaRoutes } from './streams/schema/route'; +import { processingRoutes } from './streams/processing/route'; export const streamsRouteRepository = { - ...enableStreamsRoute, - ...resyncStreamsRoute, - ...forkStreamsRoute, - ...readStreamRoute, - ...editStreamRoute, - ...deleteStreamRoute, - ...listStreamsRoute, - ...streamsStatusRoutes, ...esqlRoutes, - ...disableStreamsRoute, ...dashboardRoutes, - ...sampleStreamRoute, - ...streamDetailRoute, - ...unmappedFieldsRoute, - ...simulateProcessorRoute, - ...schemaFieldsSimulationRoute, + ...crudRoutes, + ...enablementRoutes, + ...managementRoutes, + ...schemaRoutes, + ...processingRoutes, }; export type StreamsRouteRepository = typeof streamsRouteRepository; diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/crud/route.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/crud/route.ts new file mode 100644 index 0000000000000..95d655c160850 --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams/server/routes/streams/crud/route.ts @@ -0,0 +1,286 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { z } from '@kbn/zod'; +import { badRequest, internal, notFound } from '@hapi/boom'; +import { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; +import { + streamConfigDefinitionSchema, + ListStreamsResponse, + FieldDefinitionConfig, + ReadStreamDefinition, + WiredReadStreamDefinition, + isWiredStream, +} from '@kbn/streams-schema'; +import { isResponseError } from '@kbn/es-errors'; +import { MalformedStreamId } from '../../../lib/streams/errors/malformed_stream_id'; +import { + DefinitionNotFound, + ForkConditionMissing, + IndexTemplateNotFound, + RootStreamImmutabilityException, + SecurityException, +} from '../../../lib/streams/errors'; +import { createServerRoute } from '../../create_server_route'; +import { getDataStreamLifecycle } from '../../../lib/streams/stream_crud'; + +export const readStreamRoute = createServerRoute({ + endpoint: 'GET /api/streams/{id}', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ id: z.string() }), + }), + handler: async ({ params, request, getScopedClients }): Promise => { + try { + const { assetClient, streamsClient } = await getScopedClients({ + request, + }); + + const name = params.path.id; + + const [streamDefinition, dashboards, ancestors, dataStream] = await Promise.all([ + streamsClient.getStream(name), + assetClient.getAssetIds({ + entityId: name, + entityType: 'stream', + assetType: 'dashboard', + }), + streamsClient.getAncestors(name), + streamsClient.getDataStream(name), + ]); + + const lifecycle = getDataStreamLifecycle(dataStream); + + if (!isWiredStream(streamDefinition)) { + return { + ...streamDefinition, + lifecycle, + dashboards, + inherited_fields: {}, + }; + } + + const body: WiredReadStreamDefinition = { + ...streamDefinition, + dashboards, + lifecycle, + inherited_fields: ancestors.reduce((acc, def) => { + Object.entries(def.stream.ingest.wired.fields).forEach(([key, fieldDef]) => { + acc[key] = { ...fieldDef, from: def.name }; + }); + return acc; + // TODO: replace this with a proper type + }, {} as Record), + }; + + return body; + } catch (e) { + if (e instanceof DefinitionNotFound || (isResponseError(e) && e.statusCode === 404)) { + throw notFound(e); + } + + throw internal(e); + } + }, +}); + +export interface StreamDetailsResponse { + details: { + count: number; + }; +} + +export const streamDetailRoute = createServerRoute({ + endpoint: 'GET /api/streams/{id}/_details', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ id: z.string() }), + query: z.object({ + start: z.string(), + end: z.string(), + }), + }), + handler: async ({ params, request, getScopedClients }): Promise => { + try { + const { scopedClusterClient, streamsClient } = await getScopedClients({ request }); + const streamEntity = await streamsClient.getStream(params.path.id); + + // check doc count + const docCountResponse = await scopedClusterClient.asCurrentUser.search({ + index: streamEntity.name, + body: { + track_total_hits: true, + query: { + range: { + '@timestamp': { + gte: params.query.start, + lte: params.query.end, + }, + }, + }, + size: 0, + }, + }); + + const count = (docCountResponse.hits.total as SearchTotalHits).value; + + return { + details: { + count, + }, + }; + } catch (e) { + if (e instanceof DefinitionNotFound) { + throw notFound(e); + } + + throw internal(e); + } + }, +}); + +export const listStreamsRoute = createServerRoute({ + endpoint: 'GET /api/streams', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({}), + handler: async ({ request, getScopedClients }): Promise => { + try { + const { streamsClient } = await getScopedClients({ request }); + return { + streams: await streamsClient.listStreams(), + }; + } catch (e) { + if (e instanceof DefinitionNotFound) { + throw notFound(e); + } + + throw internal(e); + } + }, +}); + +export const editStreamRoute = createServerRoute({ + endpoint: 'PUT /api/streams/{id}', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ + id: z.string(), + }), + body: streamConfigDefinitionSchema, + }), + handler: async ({ params, request, getScopedClients }) => { + try { + const { streamsClient } = await getScopedClients({ request }); + const streamDefinition = { stream: params.body, name: params.path.id }; + + return await streamsClient.upsertStream({ definition: streamDefinition }); + } catch (e) { + if (e instanceof IndexTemplateNotFound || e instanceof DefinitionNotFound) { + throw notFound(e); + } + + if ( + e instanceof SecurityException || + e instanceof ForkConditionMissing || + e instanceof MalformedStreamId || + e instanceof RootStreamImmutabilityException + ) { + throw badRequest(e); + } + + throw internal(e); + } + }, +}); + +export const deleteStreamRoute = createServerRoute({ + endpoint: 'DELETE /api/streams/{id}', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ + id: z.string(), + }), + }), + handler: async ({ params, request, getScopedClients }): Promise<{ acknowledged: true }> => { + try { + const { streamsClient } = await getScopedClients({ + request, + }); + + await streamsClient.deleteStream(params.path.id); + + return { acknowledged: true }; + } catch (e) { + if (e instanceof IndexTemplateNotFound || e instanceof DefinitionNotFound) { + throw notFound(e); + } + + if ( + e instanceof SecurityException || + e instanceof ForkConditionMissing || + e instanceof MalformedStreamId + ) { + throw badRequest(e); + } + + throw internal(e); + } + }, +}); + +export const crudRoutes = { + ...readStreamRoute, + ...streamDetailRoute, + ...listStreamsRoute, + ...editStreamRoute, + ...deleteStreamRoute, +}; diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/delete.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/delete.ts deleted file mode 100644 index 270009d3c6d9d..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/delete.ts +++ /dev/null @@ -1,66 +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 { badRequest, internal, notFound } from '@hapi/boom'; -import { z } from '@kbn/zod'; -import { - DefinitionNotFound, - ForkConditionMissing, - IndexTemplateNotFound, - SecurityException, -} from '../../lib/streams/errors'; -import { MalformedStreamId } from '../../lib/streams/errors/malformed_stream_id'; -import { createServerRoute } from '../create_server_route'; - -export const deleteStreamRoute = createServerRoute({ - endpoint: 'DELETE /api/streams/{id}', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({ - path: z.object({ - id: z.string(), - }), - }), - handler: async ({ - params, - logger, - request, - getScopedClients, - }): Promise<{ acknowledged: true }> => { - try { - const { streamsClient } = await getScopedClients({ - request, - }); - - await streamsClient.deleteStream(params.path.id); - - return { acknowledged: true }; - } catch (e) { - if (e instanceof IndexTemplateNotFound || e instanceof DefinitionNotFound) { - throw notFound(e); - } - - if ( - e instanceof SecurityException || - e instanceof ForkConditionMissing || - e instanceof MalformedStreamId - ) { - throw badRequest(e); - } - - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/details.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/details.ts deleted file mode 100644 index 605ca882ec975..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/details.ts +++ /dev/null @@ -1,82 +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 { z } from '@kbn/zod'; -import { notFound, internal } from '@hapi/boom'; -import { SearchTotalHits } from '@elastic/elasticsearch/lib/api/types'; -import { createServerRoute } from '../create_server_route'; -import { DefinitionNotFound } from '../../lib/streams/errors'; - -export interface StreamDetailsResponse { - details: { - count: number; - }; -} - -export const streamDetailRoute = createServerRoute({ - endpoint: 'GET /api/streams/{id}/_details', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({ - path: z.object({ id: z.string() }), - query: z.object({ - start: z.string(), - end: z.string(), - }), - }), - handler: async ({ - response, - params, - request, - logger, - getScopedClients, - }): Promise => { - try { - const { scopedClusterClient, streamsClient } = await getScopedClients({ request }); - const streamEntity = await streamsClient.getStream(params.path.id); - - // check doc count - const docCountResponse = await scopedClusterClient.asCurrentUser.search({ - index: streamEntity.name, - body: { - track_total_hits: true, - query: { - range: { - '@timestamp': { - gte: params.query.start, - lte: params.query.end, - }, - }, - }, - size: 0, - }, - }); - - const count = (docCountResponse.hits.total as SearchTotalHits).value; - - return { - details: { - count, - }, - }; - } catch (e) { - if (e instanceof DefinitionNotFound) { - throw notFound(e); - } - - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/disable.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/disable.ts deleted file mode 100644 index 47317d04ec872..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/disable.ts +++ /dev/null @@ -1,37 +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 { badRequest, internal } from '@hapi/boom'; -import { z } from '@kbn/zod'; -import { DisableStreamsResponse } from '../../lib/streams/client'; -import { SecurityException } from '../../lib/streams/errors'; -import { createServerRoute } from '../create_server_route'; - -export const disableStreamsRoute = createServerRoute({ - endpoint: 'POST /api/streams/_disable', - params: z.object({}), - options: { - access: 'internal', - }, - security: { - authz: { - requiredPrivileges: ['streams_write'], - }, - }, - handler: async ({ request, getScopedClients }): Promise => { - try { - const { streamsClient } = await getScopedClients({ request }); - - return await streamsClient.disableStreams(); - } catch (e) { - if (e instanceof SecurityException) { - throw badRequest(e); - } - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/edit.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/edit.ts deleted file mode 100644 index 9bc4b6e515a5a..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/edit.ts +++ /dev/null @@ -1,62 +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 { badRequest, internal, notFound } from '@hapi/boom'; -import { streamConfigDefinitionSchema } from '@kbn/streams-schema'; -import { z } from '@kbn/zod'; -import { - DefinitionNotFound, - ForkConditionMissing, - IndexTemplateNotFound, - RootStreamImmutabilityException, - SecurityException, -} from '../../lib/streams/errors'; -import { MalformedStreamId } from '../../lib/streams/errors/malformed_stream_id'; -import { createServerRoute } from '../create_server_route'; - -export const editStreamRoute = createServerRoute({ - endpoint: 'PUT /api/streams/{id}', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({ - path: z.object({ - id: z.string(), - }), - body: streamConfigDefinitionSchema, - }), - handler: async ({ params, request, getScopedClients }) => { - try { - const { streamsClient } = await getScopedClients({ request }); - const streamDefinition = { stream: params.body, name: params.path.id }; - - return await streamsClient.upsertStream({ definition: streamDefinition }); - } catch (e) { - if (e instanceof IndexTemplateNotFound || e instanceof DefinitionNotFound) { - throw notFound(e); - } - - if ( - e instanceof SecurityException || - e instanceof ForkConditionMissing || - e instanceof MalformedStreamId || - e instanceof RootStreamImmutabilityException - ) { - throw badRequest(e); - } - - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/enable.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/enablement/route.ts similarity index 53% rename from x-pack/solutions/observability/plugins/streams/server/routes/streams/enable.ts rename to x-pack/solutions/observability/plugins/streams/server/routes/streams/enablement/route.ts index d7f8689dc6211..a7021bbddd8c8 100644 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/enable.ts +++ b/x-pack/solutions/observability/plugins/streams/server/routes/streams/enablement/route.ts @@ -7,9 +7,9 @@ import { badRequest, internal } from '@hapi/boom'; import { z } from '@kbn/zod'; -import { EnableStreamsResponse } from '../../lib/streams/client'; -import { SecurityException } from '../../lib/streams/errors'; -import { createServerRoute } from '../create_server_route'; +import { SecurityException } from '../../../lib/streams/errors'; +import { createServerRoute } from '../../create_server_route'; +import { DisableStreamsResponse, EnableStreamsResponse } from '../../../lib/streams/client'; export const enableStreamsRoute = createServerRoute({ endpoint: 'POST /api/streams/_enable', @@ -39,3 +39,33 @@ export const enableStreamsRoute = createServerRoute({ } }, }); + +export const disableStreamsRoute = createServerRoute({ + endpoint: 'POST /api/streams/_disable', + params: z.object({}), + options: { + access: 'internal', + }, + security: { + authz: { + requiredPrivileges: ['streams_write'], + }, + }, + handler: async ({ request, getScopedClients }): Promise => { + try { + const { streamsClient } = await getScopedClients({ request }); + + return await streamsClient.disableStreams(); + } catch (e) { + if (e instanceof SecurityException) { + throw badRequest(e); + } + throw internal(e); + } + }, +}); + +export const enablementRoutes = { + ...enableStreamsRoute, + ...disableStreamsRoute, +}; diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/fork.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/fork.ts deleted file mode 100644 index 0f03a762dd41f..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/fork.ts +++ /dev/null @@ -1,79 +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 { badRequest, internal, notFound } from '@hapi/boom'; -import { conditionSchema } from '@kbn/streams-schema'; -import { z } from '@kbn/zod'; -import { - DefinitionNotFound, - ForkConditionMissing, - IndexTemplateNotFound, - RootStreamImmutabilityException, - SecurityException, -} from '../../lib/streams/errors'; -import { MalformedStreamId } from '../../lib/streams/errors/malformed_stream_id'; -import { validateCondition } from '../../lib/streams/helpers/condition_fields'; -import { createServerRoute } from '../create_server_route'; - -export const forkStreamsRoute = createServerRoute({ - endpoint: 'POST /api/streams/{id}/_fork', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({ - path: z.object({ - id: z.string(), - }), - body: z.object({ stream: z.object({ name: z.string() }), condition: conditionSchema }), - }), - handler: async ({ - params, - logger, - request, - getScopedClients, - }): Promise<{ acknowledged: true }> => { - try { - if (!params.body.condition) { - throw new ForkConditionMissing('You must provide a condition to fork a stream'); - } - - validateCondition(params.body.condition); - - const { streamsClient } = await getScopedClients({ - request, - }); - - return await streamsClient.forkStream({ - parent: params.path.id, - condition: params.body.condition, - name: params.body.stream.name, - }); - } catch (e) { - if (e instanceof IndexTemplateNotFound || e instanceof DefinitionNotFound) { - throw notFound(e); - } - - if ( - e instanceof SecurityException || - e instanceof ForkConditionMissing || - e instanceof MalformedStreamId || - e instanceof RootStreamImmutabilityException - ) { - throw badRequest(e); - } - - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/list.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/list.ts deleted file mode 100644 index 89c6bcf6e3ad6..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/list.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { z } from '@kbn/zod'; -import { notFound, internal } from '@hapi/boom'; -import { ListStreamsResponse } from '@kbn/streams-schema'; -import { createServerRoute } from '../create_server_route'; -import { DefinitionNotFound } from '../../lib/streams/errors'; - -export const listStreamsRoute = createServerRoute({ - endpoint: 'GET /api/streams', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({}), - handler: async ({ request, getScopedClients }): Promise => { - try { - const { streamsClient } = await getScopedClients({ request }); - return { - streams: await streamsClient.listStreams(), - }; - } catch (e) { - if (e instanceof DefinitionNotFound) { - throw notFound(e); - } - - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/management/route.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/management/route.ts new file mode 100644 index 0000000000000..cc3ce94536261 --- /dev/null +++ b/x-pack/solutions/observability/plugins/streams/server/routes/streams/management/route.ts @@ -0,0 +1,213 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { z } from '@kbn/zod'; +import { badRequest, internal, notFound } from '@hapi/boom'; +import { conditionSchema, isCompleteCondition } from '@kbn/streams-schema'; +import { errors } from '@elastic/elasticsearch'; +import { + DefinitionNotFound, + ForkConditionMissing, + IndexTemplateNotFound, + RootStreamImmutabilityException, + SecurityException, +} from '../../../lib/streams/errors'; +import { createServerRoute } from '../../create_server_route'; +import { checkAccess } from '../../../lib/streams/stream_crud'; +import { MalformedStreamId } from '../../../lib/streams/errors/malformed_stream_id'; +import { validateCondition } from '../../../lib/streams/helpers/condition_fields'; +import { conditionToQueryDsl } from '../../../lib/streams/helpers/condition_to_query_dsl'; +import { getFields } from '../../../lib/streams/helpers/condition_fields'; +import { ResyncStreamsResponse } from '../../../lib/streams/client'; + +export const forkStreamsRoute = createServerRoute({ + endpoint: 'POST /api/streams/{id}/_fork', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ + id: z.string(), + }), + body: z.object({ stream: z.object({ name: z.string() }), condition: conditionSchema }), + }), + handler: async ({ params, request, getScopedClients }): Promise<{ acknowledged: true }> => { + try { + if (!params.body.condition) { + throw new ForkConditionMissing('You must provide a condition to fork a stream'); + } + + validateCondition(params.body.condition); + + const { streamsClient } = await getScopedClients({ + request, + }); + + return await streamsClient.forkStream({ + parent: params.path.id, + condition: params.body.condition, + name: params.body.stream.name, + }); + } catch (e) { + if (e instanceof IndexTemplateNotFound || e instanceof DefinitionNotFound) { + throw notFound(e); + } + + if ( + e instanceof SecurityException || + e instanceof ForkConditionMissing || + e instanceof MalformedStreamId || + e instanceof RootStreamImmutabilityException + ) { + throw badRequest(e); + } + + throw internal(e); + } + }, +}); + +export const resyncStreamsRoute = createServerRoute({ + endpoint: 'POST /api/streams/_resync', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({}), + handler: async ({ request, getScopedClients }): Promise => { + const { streamsClient } = await getScopedClients({ request }); + + return await streamsClient.resyncStreams(); + }, +}); + +export const getStreamsStatusRoute = createServerRoute({ + endpoint: 'GET /api/streams/_status', + options: { + access: 'internal', + }, + security: { + authz: { + requiredPrivileges: ['streams_read'], + }, + }, + handler: async ({ request, getScopedClients }): Promise<{ enabled: boolean }> => { + const { streamsClient } = await getScopedClients({ request }); + + return { + enabled: await streamsClient.isStreamsEnabled(), + }; + }, +}); + +export const sampleStreamRoute = createServerRoute({ + endpoint: 'POST /api/streams/{id}/_sample', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ id: z.string() }), + body: z.object({ + condition: z.optional(conditionSchema), + start: z.optional(z.number()), + end: z.optional(z.number()), + number: z.optional(z.number()), + }), + }), + handler: async ({ params, request, getScopedClients }): Promise<{ documents: unknown[] }> => { + try { + const { scopedClusterClient } = await getScopedClients({ request }); + + const { read } = await checkAccess({ id: params.path.id, scopedClusterClient }); + if (!read) { + throw new DefinitionNotFound(`Stream definition for ${params.path.id} not found.`); + } + const searchBody = { + query: { + bool: { + must: [ + isCompleteCondition(params.body.condition) + ? conditionToQueryDsl(params.body.condition) + : { match_all: {} }, + { + range: { + '@timestamp': { + gte: params.body.start, + lte: params.body.end, + format: 'epoch_millis', + }, + }, + }, + ], + }, + }, + // Conditions could be using fields which are not indexed or they could use it with other types than they are eventually mapped as. + // Because of this we can't rely on mapped fields to draw a sample, instead we need to use runtime fields to simulate what happens during + // ingest in the painless condition checks. + // This is less efficient than it could be - in some cases, these fields _are_ indexed with the right type and we could use them directly. + // This can be optimized in the future. + runtime_mappings: Object.fromEntries( + getFields(params.body.condition).map((field) => [ + field.name, + { type: field.type === 'string' ? 'keyword' : 'double' }, + ]) + ), + sort: [ + { + '@timestamp': { + order: 'desc', + }, + }, + ], + size: params.body.number, + }; + const results = await scopedClusterClient.asCurrentUser.search({ + index: params.path.id, + allow_no_indices: true, + ...searchBody, + }); + + return { documents: results.hits.hits.map((hit) => hit._source) }; + } catch (error) { + if (error instanceof errors.ResponseError && error.meta.statusCode === 404) { + throw notFound(error); + } + if (error instanceof DefinitionNotFound) { + throw notFound(error); + } + + throw internal(error); + } + }, +}); + +export const managementRoutes = { + ...forkStreamsRoute, + ...resyncStreamsRoute, + ...getStreamsStatusRoute, + ...sampleStreamRoute, +}; diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/processing/simulate.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/processing/route.ts similarity index 98% rename from x-pack/solutions/observability/plugins/streams/server/routes/streams/processing/simulate.ts rename to x-pack/solutions/observability/plugins/streams/server/routes/streams/processing/route.ts index fc19371b749ec..897c6f02ec804 100644 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/processing/simulate.ts +++ b/x-pack/solutions/observability/plugins/streams/server/routes/streams/processing/route.ts @@ -174,3 +174,7 @@ const isSuccessfulDocument = ( ): doc is Required => doc.processor_results?.every((processorSimulation) => processorSimulation.status === 'success') || false; + +export const processingRoutes = { + ...simulateProcessorRoute, +}; diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/read.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/read.ts deleted file mode 100644 index f5f4cc447582f..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/read.ts +++ /dev/null @@ -1,88 +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 { internal, notFound } from '@hapi/boom'; -import { - FieldDefinitionConfig, - ReadStreamDefinition, - WiredReadStreamDefinition, - isWiredStream, -} from '@kbn/streams-schema'; -import { z } from '@kbn/zod'; -import { isResponseError } from '@kbn/es-errors'; -import { DefinitionNotFound } from '../../lib/streams/errors'; -import { createServerRoute } from '../create_server_route'; -import { getDataStreamLifecycle } from '../../lib/streams/stream_crud'; - -export const readStreamRoute = createServerRoute({ - endpoint: 'GET /api/streams/{id}', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({ - path: z.object({ id: z.string() }), - }), - handler: async ({ params, request, getScopedClients }): Promise => { - try { - const { assetClient, streamsClient } = await getScopedClients({ - request, - }); - - const name = params.path.id; - - const [streamDefinition, dashboards, ancestors, dataStream] = await Promise.all([ - streamsClient.getStream(name), - assetClient.getAssetIds({ - entityId: name, - entityType: 'stream', - assetType: 'dashboard', - }), - streamsClient.getAncestors(name), - streamsClient.getDataStream(name), - ]); - - const lifecycle = getDataStreamLifecycle(dataStream); - - if (!isWiredStream(streamDefinition)) { - return { - ...streamDefinition, - lifecycle, - dashboards, - inherited_fields: {}, - }; - } - - const body: WiredReadStreamDefinition = { - ...streamDefinition, - dashboards, - lifecycle, - inherited_fields: ancestors.reduce((acc, def) => { - Object.entries(def.stream.ingest.wired.fields).forEach(([key, fieldDef]) => { - acc[key] = { ...fieldDef, from: def.name }; - }); - return acc; - // TODO: replace this with a proper type - }, {} as Record), - }; - - return body; - } catch (e) { - if (e instanceof DefinitionNotFound || (isResponseError(e) && e.statusCode === 404)) { - throw notFound(e); - } - - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/resync.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/resync.ts deleted file mode 100644 index 2bb36e53d9f98..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/resync.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { z } from '@kbn/zod'; -import { ResyncStreamsResponse } from '../../lib/streams/client'; -import { createServerRoute } from '../create_server_route'; - -export const resyncStreamsRoute = createServerRoute({ - endpoint: 'POST /api/streams/_resync', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({}), - handler: async ({ request, getScopedClients }): Promise => { - const { streamsClient } = await getScopedClients({ request }); - - return await streamsClient.resyncStreams(); - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/sample.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/sample.ts deleted file mode 100644 index 7716865d73bb9..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/sample.ts +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { z } from '@kbn/zod'; -import { notFound, internal } from '@hapi/boom'; -import { errors } from '@elastic/elasticsearch'; -import { conditionSchema, isCompleteCondition } from '@kbn/streams-schema'; -import { createServerRoute } from '../create_server_route'; -import { DefinitionNotFound } from '../../lib/streams/errors'; -import { checkAccess } from '../../lib/streams/stream_crud'; -import { conditionToQueryDsl } from '../../lib/streams/helpers/condition_to_query_dsl'; -import { getFields } from '../../lib/streams/helpers/condition_fields'; - -export const sampleStreamRoute = createServerRoute({ - endpoint: 'POST /api/streams/{id}/_sample', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({ - path: z.object({ id: z.string() }), - body: z.object({ - condition: z.optional(conditionSchema), - start: z.optional(z.number()), - end: z.optional(z.number()), - number: z.optional(z.number()), - }), - }), - handler: async ({ params, request, getScopedClients }): Promise<{ documents: unknown[] }> => { - try { - const { scopedClusterClient } = await getScopedClients({ request }); - - const { read } = await checkAccess({ id: params.path.id, scopedClusterClient }); - if (!read) { - throw new DefinitionNotFound(`Stream definition for ${params.path.id} not found.`); - } - const searchBody = { - query: { - bool: { - must: [ - isCompleteCondition(params.body.condition) - ? conditionToQueryDsl(params.body.condition) - : { match_all: {} }, - { - range: { - '@timestamp': { - gte: params.body.start, - lte: params.body.end, - format: 'epoch_millis', - }, - }, - }, - ], - }, - }, - // Conditions could be using fields which are not indexed or they could use it with other types than they are eventually mapped as. - // Because of this we can't rely on mapped fields to draw a sample, instead we need to use runtime fields to simulate what happens during - // ingest in the painless condition checks. - // This is less efficient than it could be - in some cases, these fields _are_ indexed with the right type and we could use them directly. - // This can be optimized in the future. - runtime_mappings: Object.fromEntries( - getFields(params.body.condition).map((field) => [ - field.name, - { type: field.type === 'string' ? 'keyword' : 'double' }, - ]) - ), - sort: [ - { - '@timestamp': { - order: 'desc', - }, - }, - ], - size: params.body.number, - }; - const results = await scopedClusterClient.asCurrentUser.search({ - index: params.path.id, - allow_no_indices: true, - ...searchBody, - }); - - return { documents: results.hits.hits.map((hit) => hit._source) }; - } catch (error) { - if (error instanceof errors.ResponseError && error.meta.statusCode === 404) { - throw notFound(error); - } - if (error instanceof DefinitionNotFound) { - throw notFound(error); - } - - throw internal(error); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/fields_simulation.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/route.ts similarity index 71% rename from x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/fields_simulation.ts rename to x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/route.ts index 140a5ce7a3b29..df665fbce8509 100644 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/fields_simulation.ts +++ b/x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/route.ts @@ -4,16 +4,92 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import { z } from '@kbn/zod'; -import { notFound, internal } from '@hapi/boom'; +import { internal, notFound } from '@hapi/boom'; import { getFlattenedObject } from '@kbn/std'; -import { fieldDefinitionConfigSchema } from '@kbn/streams-schema'; -import { createServerRoute } from '../../create_server_route'; +import { fieldDefinitionConfigSchema, isWiredStream } from '@kbn/streams-schema'; import { DefinitionNotFound } from '../../../lib/streams/errors'; import { checkAccess } from '../../../lib/streams/stream_crud'; +import { createServerRoute } from '../../create_server_route'; + +const UNMAPPED_SAMPLE_SIZE = 500; + +export const unmappedFieldsRoute = createServerRoute({ + endpoint: 'GET /api/streams/{id}/schema/unmapped_fields', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ id: z.string() }), + }), + handler: async ({ params, request, getScopedClients }): Promise<{ unmappedFields: string[] }> => { + try { + const { scopedClusterClient, streamsClient } = await getScopedClients({ request }); + + const searchBody = { + sort: [ + { + '@timestamp': { + order: 'desc', + }, + }, + ], + size: UNMAPPED_SAMPLE_SIZE, + }; + + const [streamDefinition, ancestors, results] = await Promise.all([ + streamsClient.getStream(params.path.id), + streamsClient.getAncestors(params.path.id), + scopedClusterClient.asCurrentUser.search({ + index: params.path.id, + ...searchBody, + }), + ]); + + const sourceFields = new Set(); + + results.hits.hits.forEach((hit) => { + Object.keys(getFlattenedObject(hit._source as Record)).forEach((field) => { + sourceFields.add(field); + }); + }); + + // Mapped fields from the stream's definition and inherited from ancestors + const mappedFields = new Set(); + + if (isWiredStream(streamDefinition)) { + Object.keys(streamDefinition.stream.ingest.wired.fields).forEach((name) => + mappedFields.add(name) + ); + } + + for (const ancestor of ancestors) { + Object.keys(ancestor.stream.ingest.wired.fields).forEach((name) => mappedFields.add(name)); + } -const SAMPLE_SIZE = 200; + const unmappedFields = Array.from(sourceFields) + .filter((field) => !mappedFields.has(field)) + .sort(); + + return { unmappedFields }; + } catch (e) { + if (e instanceof DefinitionNotFound) { + throw notFound(e); + } + + throw internal(e); + } + }, +}); + +const FIELD_SIMILATION_SAMPLE_SIZE = 200; export const schemaFieldsSimulationRoute = createServerRoute({ endpoint: 'POST /api/streams/{id}/schema/fields_simulation', @@ -71,7 +147,7 @@ export const schemaFieldsSimulationRoute = createServerRoute({ }, }, ], - size: SAMPLE_SIZE, + size: FIELD_SIMILATION_SAMPLE_SIZE, }; const sampleResults = await scopedClusterClient.asCurrentUser.search({ @@ -168,7 +244,7 @@ export const schemaFieldsSimulationRoute = createServerRoute({ }, }, ], - size: SAMPLE_SIZE, + size: FIELD_SIMILATION_SAMPLE_SIZE, fields: params.body.field_definitions.map((field) => field.name), _source: false, }; @@ -203,3 +279,8 @@ export const schemaFieldsSimulationRoute = createServerRoute({ } }, }); + +export const schemaRoutes = { + ...unmappedFieldsRoute, + ...schemaFieldsSimulationRoute, +}; diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/unmapped_fields.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/unmapped_fields.ts deleted file mode 100644 index 048b34fa73f4e..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/schema/unmapped_fields.ts +++ /dev/null @@ -1,90 +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 { z } from '@kbn/zod'; -import { internal, notFound } from '@hapi/boom'; -import { getFlattenedObject } from '@kbn/std'; -import { isWiredStream } from '@kbn/streams-schema'; -import { DefinitionNotFound } from '../../../lib/streams/errors'; -import { createServerRoute } from '../../create_server_route'; - -const SAMPLE_SIZE = 500; - -export const unmappedFieldsRoute = createServerRoute({ - endpoint: 'GET /api/streams/{id}/schema/unmapped_fields', - options: { - access: 'internal', - }, - security: { - authz: { - enabled: false, - reason: - 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', - }, - }, - params: z.object({ - path: z.object({ id: z.string() }), - }), - handler: async ({ params, request, getScopedClients }): Promise<{ unmappedFields: string[] }> => { - try { - const { scopedClusterClient, streamsClient } = await getScopedClients({ request }); - - const searchBody = { - sort: [ - { - '@timestamp': { - order: 'desc', - }, - }, - ], - size: SAMPLE_SIZE, - }; - - const [streamDefinition, ancestors, results] = await Promise.all([ - streamsClient.getStream(params.path.id), - streamsClient.getAncestors(params.path.id), - scopedClusterClient.asCurrentUser.search({ - index: params.path.id, - ...searchBody, - }), - ]); - - const sourceFields = new Set(); - - results.hits.hits.forEach((hit) => { - Object.keys(getFlattenedObject(hit._source as Record)).forEach((field) => { - sourceFields.add(field); - }); - }); - - // Mapped fields from the stream's definition and inherited from ancestors - const mappedFields = new Set(); - - if (isWiredStream(streamDefinition)) { - Object.keys(streamDefinition.stream.ingest.wired.fields).forEach((name) => - mappedFields.add(name) - ); - } - - for (const ancestor of ancestors) { - Object.keys(ancestor.stream.ingest.wired.fields).forEach((name) => mappedFields.add(name)); - } - - const unmappedFields = Array.from(sourceFields) - .filter((field) => !mappedFields.has(field)) - .sort(); - - return { unmappedFields }; - } catch (e) { - if (e instanceof DefinitionNotFound) { - throw notFound(e); - } - - throw internal(e); - } - }, -}); diff --git a/x-pack/solutions/observability/plugins/streams/server/routes/streams/settings.ts b/x-pack/solutions/observability/plugins/streams/server/routes/streams/settings.ts deleted file mode 100644 index 7edc35c695a26..0000000000000 --- a/x-pack/solutions/observability/plugins/streams/server/routes/streams/settings.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { createServerRoute } from '../create_server_route'; - -export const getStreamsStatusRoute = createServerRoute({ - endpoint: 'GET /api/streams/_status', - options: { - access: 'internal', - }, - security: { - authz: { - requiredPrivileges: ['streams_read'], - }, - }, - handler: async ({ request, getScopedClients }): Promise<{ enabled: boolean }> => { - const { streamsClient } = await getScopedClients({ request }); - - return { - enabled: await streamsClient.isStreamsEnabled(), - }; - }, -}); - -export const streamsStatusRoutes = { - ...getStreamsStatusRoute, -}; diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/condition_editor/index.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/condition_editor/index.tsx index 0b08ca68dc6f7..0b81072d661ab 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/condition_editor/index.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/condition_editor/index.tsx @@ -7,6 +7,7 @@ import { EuiBadge, + EuiButton, EuiFieldText, EuiFlexGroup, EuiFlexItem, @@ -14,6 +15,7 @@ import { EuiSelect, EuiSwitch, EuiText, + EuiToolTip, } from '@elastic/eui'; import { AndCondition, @@ -32,9 +34,6 @@ export function ConditionEditor(props: { readonly?: boolean; onConditionChange?: (condition: Condition) => void; }) { - if (!props.condition) { - return null; - } if (props.readonly) { return ( @@ -67,7 +66,7 @@ export function ConditionForm(props: { }, [syntaxEditor, props.condition]); return ( - + + + props.onConditionChange(undefined)} + disabled={props.condition === undefined} + > + {i18n.translate('xpack.streams.conditionEditor.disable', { + defaultMessage: 'Disable routing', + })} + + + + ) : !props.condition || 'operator' in props.condition ? ( + ) : ( - props.condition && - ('operator' in props.condition ? ( - - ) : ( -

{JSON.stringify(props.condition, null, 2)}
- )) +
{JSON.stringify(props.condition, null, 2)}
)} ); @@ -213,7 +227,13 @@ function FilterForm(props: { export function ConditionDisplay(props: { condition: Condition }) { if (!props.condition) { - return null; + return ( + <> + {i18n.translate('xpack.streams.streamDetailRouting.noCondition', { + defaultMessage: 'No condition, no documents will be routed', + })} + + ); } return ( <> diff --git a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_routing/index.tsx b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_routing/index.tsx index da7ce70a6c6b9..094811795ac4e 100644 --- a/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_routing/index.tsx +++ b/x-pack/solutions/observability/plugins/streams_app/public/components/stream_detail_routing/index.tsx @@ -906,25 +906,16 @@ function RoutingStreamEntry({ })} /> - {child.condition && ( - { - onChildChange({ - ...child, - condition, - }); - }} - /> - )} - {!child.condition && ( - - {i18n.translate('xpack.streams.streamDetailRouting.noCondition', { - defaultMessage: 'No condition, no documents will be routed', - })} - - )} + { + onChildChange({ + ...child, + condition, + }); + }} + /> ); } @@ -958,25 +949,16 @@ function NewRoutingStreamEntry({ }} /> - {child.condition && ( - { - onChildChange({ - ...child, - condition, - }); - }} - /> - )} - {!child.condition && ( - - {i18n.translate('xpack.streams.streamDetailRouting.noCondition', { - defaultMessage: 'No condition, no documents will be routed', - })} - - )} + { + onChildChange({ + ...child, + condition, + }); + }} + /> ); diff --git a/x-pack/solutions/observability/plugins/synthetics/server/routes/index.ts b/x-pack/solutions/observability/plugins/synthetics/server/routes/index.ts index f9d178befeb46..78d68672e3c61 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/routes/index.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/routes/index.ts @@ -36,15 +36,15 @@ import { getSyntheticsEnablementRoute, } from './synthetics_service/enablement'; import { getSyntheticsMonitorRoute } from './monitor_cruds/get_monitor'; -import { deleteSyntheticsMonitorProjectRoute } from './monitor_cruds/delete_monitor_project'; -import { getSyntheticsProjectMonitorsRoute } from './monitor_cruds/get_monitor_project'; +import { deleteSyntheticsMonitorProjectRoute } from './monitor_cruds/project_monitor/delete_monitor_project'; +import { getSyntheticsProjectMonitorsRoute } from './monitor_cruds/project_monitor/get_monitor_project'; import { runOnceSyntheticsMonitorRoute } from './synthetics_service/run_once_monitor'; import { getServiceAllowedRoute } from './synthetics_service/get_service_allowed'; import { testNowMonitorRoute } from './synthetics_service/test_now_monitor'; import { installIndexTemplatesRoute } from './synthetics_service/install_index_templates'; import { editSyntheticsMonitorRoute } from './monitor_cruds/edit_monitor'; import { addSyntheticsMonitorRoute } from './monitor_cruds/add_monitor'; -import { addSyntheticsProjectMonitorRoute } from './monitor_cruds/add_monitor_project'; +import { addSyntheticsProjectMonitorRoute } from './monitor_cruds/project_monitor/add_monitor_project'; import { syntheticsGetPingsRoute, syntheticsGetPingHeatmapRoute } from './pings'; import { createGetCurrentStatusRoute } from './overview_status/overview_status'; import { getHasIntegrationMonitorsRoute } from './fleet/get_has_integration_monitors'; diff --git a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts index 2b815313c79c9..5c6757486ec88 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts @@ -11,7 +11,7 @@ import { isEmpty } from 'lodash'; import { invalidOriginError } from './add_monitor'; import { InvalidLocationError } from '../../synthetics_service/project_monitor/normalizers/common_fields'; import { AddEditMonitorAPI, CreateMonitorPayLoad } from './add_monitor/add_monitor_api'; -import { ELASTIC_MANAGED_LOCATIONS_DISABLED } from './add_monitor_project'; +import { ELASTIC_MANAGED_LOCATIONS_DISABLED } from './project_monitor/add_monitor_project'; import { getDecryptedMonitor } from '../../saved_objects/synthetics_monitor'; import { getPrivateLocations } from '../../synthetics_service/get_private_locations'; import { mergeSourceMonitor } from './formatters/saved_object_to_monitor'; diff --git a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts index 53cd56fc24bf6..8e4f06f904dc3 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts @@ -7,7 +7,7 @@ import { schema } from '@kbn/config-schema'; import { SecurityCreateApiKeyResponse } from '@elastic/elasticsearch/lib/api/types'; import { IKibanaResponse } from '@kbn/core-http-server'; -import { ELASTIC_MANAGED_LOCATIONS_DISABLED } from './add_monitor_project'; +import { ELASTIC_MANAGED_LOCATIONS_DISABLED } from './project_monitor/add_monitor_project'; import { SyntheticsRestApiRouteFactory } from '../types'; import { generateProjectAPIKey } from '../../synthetics_service/get_api_key'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; diff --git a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/add_monitor_project.ts similarity index 71% rename from x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts rename to x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/add_monitor_project.ts index db8fbdd661f76..ba872eeb403c8 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/add_monitor_project.ts @@ -7,14 +7,14 @@ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; -import { validateSpaceId } from './services/validate_space_id'; -import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; -import { ProjectMonitor } from '../../../common/runtime_types'; +import { validateSpaceId } from '../services/validate_space_id'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../../types'; +import { ProjectMonitor } from '../../../../common/runtime_types'; -import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { ProjectMonitorFormatter } from '../../synthetics_service/project_monitor/project_monitor_formatter'; +import { SYNTHETICS_API_URLS } from '../../../../common/constants'; +import { ProjectMonitorFormatter } from '../../../synthetics_service/project_monitor/project_monitor_formatter'; -const MAX_PAYLOAD_SIZE = 1048576 * 50; // 50MiB +const MAX_PAYLOAD_SIZE = 1048576 * 100; // 50MiB export const addSyntheticsProjectMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'PUT', @@ -37,19 +37,29 @@ export const addSyntheticsProjectMonitorRoute: SyntheticsRestApiRouteFactory = ( const { projectName } = request.params; const decodedProjectName = decodeURI(projectName); const monitors = (request.body?.monitors as ProjectMonitor[]) || []; + const lightWeightMonitors = monitors.filter((monitor) => monitor.type !== 'browser'); + const browserMonitors = monitors.filter((monitor) => monitor.type === 'browser'); - if (monitors.length > 250) { + if (browserMonitors.length > 250) { return response.badRequest({ body: { message: REQUEST_TOO_LARGE, }, }); } + if (lightWeightMonitors.length > 1500) { + return response.badRequest({ + body: { + message: REQUEST_TOO_LARGE_LIGHTWEIGHT, + }, + }); + } try { - const spaceId = await validateSpaceId(routeContext); - - const permissionError = await validatePermissions(routeContext, monitors); + const [spaceId, permissionError] = await Promise.all([ + validateSpaceId(routeContext), + validatePermissions(routeContext, monitors), + ]); if (permissionError) { return response.forbidden({ body: { message: permissionError } }); @@ -84,11 +94,19 @@ export const addSyntheticsProjectMonitorRoute: SyntheticsRestApiRouteFactory = ( }, }); -export const REQUEST_TOO_LARGE = i18n.translate('xpack.synthetics.server.project.delete.toolarge', { +export const REQUEST_TOO_LARGE = i18n.translate('xpack.synthetics.server.project.delete.request', { defaultMessage: - 'Delete request payload is too large. Please send a max of 250 monitors to delete per request', + 'Request payload is too large. Please send a max of 250 browser monitors per request.', }); +export const REQUEST_TOO_LARGE_LIGHTWEIGHT = i18n.translate( + 'xpack.synthetics.server.project.delete.request.lightweight', + { + defaultMessage: + 'Request payload is too large. Please send a max of 1500 lightweight monitors per request.', + } +); + export const validatePermissions = async ( { server, response, request }: RouteContext, projectMonitors: ProjectMonitor[] diff --git a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/delete_monitor_project.ts similarity index 69% rename from x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts rename to x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/delete_monitor_project.ts index a56f66842a703..205b2edad4862 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/delete_monitor_project.ts @@ -6,13 +6,13 @@ */ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; -import { DeleteMonitorAPI } from './services/delete_monitor_api'; -import { SyntheticsRestApiRouteFactory } from '../types'; -import { syntheticsMonitorType } from '../../../common/types/saved_objects'; -import { ConfigKey } from '../../../common/runtime_types'; -import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { getMonitors, getSavedObjectKqlFilter } from '../common'; -import { validateSpaceId } from './services/validate_space_id'; +import { DeleteMonitorAPI } from '../services/delete_monitor_api'; +import { SyntheticsRestApiRouteFactory } from '../../types'; +import { syntheticsMonitorType } from '../../../../common/types/saved_objects'; +import { ConfigKey } from '../../../../common/runtime_types'; +import { SYNTHETICS_API_URLS } from '../../../../common/constants'; +import { getMonitors, getSavedObjectKqlFilter } from '../../common'; +import { validateSpaceId } from '../services/validate_space_id'; export const deleteSyntheticsMonitorProjectRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'DELETE', @@ -30,10 +30,10 @@ export const deleteSyntheticsMonitorProjectRoute: SyntheticsRestApiRouteFactory const { projectName } = request.params; const { monitors: monitorsToDelete } = request.body; const decodedProjectName = decodeURI(projectName); - if (monitorsToDelete.length > 250) { + if (monitorsToDelete.length > 500) { return response.badRequest({ body: { - message: REQUEST_TOO_LARGE, + message: REQUEST_TOO_LARGE_DELETE, }, }); } @@ -70,7 +70,10 @@ export const deleteSyntheticsMonitorProjectRoute: SyntheticsRestApiRouteFactory }, }); -export const REQUEST_TOO_LARGE = i18n.translate('xpack.synthetics.server.project.delete.toolarge', { - defaultMessage: - 'Delete request payload is too large. Please send a max of 250 monitors to delete per request', -}); +export const REQUEST_TOO_LARGE_DELETE = i18n.translate( + 'xpack.synthetics.server.project.delete.tooLarge', + { + defaultMessage: + 'Delete request payload is too large. Please send a max of 500 monitors to delete per request', + } +); diff --git a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/get_monitor_project.ts b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/get_monitor_project.ts similarity index 87% rename from x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/get_monitor_project.ts rename to x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/get_monitor_project.ts index ac55807f9412f..c0438f8200f13 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/get_monitor_project.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/routes/monitor_cruds/project_monitor/get_monitor_project.ts @@ -5,11 +5,11 @@ * 2.0. */ import { schema } from '@kbn/config-schema'; -import { SyntheticsRestApiRouteFactory } from '../types'; -import { syntheticsMonitorType } from '../../../common/types/saved_objects'; -import { ConfigKey } from '../../../common/runtime_types'; -import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { getMonitors } from '../common'; +import { SyntheticsRestApiRouteFactory } from '../../types'; +import { syntheticsMonitorType } from '../../../../common/types/saved_objects'; +import { ConfigKey } from '../../../../common/runtime_types'; +import { SYNTHETICS_API_URLS } from '../../../../common/constants'; +import { getMonitors } from '../../common'; const querySchema = schema.object({ search_after: schema.maybe(schema.string()), diff --git a/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts b/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts index 1fe5d30048418..d6cd29545c08e 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts @@ -148,7 +148,7 @@ export class ProjectMonitorFormatter { (monitorObj) => monitorObj[ConfigKey.JOURNEY_ID] === monitor.id ); - const normM = await this.validateProjectMonitor({ + const normM = this.validateProjectMonitor({ monitor, publicLocations: this.publicLocations, privateLocations: this.privateLocations, @@ -189,7 +189,7 @@ export class ProjectMonitorFormatter { ]); }; - validateProjectMonitor = async ({ + validateProjectMonitor = ({ monitor, publicLocations, privateLocations, diff --git a/x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts b/x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts index 91f859545600b..82c0f096c4f30 100644 --- a/x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts +++ b/x-pack/solutions/observability/plugins/synthetics/server/telemetry/sender.test.ts @@ -19,6 +19,7 @@ import { MONITOR_UPDATE_CHANNEL } from './constants'; import { TelemetryEventsSender } from './sender'; import { LicenseGetResponse } from '@elastic/elasticsearch/lib/api/types'; +import { Observable } from 'rxjs'; jest.mock('axios', () => { return { @@ -87,6 +88,7 @@ describe('TelemetryEventsSender', () => { it('should send events when due', async () => { sender['telemetryStart'] = { getIsOptedIn: jest.fn(async () => true), + isOptedIn$: new Observable(), }; sender['telemetrySetup'] = { getTelemetryUrl: jest.fn( @@ -108,6 +110,7 @@ describe('TelemetryEventsSender', () => { it("shouldn't send when telemetry is disabled", async () => { const telemetryStart = { getIsOptedIn: jest.fn(async () => false), + isOptedIn$: new Observable(), }; sender['telemetryStart'] = telemetryStart; @@ -122,6 +125,7 @@ describe('TelemetryEventsSender', () => { it('should send events to separate channels', async () => { sender['telemetryStart'] = { getIsOptedIn: jest.fn(async () => true), + isOptedIn$: new Observable(), }; sender['telemetrySetup'] = { getTelemetryUrl: jest.fn( diff --git a/x-pack/solutions/search/plugins/enterprise_search/common/constants.ts b/x-pack/solutions/search/plugins/enterprise_search/common/constants.ts index 78992ebcfc552..03fb169aa3670 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/common/constants.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/common/constants.ts @@ -16,6 +16,8 @@ import { SEARCH_VECTOR_SEARCH, SEARCH_SEMANTIC_SEARCH, SEARCH_AI_SEARCH, + SEARCH_INDICES, + SEARCH_INDICES_START, } from '@kbn/deeplinks-search'; import { i18n } from '@kbn/i18n'; @@ -30,6 +32,8 @@ export const ENTERPRISE_SEARCH_PRODUCT_NAME = i18n.translate('xpack.enterpriseSe defaultMessage: 'Enterprise Search', }); +export { SEARCH_INDICES_START, SEARCH_INDICES }; + export const ENTERPRISE_SEARCH_OVERVIEW_PLUGIN = { ID: ENTERPRISE_SEARCH_APP_ID, NAME: SEARCH_PRODUCT_NAME, diff --git a/x-pack/solutions/search/plugins/enterprise_search/kibana.jsonc b/x-pack/solutions/search/plugins/enterprise_search/kibana.jsonc index f8bee4b82578f..a0cde9db359d5 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/kibana.jsonc +++ b/x-pack/solutions/search/plugins/enterprise_search/kibana.jsonc @@ -43,7 +43,8 @@ "cloud", "lens", "share", - "fleet" + "fleet", + "search_indices" ], "requiredBundles": ["kibanaReact"] } diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/search_indices.mock.ts b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/search_indices.mock.ts index 6312cd1da4437..2bf78eab15b3d 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/search_indices.mock.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/search_indices.mock.ts @@ -60,6 +60,7 @@ export const indices: ElasticsearchIndexWithIngestion[] = [ name: '', }, }, + deleted: false, description: null, error: null, features: null, @@ -189,6 +190,7 @@ export const indices: ElasticsearchIndexWithIngestion[] = [ name: '', }, }, + deleted: false, description: null, error: null, features: null, diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/view_index.mock.ts b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/view_index.mock.ts index c4abfbd2fc6dd..9b6ca60e2c749 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/view_index.mock.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/__mocks__/view_index.mock.ts @@ -66,6 +66,7 @@ export const connectorIndex: ConnectorViewIndex = { name: '', }, }, + deleted: false, description: null, error: null, features: null, @@ -199,6 +200,7 @@ export const crawlerIndex: CrawlerViewIndex = { name: '', }, }, + deleted: false, description: null, error: null, features: null, diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/indices/indices_nav.test.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/indices/indices_nav.test.tsx deleted file mode 100644 index d7ac65e07f284..0000000000000 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/indices/indices_nav.test.tsx +++ /dev/null @@ -1,181 +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 { setMockValues } from '../../../../__mocks__/kea_logic'; -import { mockUseRouteMatch, mockUseParams } from '../../../../__mocks__/react_router'; - -import { isConnectorIndex, isCrawlerIndex } from '../../../utils/indices'; - -import { mockIndexNameValues } from '../_mocks_/index_name_logic.mock'; - -jest.mock('../../../../shared/layout', () => ({ - generateNavLink: jest.fn(({ to }) => ({ href: to })), -})); -jest.mock('../../../utils/indices'); - -import { useIndicesNav } from './indices_nav'; - -describe('useIndicesNav', () => { - beforeEach(() => { - setMockValues(mockIndexNameValues); - mockUseRouteMatch.mockReturnValue(true); - mockUseParams.mockReturnValue({ indexName: 'index-name' }); - }); - - describe('returns empty', () => { - it('does not return index nav items if not on an index route', () => { - mockUseRouteMatch.mockReturnValueOnce(false); - expect(useIndicesNav()).toBeUndefined(); - }); - - it('does not return index nav items if index name is missing', () => { - mockUseParams.mockReturnValue({ indexName: '' }); - expect(useIndicesNav()).toBeUndefined(); - }); - }); - - describe('returns an array of EUI side nav items', () => { - const BASE_NAV = [ - { - id: 'indexName', - name: 'INDEX-NAME', - 'data-test-subj': 'IndexLabel', - href: '/search_indices/index-name', - items: [ - { - id: 'overview', - name: 'Overview', - href: '/search_indices/index-name/overview', - 'data-test-subj': 'IndexOverviewLink', - }, - { - id: 'documents', - name: 'Documents', - href: '/search_indices/index-name/documents', - 'data-test-subj': 'IndexDocumentsLink', - }, - { - id: 'index_mappings', - name: 'Index mappings', - href: '/search_indices/index-name/index_mappings', - 'data-test-subj': 'IndexIndexMappingsLink', - }, - ], - }, - ]; - - it('always returns an index label, overview, documents, index mapping link', () => { - expect(useIndicesNav()).toEqual(BASE_NAV); - }); - - it('returns pipelines with default navs when hasDefaultIngestPipeline is true', () => { - setMockValues({ - ...mockIndexNameValues, - productFeatures: { hasDefaultIngestPipeline: true }, - }); - - const pipelineItem = { - id: 'pipelines', - name: 'Pipelines', - href: '/search_indices/index-name/pipelines', - 'data-test-subj': 'IndexPipelineLink', - }; - const baseNavWithPipelines = BASE_NAV.map((navItem) => ({ - ...navItem, - items: [...navItem.items, pipelineItem], - })); - - expect(useIndicesNav()).toEqual(baseNavWithPipelines); - }); - - describe('connectors nav', () => { - it('returns connectors nav with default navs when isConnectorIndex is true', () => { - jest.mocked(isConnectorIndex).mockReturnValueOnce(true); - - const configuration = { - 'data-test-subj': 'IndexConnectorsConfigurationLink', - id: 'connectors_configuration', - name: 'Configuration', - href: '/search_indices/index-name/configuration', - }; - const scheduling = { - 'data-test-subj': 'IndexSchedulingLink', - id: 'scheduling', - name: 'Scheduling', - href: '/search_indices/index-name/scheduling', - }; - const baseNavWithConnectors = BASE_NAV.map((navItem) => ({ - ...navItem, - items: [...navItem.items, configuration, scheduling], - })); - - expect(useIndicesNav()).toEqual(baseNavWithConnectors); - }); - - it('returns connectors nav with sync rules with default navs when isConnectorIndex is true and hasFilteringFeature is true', () => { - jest.mocked(isConnectorIndex).mockReturnValueOnce(true); - setMockValues({ ...mockIndexNameValues, hasFilteringFeature: true }); - - const configuration = { - 'data-test-subj': 'IndexConnectorsConfigurationLink', - id: 'connectors_configuration', - name: 'Configuration', - href: '/search_indices/index-name/configuration', - }; - const syncRules = { - 'data-test-subj': 'IndexSyncRulesLink', - id: 'syncRules', - name: 'Sync rules', - href: '/search_indices/index-name/sync_rules', - }; - const scheduling = { - 'data-test-subj': 'IndexSchedulingLink', - id: 'scheduling', - name: 'Scheduling', - href: '/search_indices/index-name/scheduling', - }; - const baseNavWithConnectors = BASE_NAV.map((navItem) => ({ - ...navItem, - items: [...navItem.items, configuration, syncRules, scheduling], - })); - - expect(useIndicesNav()).toEqual(baseNavWithConnectors); - }); - }); - - describe('crawlers nav', () => { - it('returns crawlers nav with default navs when isCrawlerIndex is true', () => { - jest.mocked(isCrawlerIndex).mockReturnValueOnce(true); - - const domainManagement = { - 'data-test-subj': 'IndexDomainManagementLink', - id: 'domain_management', - name: 'Manage Domains', - href: '/search_indices/index-name/domain_management', - }; - const configuration = { - 'data-test-subj': 'IndexCrawlerConfigurationLink', - id: 'crawler_configuration', - name: 'Configuration', - href: '/search_indices/index-name/crawler_configuration', - }; - const scheduling = { - 'data-test-subj': 'IndexCrawlerSchedulingLink', - id: 'crawler_scheduling', - name: 'Scheduling', - href: '/search_indices/index-name/scheduling', - }; - const baseNavWithCrawlers = BASE_NAV.map((navItem) => ({ - ...navItem, - items: [...navItem.items, domainManagement, configuration, scheduling], - })); - - expect(useIndicesNav()).toEqual(baseNavWithCrawlers); - }); - }); - }); -}); diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/indices/indices_nav.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/indices/indices_nav.tsx deleted file mode 100644 index c3e754bdd9b62..0000000000000 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/indices/indices_nav.tsx +++ /dev/null @@ -1,223 +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 { useParams, useRouteMatch } from 'react-router-dom'; - -import { useValues } from 'kea'; - -import { EuiSideNavItemType } from '@elastic/eui'; - -import { i18n } from '@kbn/i18n'; - -import { generateEncodedPath } from '../../../../shared/encode_path_params'; -import { KibanaLogic } from '../../../../shared/kibana'; -import { generateNavLink } from '../../../../shared/layout'; -import { SEARCH_INDEX_PATH, SEARCH_INDEX_TAB_PATH } from '../../../routes'; -import { isConnectorIndex, isCrawlerIndex } from '../../../utils/indices'; -import { IndexViewLogic } from '../index_view_logic'; - -import { SearchIndexTabId } from '../search_index'; - -export const useIndicesNav = () => { - const isIndexRoute = !!useRouteMatch(SEARCH_INDEX_PATH); - const { indexName } = useParams<{ indexName: string }>(); - - const { hasFilteringFeature, index } = useValues(IndexViewLogic); - const { - productFeatures: { hasDefaultIngestPipeline }, - } = useValues(KibanaLogic); - - if (!indexName || !isIndexRoute) return undefined; - - const navItems: Array> = [ - { - 'data-test-subj': 'IndexLabel', - id: 'indexName', - name: indexName.toUpperCase(), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_PATH, { - indexName, - }), - }), - items: [ - { - 'data-test-subj': 'IndexOverviewLink', - id: 'overview', - name: i18n.translate('xpack.enterpriseSearch.nav.searchIndicesTitle.nav.overviewTitle', { - defaultMessage: 'Overview', - }), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.OVERVIEW, - }), - }), - }, - { - 'data-test-subj': 'IndexDocumentsLink', - id: 'documents', - name: i18n.translate('xpack.enterpriseSearch.nav.searchIndicesTitle.nav.documentsTitle', { - defaultMessage: 'Documents', - }), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.DOCUMENTS, - }), - }), - }, - { - 'data-test-subj': 'IndexIndexMappingsLink', - id: 'index_mappings', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.indexMappingsTitle', - { - defaultMessage: 'Index mappings', - } - ), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.INDEX_MAPPINGS, - }), - }), - }, - ...(isConnectorIndex(index) - ? [ - { - 'data-test-subj': 'IndexConnectorsConfigurationLink', - id: 'connectors_configuration', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.connectorsConfigurationLabel', - { - defaultMessage: 'Configuration', - } - ), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.CONFIGURATION, - }), - }), - }, - ...(hasFilteringFeature - ? [ - { - 'data-test-subj': 'IndexSyncRulesLink', - id: 'syncRules', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.syncRulesLabel', - { - defaultMessage: 'Sync rules', - } - ), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.SYNC_RULES, - }), - }), - }, - ] - : []), - { - 'data-test-subj': 'IndexSchedulingLink', - id: 'scheduling', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.schedulingTitle', - { - defaultMessage: 'Scheduling', - } - ), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.SCHEDULING, - }), - }), - }, - ] - : []), - ...(isCrawlerIndex(index) - ? [ - { - 'data-test-subj': 'IndexDomainManagementLink', - id: 'domain_management', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.domainManagementLabel', - { - defaultMessage: 'Manage Domains', - } - ), - ...generateNavLink({ - shouldShowActiveForSubroutes: true, - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.DOMAIN_MANAGEMENT, - }), - }), - }, - { - 'data-test-subj': 'IndexCrawlerConfigurationLink', - id: 'crawler_configuration', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerConfigurationLabel', - { - defaultMessage: 'Configuration', - } - ), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.CRAWLER_CONFIGURATION, - }), - }), - }, - { - 'data-test-subj': 'IndexCrawlerSchedulingLink', - id: 'crawler_scheduling', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.crawlerSchedulingLabel', - { - defaultMessage: 'Scheduling', - } - ), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.SCHEDULING, - }), - }), - }, - ] - : []), - ...(hasDefaultIngestPipeline - ? [ - { - 'data-test-subj': 'IndexPipelineLink', - id: 'pipelines', - name: i18n.translate( - 'xpack.enterpriseSearch.nav.searchIndicesTitle.nav.pipelinesLabel', - { - defaultMessage: 'Pipelines', - } - ), - ...generateNavLink({ - to: generateEncodedPath(SEARCH_INDEX_TAB_PATH, { - indexName, - tabId: SearchIndexTabId.PIPELINES, - }), - }), - }, - ] - : []), - ], - }, - ]; - - return navItems; -}; diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.test.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.test.tsx deleted file mode 100644 index e5d64f960a22b..0000000000000 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.test.tsx +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import '../../../__mocks__/shallow_useeffect.mock'; -import { setMockValues } from '../../../__mocks__/kea_logic'; - -import React from 'react'; - -const mockUseIndicesNav = jest.fn().mockReturnValue([]); - -jest.mock('react-router-dom', () => ({ - useParams: () => ({}), -})); - -jest.mock('./indices/indices_nav', () => ({ - useIndicesNav: (...args: any[]) => mockUseIndicesNav(...args), -})); - -import { shallow } from 'enzyme'; - -import { SearchIndex } from './search_index'; - -const mockValues = { - hasFilteringFeature: false, - updateSideNavDefinition: jest.fn(), -}; - -describe('SearchIndex', () => { - it('updates the side nav dynamic links', async () => { - const updateSideNavDefinition = jest.fn(); - - setMockValues({ ...mockValues, updateSideNavDefinition }); - - const indicesItems = [{ foo: 'bar' }]; - mockUseIndicesNav.mockReturnValueOnce(indicesItems); - - shallow(); - - expect(updateSideNavDefinition).toHaveBeenCalledWith({ - indices: indicesItems, - }); - }); -}); diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx index e8876a7c56818..4068b35c89283 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx @@ -42,7 +42,6 @@ import { IndexError } from './index_error'; import { SearchIndexIndexMappings } from './index_mappings'; import { IndexNameLogic } from './index_name_logic'; import { IndexViewLogic } from './index_view_logic'; -import { useIndicesNav } from './indices/indices_nav'; import { SearchIndexOverview } from './overview'; import { SearchIndexPipelines } from './pipelines/pipelines'; @@ -82,8 +81,6 @@ export const SearchIndex: React.FC = () => { updateSideNavDefinition, } = useValues(KibanaLogic); - const indicesItems = useIndicesNav(); - useEffect(() => { const subscription = guidedOnboarding?.guidedOnboardingApi ?.isGuideStepActive$('appSearch', 'add_data') @@ -117,11 +114,6 @@ export const SearchIndex: React.FC = () => { return () => subscription?.unsubscribe(); }, [guidedOnboarding, index?.count]); - useEffect(() => { - // We update the new side nav definition with the selected indices items - updateSideNavDefinition({ indices: indicesItems }); - }, [indicesItems, updateSideNavDefinition]); - useEffect(() => { return () => { updateSideNavDefinition({ indices: undefined }); diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/header_actions/syncs_logic.test.ts b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/header_actions/syncs_logic.test.ts index 88f1f2663a951..52f683906155f 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/header_actions/syncs_logic.test.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/header_actions/syncs_logic.test.ts @@ -40,6 +40,7 @@ const mockConnector: Connector = { }, }, custom_scheduling: {}, + deleted: false, description: 'test', error: null, features: { diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/utils/connector_helpers.test.ts b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/utils/connector_helpers.test.ts index f3187fbea88ee..9a6c5e132137a 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/utils/connector_helpers.test.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/enterprise_search_content/utils/connector_helpers.test.ts @@ -14,16 +14,17 @@ const mockConnector: Connector = { api_key_secret_id: '', configuration: {}, custom_scheduling: {}, + deleted: false, + description: null, + error: null, features: { - incremental_sync: { + document_level_security: { enabled: true, }, - document_level_security: { + incremental_sync: { enabled: true, }, }, - description: null, - error: null, filtering: [], id: '', index_name: null, diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx index 52cd6fe664adc..7e376197ed702 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx @@ -49,8 +49,7 @@ export const buildBaseClassicNavItems = (): ClassicNavItem[] => { { 'data-test-subj': 'searchSideNav-Indices', deepLink: { - link: 'enterpriseSearchContent:searchIndices', - shouldShowActiveForSubroutes: true, + link: 'management:index_management', }, id: 'search_indices', }, diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx index bee329b62953a..cbef9fbe96f45 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx @@ -9,10 +9,6 @@ jest.mock('./nav_link_helpers', () => ({ generateNavLink: jest.fn(({ to, items }) => ({ href: to, items })), })); -jest.mock('../../enterprise_search_content/components/search_index/indices/indices_nav', () => ({ - useIndicesNav: () => [], -})); - import { setMockValues, mockKibanaValues } from '../../__mocks__/kea_logic'; import { renderHook } from '@testing-library/react'; @@ -40,10 +36,10 @@ const baseNavItems = [ items: [ { 'data-test-subj': 'searchSideNav-Indices', - href: '/app/elasticsearch/content/search_indices', + href: '/app/management/data/index_management/', id: 'search_indices', - items: [], - name: 'Indices', + items: undefined, + name: 'Index Management', }, { 'data-test-subj': 'searchSideNav-Connectors', @@ -147,9 +143,9 @@ const mockNavLinks = [ url: '/app/elasticsearch/overview', }, { - id: 'enterpriseSearchContent:searchIndices', - title: 'Indices', - url: '/app/elasticsearch/content/search_indices', + id: 'management:index_management', + title: 'Index Management', + url: '/app/management/data/index_management/', }, { id: 'enterpriseSearchContent:connectors', diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.tsx index d122cf788fd4f..eed071449be72 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.tsx +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/nav.tsx @@ -15,7 +15,6 @@ import { i18n } from '@kbn/i18n'; import { ANALYTICS_PLUGIN, APPLICATIONS_PLUGIN } from '../../../../common/constants'; import { SEARCH_APPLICATIONS_PATH, SearchApplicationViewTabs } from '../../applications/routes'; -import { useIndicesNav } from '../../enterprise_search_content/components/search_index/indices/indices_nav'; import { KibanaLogic } from '../kibana'; @@ -32,8 +31,6 @@ import { generateNavLink } from './nav_link_helpers'; export const useEnterpriseSearchNav = (alwaysReturn = false) => { const { isSidebarEnabled, getNavLinks } = useValues(KibanaLogic); - const indicesNavItems = useIndicesNav(); - const navItems: Array> = useMemo(() => { const baseNavItems = buildBaseClassicNavItems(); const deepLinks = getNavLinks().reduce((links, link) => { @@ -41,8 +38,8 @@ export const useEnterpriseSearchNav = (alwaysReturn = false) => { return links; }, {} as Record); - return generateSideNavItems(baseNavItems, deepLinks, { search_indices: indicesNavItems }); - }, [indicesNavItems]); + return generateSideNavItems(baseNavItems, deepLinks); + }, []); if (!isSidebarEnabled && !alwaysReturn) return undefined; diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts b/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts index 3525a546c0676..caecfd872a9a0 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts @@ -18,7 +18,6 @@ import { i18n } from '@kbn/i18n'; import type { AddSolutionNavigationArg } from '@kbn/navigation-plugin/public'; import { SEARCH_APPLICATIONS_PATH } from './applications/applications/routes'; -import { SEARCH_INDICES_PATH } from './applications/enterprise_search_content/routes'; export interface DynamicSideNavItems { collections?: Array>; @@ -77,7 +76,7 @@ export const getNavigationTreeDefinition = ({ id: 'es', navigationTree$: dynamicItems$.pipe( debounceTime(10), - map(({ indices, searchApps, collections }) => { + map(({ searchApps, collections }) => { const navTree: NavigationTreeDefinition = { body: [ { @@ -116,27 +115,16 @@ export const getNavigationTreeDefinition = ({ { children: [ { + breadcrumbStatus: + 'hidden' /* management sub-pages set their breadcrumbs themselves */, getIsActive: ({ pathNameSerialized, prepend }) => { - const someSubItemSelected = indices?.some((index) => - index.items?.some((item) => item.isSelected) - ); - - if (someSubItemSelected) return false; - return ( - pathNameSerialized === - prepend(`/app/elasticsearch/content${SEARCH_INDICES_PATH}`) + pathNameSerialized.startsWith( + prepend('/app/management/data/index_management/') + ) || pathNameSerialized.startsWith(prepend('/app/elasticsearch/indices')) ); }, - link: 'enterpriseSearchContent:searchIndices', - renderAs: 'item', - ...(indices - ? { - children: indices.map(euiItemTypeToNodeDefinition), - isCollapsible: false, - renderAs: 'accordion', - } - : {}), + link: 'management:index_management', }, { link: 'enterpriseSearchContent:connectors' }, { link: 'enterpriseSearchContent:webCrawlers' }, diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/plugin.ts b/x-pack/solutions/search/plugins/enterprise_search/public/plugin.ts index a630b9464fba8..e71a548135eb1 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/plugin.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/plugin.ts @@ -57,11 +57,7 @@ import { ClientConfigType, InitialAppData } from '../common/types'; import { hasEnterpriseLicense } from '../common/utils/licensing'; import { SEARCH_APPLICATIONS_PATH } from './applications/applications/routes'; -import { - CONNECTORS_PATH, - SEARCH_INDICES_PATH, - CRAWLERS_PATH, -} from './applications/enterprise_search_content/routes'; +import { CONNECTORS_PATH, CRAWLERS_PATH } from './applications/enterprise_search_content/routes'; import { docLinks } from './applications/shared/doc_links'; import type { DynamicSideNavItems } from './navigation_tree'; @@ -117,13 +113,6 @@ const contentLinks: AppDeepLink[] = [ defaultMessage: 'Connectors', }), }, - { - id: 'searchIndices', - path: `/${SEARCH_INDICES_PATH}`, - title: i18n.translate('xpack.enterpriseSearch.navigation.contentIndicesLinkLabel', { - defaultMessage: 'Indices', - }), - }, { id: 'webCrawlers', path: `/${CRAWLERS_PATH}`, diff --git a/x-pack/solutions/search/plugins/enterprise_search/server/lib/crawler/post_connector.test.ts b/x-pack/solutions/search/plugins/enterprise_search/server/lib/crawler/post_connector.test.ts index 372add3ba15f4..03266b6b6d8a1 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/server/lib/crawler/post_connector.test.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/server/lib/crawler/post_connector.test.ts @@ -33,6 +33,7 @@ describe('recreateConnectorDocument lib function', () => { api_key_secret_id: null, configuration: {}, custom_scheduling: {}, + deleted: false, description: null, error: null, features: null, diff --git a/x-pack/solutions/search/plugins/enterprise_search/server/plugin.ts b/x-pack/solutions/search/plugins/enterprise_search/server/plugin.ts index 1f8911d5e3b55..aaa133986b2ff 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/server/plugin.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/server/plugin.ts @@ -45,6 +45,8 @@ import { AI_SEARCH_PLUGIN, APPLICATIONS_PLUGIN, SEARCH_PRODUCT_NAME, + SEARCH_INDICES, + SEARCH_INDICES_START, } from '../common/constants'; import { @@ -163,6 +165,8 @@ export class EnterpriseSearchPlugin implements Plugin { name: 'Sharepoint Online Production Connector', service_type: 'sharepoint_online', is_native: false, + deleted: false, }, { id: '00000002', name: 'Github Connector for ACME Organisation', service_type: 'github', is_native: true, + deleted: true, }, ], count: 2, @@ -121,6 +123,7 @@ describe('AgentlessConnectorsInfraService', () => { expect(nativeConnectors[0].id).toBe(mockResult.results[1].id); expect(nativeConnectors[0].name).toBe(mockResult.results[1].name); expect(nativeConnectors[0].service_type).toBe(mockResult.results[1].service_type); + expect(nativeConnectors[0].is_deleted).toBe(mockResult.results[1].deleted); }); test('Lists only supported service types', async () => { @@ -131,24 +134,28 @@ describe('AgentlessConnectorsInfraService', () => { name: 'Sharepoint Online Production Connector', service_type: 'sharepoint_online', is_native: true, + deleted: false, }, { id: '00000002', name: 'Github Connector for ACME Organisation', service_type: 'github', is_native: true, + deleted: true, }, { id: '00000003', name: 'Connector with unexpected service_type', service_type: 'crawler', is_native: true, + deleted: false, }, { id: '00000004', name: 'Connector with no service_type', service_type: null, is_native: true, + deleted: true, }, ], count: 4, @@ -160,9 +167,11 @@ describe('AgentlessConnectorsInfraService', () => { expect(nativeConnectors[0].id).toBe(mockResult.results[0].id); expect(nativeConnectors[0].name).toBe(mockResult.results[0].name); expect(nativeConnectors[0].service_type).toBe(mockResult.results[0].service_type); + expect(nativeConnectors[0].is_deleted).toBe(mockResult.results[0].deleted); expect(nativeConnectors[1].id).toBe(mockResult.results[1].id); expect(nativeConnectors[1].name).toBe(mockResult.results[1].name); expect(nativeConnectors[1].service_type).toBe(mockResult.results[1].service_type); + expect(nativeConnectors[1].is_deleted).toBe(mockResult.results[1].deleted); }); }); describe('getConnectorPackagePolicies', () => { @@ -214,13 +223,13 @@ describe('AgentlessConnectorsInfraService', () => { expect(policies.length).toBe(1); expect(policies[0].package_policy_id).toBe(firstPackagePolicy.id); - expect(policies[0].connector_metadata.id).toBe( + expect(policies[0].connector_settings.id).toBe( firstPackagePolicy.inputs[0].compiled_input.connector_id ); - expect(policies[0].connector_metadata.name).toBe( + expect(policies[0].connector_settings.name).toBe( firstPackagePolicy.inputs[0].compiled_input.connector_name ); - expect(policies[0].connector_metadata.service_type).toBe( + expect(policies[0].connector_settings.service_type).toBe( firstPackagePolicy.inputs[0].compiled_input.service_type ); expect(policies[0].agent_policy_ids).toBe(firstPackagePolicy.policy_ids); @@ -268,25 +277,25 @@ describe('AgentlessConnectorsInfraService', () => { expect(policies.length).toBe(2); expect(policies[0].package_policy_id).toBe(firstPackagePolicy.id); - expect(policies[0].connector_metadata.id).toBe( + expect(policies[0].connector_settings.id).toBe( firstPackagePolicy.inputs[0].compiled_input.connector_id ); - expect(policies[0].connector_metadata.name).toBe( + expect(policies[0].connector_settings.name).toBe( firstPackagePolicy.inputs[0].compiled_input.connector_name ); - expect(policies[0].connector_metadata.service_type).toBe( + expect(policies[0].connector_settings.service_type).toBe( firstPackagePolicy.inputs[0].compiled_input.service_type ); expect(policies[0].agent_policy_ids).toBe(firstPackagePolicy.policy_ids); expect(policies[1].package_policy_id).toBe(thirdPackagePolicy.id); - expect(policies[1].connector_metadata.id).toBe( + expect(policies[1].connector_settings.id).toBe( thirdPackagePolicy.inputs[0].compiled_input.connector_id ); - expect(policies[1].connector_metadata.name).toBe( + expect(policies[1].connector_settings.name).toBe( thirdPackagePolicy.inputs[0].compiled_input.connector_name ); - expect(policies[1].connector_metadata.service_type).toBe( + expect(policies[1].connector_settings.service_type).toBe( thirdPackagePolicy.inputs[0].compiled_input.service_type ); expect(policies[1].agent_policy_ids).toBe(thirdPackagePolicy.policy_ids); @@ -352,6 +361,7 @@ describe('AgentlessConnectorsInfraService', () => { id: '', name: 'something', service_type: 'github', + is_deleted: false, }; try { @@ -367,6 +377,7 @@ describe('AgentlessConnectorsInfraService', () => { id: '000000001', name: 'something', service_type: '', + is_deleted: false, }; try { @@ -382,6 +393,7 @@ describe('AgentlessConnectorsInfraService', () => { id: '000000001', name: 'something', service_type: 'crawler', + is_deleted: false, }; try { @@ -393,11 +405,28 @@ describe('AgentlessConnectorsInfraService', () => { } }); + test('Raises an error if connector.is_deleted is true', async () => { + const connector = { + id: '000000001', + name: 'something', + service_type: 'github', + is_deleted: true, + }; + + try { + await service.deployConnector(connector); + expect(true).toBe(false); + } catch (e) { + expect(e.message).toContain('deleted'); + } + }); + test('Does not swallow an error if agent policy creation failed', async () => { const connector = { id: '000000001', name: 'something', service_type: 'github', + is_deleted: false, }; const errorMessage = 'Failed to create an agent policy hehe'; @@ -418,6 +447,7 @@ describe('AgentlessConnectorsInfraService', () => { id: '000000001', name: 'something', service_type: 'github', + is_deleted: false, }; const errorMessage = 'Failed to create a package policy hehe'; @@ -439,6 +469,7 @@ describe('AgentlessConnectorsInfraService', () => { id: '000000001', name: 'something', service_type: 'github', + is_deleted: false, }; agentPolicyInterface.create.mockResolvedValue(agentPolicy); @@ -531,74 +562,95 @@ describe('module', () => { id: '000001', name: 'Github Connector', service_type: 'github', + is_deleted: false, }; const sharepointConnector: ConnectorMetadata = { id: '000002', name: 'Sharepoint Connector', service_type: 'sharepoint_online', + is_deleted: false, }; const mysqlConnector: ConnectorMetadata = { id: '000003', name: 'MySQL Connector', service_type: 'mysql', + is_deleted: false, + }; + + const deleted = (connector: ConnectorMetadata): ConnectorMetadata => { + return { + id: connector.id, + name: connector.name, + service_type: connector.service_type, + is_deleted: true, + }; }; const githubPackagePolicy: PackagePolicyMetadata = { package_policy_id: 'agent-001', agent_policy_ids: ['agent-package-001'], - connector_metadata: githubConnector, + connector_settings: githubConnector, }; const sharepointPackagePolicy: PackagePolicyMetadata = { package_policy_id: 'agent-002', agent_policy_ids: ['agent-package-002'], - connector_metadata: sharepointConnector, + connector_settings: sharepointConnector, }; const mysqlPackagePolicy: PackagePolicyMetadata = { package_policy_id: 'agent-003', agent_policy_ids: ['agent-package-003'], - connector_metadata: mysqlConnector, + connector_settings: mysqlConnector, }; - describe('getPoliciesWithoutConnectors', () => { - test('Returns a missing policy if one is missing', async () => { - const missingPolicies = getPoliciesWithoutConnectors( + describe('getPoliciesToDelete', () => { + test('Returns one policy if connector has been soft-deleted', async () => { + const policiesToDelete = getPoliciesToDelete( [githubPackagePolicy, sharepointPackagePolicy, mysqlPackagePolicy], - [githubConnector, sharepointConnector] + [deleted(githubConnector), sharepointConnector, mysqlConnector] ); - expect(missingPolicies.length).toBe(1); - expect(missingPolicies).toContain(mysqlPackagePolicy); + expect(policiesToDelete.length).toBe(1); + expect(policiesToDelete).toContain(githubPackagePolicy); }); - test('Returns empty array if no policies are missing', async () => { - const missingPolicies = getPoliciesWithoutConnectors( + test('Returns empty array if no connectors were soft-deleted', async () => { + const policiesToDelete = getPoliciesToDelete( [githubPackagePolicy, sharepointPackagePolicy, mysqlPackagePolicy], [githubConnector, sharepointConnector, mysqlConnector] ); - expect(missingPolicies.length).toBe(0); + expect(policiesToDelete.length).toBe(0); }); - test('Returns all policies if all are missing', async () => { - const missingPolicies = getPoliciesWithoutConnectors( + test('Returns no policies if no connectors are passed', async () => { + const policiesToDelete = getPoliciesToDelete( [githubPackagePolicy, sharepointPackagePolicy, mysqlPackagePolicy], [] ); - expect(missingPolicies.length).toBe(3); - expect(missingPolicies).toContain(githubPackagePolicy); - expect(missingPolicies).toContain(sharepointPackagePolicy); - expect(missingPolicies).toContain(mysqlPackagePolicy); + expect(policiesToDelete.length).toBe(0); + }); + + test('Returns all policies if all connectors were soft-deleted', async () => { + const policiesToDelete = getPoliciesToDelete( + [githubPackagePolicy, sharepointPackagePolicy, mysqlPackagePolicy], + [deleted(githubConnector), deleted(sharepointConnector), deleted(mysqlConnector)] + ); + + expect(policiesToDelete.length).toBe(3); + expect(policiesToDelete).toContain(githubPackagePolicy); + expect(policiesToDelete).toContain(sharepointPackagePolicy); + expect(policiesToDelete).toContain(mysqlPackagePolicy); }); }); - describe('getConnectorsWithoutPolicies', () => { - test('Returns a missing policy if one is missing', async () => { - const missingConnectors = getConnectorsWithoutPolicies( + describe('getConnectorsToDeploy', () => { + test('Returns a single connector if only one is missing', async () => { + const missingConnectors = getConnectorsToDeploy( [githubPackagePolicy, sharepointPackagePolicy], [githubConnector, sharepointConnector, mysqlConnector] ); @@ -607,8 +659,8 @@ describe('module', () => { expect(missingConnectors).toContain(mysqlConnector); }); - test('Returns empty array if no policies are missing', async () => { - const missingConnectors = getConnectorsWithoutPolicies( + test('Returns empty array if all policies have a matching connector', async () => { + const missingConnectors = getConnectorsToDeploy( [githubPackagePolicy, sharepointPackagePolicy, mysqlPackagePolicy], [githubConnector, sharepointConnector, mysqlConnector] ); @@ -616,8 +668,17 @@ describe('module', () => { expect(missingConnectors.length).toBe(0); }); - test('Returns all policies if all are missing', async () => { - const missingConnectors = getConnectorsWithoutPolicies( + test('Does not include soft-deleted connectors', async () => { + const missingConnectors = getConnectorsToDeploy( + [], + [deleted(githubConnector), deleted(sharepointConnector), deleted(mysqlConnector)] + ); + + expect(missingConnectors.length).toBe(0); + }); + + test('Returns all policies if no connectors are present', async () => { + const missingConnectors = getConnectorsToDeploy( [], [githubConnector, sharepointConnector, mysqlConnector] ); diff --git a/x-pack/solutions/search/plugins/search_connectors/server/services/index.ts b/x-pack/solutions/search/plugins/search_connectors/server/services/index.ts index 2acb4143c14e9..f3640906ce985 100644 --- a/x-pack/solutions/search/plugins/search_connectors/server/services/index.ts +++ b/x-pack/solutions/search/plugins/search_connectors/server/services/index.ts @@ -16,12 +16,19 @@ export interface ConnectorMetadata { id: string; name: string; service_type: string; + is_deleted: boolean; +} + +export interface PackageConnectorSettings { + id: string; + name: string; + service_type: string; } export interface PackagePolicyMetadata { package_policy_id: string; agent_policy_ids: string[]; - connector_metadata: ConnectorMetadata; + connector_settings: PackageConnectorSettings; } const connectorsInputName = 'connectors-py'; @@ -52,7 +59,14 @@ export class AgentlessConnectorsInfraService { public getNativeConnectors = async (): Promise => { this.logger.debug(`Fetching all connectors and filtering only to native`); const nativeConnectors: ConnectorMetadata[] = []; - const allConnectors = await fetchConnectors(this.esClient); + const allConnectors = await fetchConnectors( + this.esClient, + undefined, + undefined, + undefined, + true // includeDeleted + ); + for (const connector of allConnectors) { if (connector.is_native && connector.service_type != null) { if (NATIVE_CONNECTOR_DEFINITIONS[connector.service_type] == null) { @@ -66,6 +80,7 @@ export class AgentlessConnectorsInfraService { id: connector.id, name: connector.name, service_type: connector.service_type, + is_deleted: !!connector.deleted, }); } } @@ -110,7 +125,7 @@ export class AgentlessConnectorsInfraService { policiesMetadata.push({ package_policy_id: policy.id, agent_policy_ids: policy.policy_ids, - connector_metadata: { + connector_settings: { id: input.compiled_input.connector_id, name: input.compiled_input.connector_name || '', service_type: input.compiled_input.service_type, @@ -134,6 +149,10 @@ export class AgentlessConnectorsInfraService { throw new Error(`Connector id is null or empty`); } + if (connector.is_deleted) { + throw new Error(`Connector ${connector.id} has been deleted`); + } + if (connector.service_type == null || connector.service_type.trim().length === 0) { throw new Error(`Connector ${connector.id} service_type is null or empty`); } @@ -234,20 +253,44 @@ export class AgentlessConnectorsInfraService { }; } -export const getConnectorsWithoutPolicies = ( +export const getConnectorsToDeploy = ( packagePolicies: PackagePolicyMetadata[], connectors: ConnectorMetadata[] ): ConnectorMetadata[] => { - return connectors.filter( - (x) => packagePolicies.filter((y) => y.connector_metadata.id === x.id).length === 0 - ); + const results: ConnectorMetadata[] = []; + + for (const connector of connectors) { + // Skip deleted connectors + if (connector.is_deleted) continue; + + // If no package policies reference this connector by id then it should be deployed + if ( + packagePolicies.every((packagePolicy) => packagePolicy.connector_settings.id !== connector.id) + ) { + results.push(connector); + } + } + + return results; }; -export const getPoliciesWithoutConnectors = ( +export const getPoliciesToDelete = ( packagePolicies: PackagePolicyMetadata[], connectors: ConnectorMetadata[] ): PackagePolicyMetadata[] => { - return packagePolicies.filter( - (x) => connectors.filter((y) => y.id === x.connector_metadata.id).length === 0 - ); + const results: PackagePolicyMetadata[] = []; + + for (const packagePolicy of packagePolicies) { + // If there is a connector that has been soft-deleted for this package policy then this policy should be deleted + if ( + connectors.some( + (connector) => + connector.id === packagePolicy.connector_settings.id && connector.is_deleted === true + ) + ) { + results.push(packagePolicy); + } + } + + return results; }; diff --git a/x-pack/solutions/search/plugins/search_connectors/server/task.test.ts b/x-pack/solutions/search/plugins/search_connectors/server/task.test.ts index c77f443f9d7ed..51aa5f972d066 100644 --- a/x-pack/solutions/search/plugins/search_connectors/server/task.test.ts +++ b/x-pack/solutions/search/plugins/search_connectors/server/task.test.ts @@ -24,36 +24,48 @@ describe('infraSyncTaskRunner', () => { id: '000001', name: 'Github Connector', service_type: 'github', + is_deleted: false, }; const sharepointConnector: ConnectorMetadata = { id: '000002', name: 'Sharepoint Connector', service_type: 'sharepoint_online', + is_deleted: false, }; const mysqlConnector: ConnectorMetadata = { id: '000003', name: 'MySQL Connector', service_type: 'mysql', + is_deleted: false, + }; + + const deleted = (connector: ConnectorMetadata): ConnectorMetadata => { + return { + id: connector.id, + name: connector.name, + service_type: connector.service_type, + is_deleted: true, + }; }; const githubPackagePolicy: PackagePolicyMetadata = { package_policy_id: 'agent-001', agent_policy_ids: ['agent-package-001'], - connector_metadata: githubConnector, + connector_settings: githubConnector, }; const sharepointPackagePolicy: PackagePolicyMetadata = { package_policy_id: 'agent-002', agent_policy_ids: ['agent-package-002'], - connector_metadata: sharepointConnector, + connector_settings: sharepointConnector, }; const mysqlPackagePolicy: PackagePolicyMetadata = { package_policy_id: 'agent-003', agent_policy_ids: ['agent-package-003'], - connector_metadata: mysqlConnector, + connector_settings: mysqlConnector, }; let logger: MockedLogger; @@ -197,8 +209,12 @@ describe('infraSyncTaskRunner', () => { expect(serviceMock.deployConnector).toBeCalledWith(sharepointConnector); }); - test('Removes a package policy if no connectors match the policy', async () => { - serviceMock.getNativeConnectors.mockResolvedValue([mysqlConnector, githubConnector]); + test('Removes a package policy if connectors has been soft-deleted', async () => { + serviceMock.getNativeConnectors.mockResolvedValue([ + deleted(sharepointConnector), + mysqlConnector, + githubConnector, + ]); serviceMock.getConnectorPackagePolicies.mockResolvedValue([sharepointPackagePolicy]); licensePluginStartMock.getLicense.mockResolvedValue(validLicenseMock); @@ -211,8 +227,26 @@ describe('infraSyncTaskRunner', () => { expect(serviceMock.removeDeployment).toBeCalledWith(sharepointPackagePolicy.package_policy_id); }); + test('Does not remove a package policy if no connectors match the policy', async () => { + serviceMock.getNativeConnectors.mockResolvedValue([mysqlConnector, githubConnector]); + serviceMock.getConnectorPackagePolicies.mockResolvedValue([sharepointPackagePolicy]); + licensePluginStartMock.getLicense.mockResolvedValue(validLicenseMock); + + await infraSyncTaskRunner( + logger, + serviceMock, + licensePluginStartMock + )({ taskInstance: taskInstanceStub }).run(); + + expect(serviceMock.removeDeployment).not.toBeCalled(); + }); + test('Removes deployments even if another connectors failed to be undeployed', async () => { - serviceMock.getNativeConnectors.mockResolvedValue([]); + serviceMock.getNativeConnectors.mockResolvedValue([ + deleted(mysqlConnector), + deleted(sharepointConnector), + deleted(githubConnector), + ]); serviceMock.getConnectorPackagePolicies.mockResolvedValue([ sharepointPackagePolicy, mysqlPackagePolicy, diff --git a/x-pack/solutions/search/plugins/search_connectors/server/task.ts b/x-pack/solutions/search/plugins/search_connectors/server/task.ts index 7ecd538e0f7ce..bf5d4c213db77 100644 --- a/x-pack/solutions/search/plugins/search_connectors/server/task.ts +++ b/x-pack/solutions/search/plugins/search_connectors/server/task.ts @@ -20,8 +20,8 @@ import type { } from './types'; import { AgentlessConnectorsInfraService, - getConnectorsWithoutPolicies, - getPoliciesWithoutConnectors, + getConnectorsToDeploy, + getPoliciesToDelete, } from './services'; import { SearchConnectorsConfig } from './config'; @@ -63,13 +63,10 @@ export function infraSyncTaskRunner( } // Deploy Policies - const connectorsWithoutPolicies = getConnectorsWithoutPolicies( - policiesMetadata, - nativeConnectors - ); + const connectorsToDeploy = getConnectorsToDeploy(policiesMetadata, nativeConnectors); let agentlessConnectorsDeployed = 0; - for (const connectorMetadata of connectorsWithoutPolicies) { + for (const connectorMetadata of connectorsToDeploy) { // We try-catch to still be able to deploy other connectors if some fail try { await service.deployConnector(connectorMetadata); @@ -83,13 +80,10 @@ export function infraSyncTaskRunner( } // Delete policies - const policiesWithoutConnectors = getPoliciesWithoutConnectors( - policiesMetadata, - nativeConnectors - ); + const policiesToDelete = getPoliciesToDelete(policiesMetadata, nativeConnectors); let agentlessConnectorsRemoved = 0; - for (const policyMetadata of policiesWithoutConnectors) { + for (const policyMetadata of policiesToDelete) { // We try-catch to still be able to deploy other connectors if some fail try { await service.removeDeployment(policyMetadata.package_policy_id); diff --git a/x-pack/solutions/search/plugins/search_indices/common/index.ts b/x-pack/solutions/search/plugins/search_indices/common/index.ts index e640397e3936d..a04f333fc17bc 100644 --- a/x-pack/solutions/search/plugins/search_indices/common/index.ts +++ b/x-pack/solutions/search/plugins/search_indices/common/index.ts @@ -6,10 +6,11 @@ */ import type { SearchIndices, SearchStart } from '@kbn/deeplinks-search/deep_links'; +import { SEARCH_INDICES, SEARCH_INDICES_START } from '@kbn/deeplinks-search'; export const PLUGIN_ID = 'searchIndices'; export const PLUGIN_NAME = 'searchIndices'; -export const START_APP_ID: SearchStart = 'elasticsearchStart'; -export const INDICES_APP_ID: SearchIndices = 'elasticsearchIndices'; +export const START_APP_ID: SearchStart = SEARCH_INDICES_START; +export const INDICES_APP_ID: SearchIndices = SEARCH_INDICES; export type { IndicesStatusResponse, UserStartPrivilegesResponse } from './types'; diff --git a/x-pack/solutions/search/plugins/search_indices/common/routes.ts b/x-pack/solutions/search/plugins/search_indices/common/routes.ts index b6f27dc89d391..7db8fb1a89033 100644 --- a/x-pack/solutions/search/plugins/search_indices/common/routes.ts +++ b/x-pack/solutions/search/plugins/search_indices/common/routes.ts @@ -11,4 +11,5 @@ export const GET_USER_PRIVILEGES_ROUTE = '/internal/search_indices/start_privile export const POST_CREATE_INDEX_ROUTE = '/internal/search_indices/indices/create'; export const INDEX_DOCUMENT_ROUTE = '/internal/search_indices/{indexName}/documents/{id}'; + export const SEARCH_DOCUMENTS_ROUTE = '/internal/search_indices/{indexName}/documents/search'; diff --git a/x-pack/solutions/search/plugins/search_indices/kibana.jsonc b/x-pack/solutions/search/plugins/search_indices/kibana.jsonc index 50778c3fbb4e4..68a86a01587a0 100644 --- a/x-pack/solutions/search/plugins/search_indices/kibana.jsonc +++ b/x-pack/solutions/search/plugins/search_indices/kibana.jsonc @@ -20,7 +20,8 @@ "cloud", "console", "usageCollection", - "serverless" + "serverless", + "searchNavigation" ], "requiredBundles": [ "kibanaReact", diff --git a/x-pack/solutions/search/plugins/search_indices/public/analytics/constants.ts b/x-pack/solutions/search/plugins/search_indices/public/analytics/constants.ts index 0da7aedf19328..fe7c19eeb708c 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/analytics/constants.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/analytics/constants.ts @@ -11,12 +11,15 @@ export enum AnalyticsEvents { startPageShowCreateIndexUIClick = 'start_page_show_create_index_ui', startCreateIndexPageModifyIndexName = 'start_modify_index_name', startCreateIndexClick = 'start_create_index', + startCreateIndexWorkflowSelect = 'start_workflow_select', startCreateIndexLanguageSelect = 'start_code_lang_select', startCreateIndexRunInConsole = 'start_cta_run_in_console', startCreateIndexCodeCopyInstall = 'start_code_copy_install', startCreateIndexCodeCopy = 'start_code_copy', startCreateIndexCreatedRedirect = 'start_index_created_api', startFileUploadClick = 'start_file_upload', + indexDetailsCodeLanguageSelect = 'index_details_code_lang_select', + indexDetailsWorkflowSelect = 'index_details_workflow_select', indexDetailsInstallCodeCopy = 'index_details_code_copy_install', indexDetailsAddMappingsCodeCopy = 'index_details_add_mappings_code_copy', indexDetailsIngestDocumentsCodeCopy = 'index_details_ingest_documents_code_copy', @@ -29,6 +32,7 @@ export enum AnalyticsEvents { createIndexPageModifyIndexName = 'create_index_modify_index_name', createIndexCreateIndexClick = 'create_index_click_create', createIndexLanguageSelect = 'create_index_code_lang_select', + createIndexWorkflowSelect = 'create_index_workflow_select', createIndexRunInConsole = 'create_index_run_in_console', createIndexCodeCopyInstall = 'create_index_copy_install', createIndexCodeCopy = 'create_index_code_copy', diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/constants.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/constants.ts index 3ba23d0fae222..aca4c4c5e4bb2 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/constants.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/constants.ts @@ -34,3 +34,31 @@ export const CONNECT_CREATE_VECTOR_INDEX_CMD_DESCRIPTION = i18n.translate( defaultMessage: 'Use the Elasticsearch client to create an index with dense vector fields', } ); + +export const CONNECT_CREATE_DEFAULT_INDEX_CMD_TITLE = i18n.translate( + 'xpack.searchIndices.code.createIndexCommand.title', + { + defaultMessage: 'Create an index with text fields', + } +); + +export const CONNECT_CREATE_DEFAULT_INDEX_CMD_DESCRIPTION = i18n.translate( + 'xpack.searchIndices.code.createIndexCommand.description', + { + defaultMessage: 'Use the Elasticsearch client to create an index with text fields', + } +); + +export const CONNECT_CREATE_SEMANTIC_INDEX_CMD_TITLE = i18n.translate( + 'xpack.searchIndices.code.createIndexCommand.title', + { + defaultMessage: 'Create an index with semantic fields', + } +); + +export const CONNECT_CREATE_SEMANTIC_INDEX_CMD_DESCRIPTION = i18n.translate( + 'xpack.searchIndices.code.createIndexCommand.description', + { + defaultMessage: 'Use the Elasticsearch client to create an index with semantic fields', + } +); diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/create_index.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/create_index.ts index d462c2310ab4c..d77ac7ce49416 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/create_index.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/create_index.ts @@ -7,6 +7,10 @@ import { CreateIndexCodeExamples } from '../types'; import { + CONNECT_CREATE_DEFAULT_INDEX_CMD_DESCRIPTION, + CONNECT_CREATE_DEFAULT_INDEX_CMD_TITLE, + CONNECT_CREATE_SEMANTIC_INDEX_CMD_DESCRIPTION, + CONNECT_CREATE_SEMANTIC_INDEX_CMD_TITLE, CONNECT_CREATE_VECTOR_INDEX_CMD_DESCRIPTION, CONNECT_CREATE_VECTOR_INDEX_CMD_TITLE, INSTALL_INSTRUCTIONS_DESCRIPTION, @@ -14,23 +18,23 @@ import { } from './constants'; import { CurlCreateIndexExamples } from './curl'; -import { JavascriptServerlessCreateIndexExamples } from './javascript'; -import { PythonServerlessCreateIndexExamples } from './python'; +import { JavascriptCreateIndexExamples } from './javascript'; +import { PythonCreateIndexExamples } from './python'; import { ConsoleCreateIndexExamples } from './sense'; -export const DefaultServerlessCodeExamples: CreateIndexCodeExamples = { +export const DefaultCodeExamples: CreateIndexCodeExamples = { exampleType: 'search', installTitle: INSTALL_INSTRUCTIONS_TITLE, installDescription: INSTALL_INSTRUCTIONS_DESCRIPTION, - createIndexTitle: CONNECT_CREATE_VECTOR_INDEX_CMD_TITLE, - createIndexDescription: CONNECT_CREATE_VECTOR_INDEX_CMD_DESCRIPTION, + createIndexTitle: CONNECT_CREATE_DEFAULT_INDEX_CMD_TITLE, + createIndexDescription: CONNECT_CREATE_DEFAULT_INDEX_CMD_DESCRIPTION, sense: ConsoleCreateIndexExamples.default, curl: CurlCreateIndexExamples.default, - python: PythonServerlessCreateIndexExamples.default, - javascript: JavascriptServerlessCreateIndexExamples.default, + python: PythonCreateIndexExamples.default, + javascript: JavascriptCreateIndexExamples.default, }; -export const DenseVectorSeverlessCodeExamples: CreateIndexCodeExamples = { +export const DenseVectorCodeExamples: CreateIndexCodeExamples = { exampleType: 'vector', installTitle: INSTALL_INSTRUCTIONS_TITLE, installDescription: INSTALL_INSTRUCTIONS_DESCRIPTION, @@ -38,6 +42,18 @@ export const DenseVectorSeverlessCodeExamples: CreateIndexCodeExamples = { createIndexDescription: CONNECT_CREATE_VECTOR_INDEX_CMD_DESCRIPTION, sense: ConsoleCreateIndexExamples.dense_vector, curl: CurlCreateIndexExamples.dense_vector, - python: PythonServerlessCreateIndexExamples.dense_vector, - javascript: JavascriptServerlessCreateIndexExamples.dense_vector, + python: PythonCreateIndexExamples.dense_vector, + javascript: JavascriptCreateIndexExamples.dense_vector, +}; + +export const SemanticCodeExamples: CreateIndexCodeExamples = { + exampleType: 'semantic', + installTitle: INSTALL_INSTRUCTIONS_TITLE, + installDescription: INSTALL_INSTRUCTIONS_DESCRIPTION, + createIndexTitle: CONNECT_CREATE_SEMANTIC_INDEX_CMD_TITLE, + createIndexDescription: CONNECT_CREATE_SEMANTIC_INDEX_CMD_DESCRIPTION, + sense: ConsoleCreateIndexExamples.semantic, + curl: CurlCreateIndexExamples.semantic, + python: PythonCreateIndexExamples.semantic, + javascript: JavascriptCreateIndexExamples.semantic, }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/curl.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/curl.ts index a73d5a7cfe617..23fe480f216dc 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/curl.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/curl.ts @@ -23,7 +23,16 @@ export const CurlCreateIndexExamples: CreateIndexLanguageExamples = { indexName ?? INDEX_PLACEHOLDER }' \ --header 'Authorization: ApiKey ${apiKey ?? API_KEY_PLACEHOLDER}' \ ---header 'Content-Type: application/json'`, +--header 'Content-Type: application/json +--data-raw '{ + "mappings": { + "properties":{ + "text":{ + "type":"text" + } + } + } +}'`, }, dense_vector: { createIndex: ({ elasticsearchURL, apiKey, indexName }) => `curl PUT '${elasticsearchURL}/${ @@ -43,11 +52,27 @@ export const CurlCreateIndexExamples: CreateIndexLanguageExamples = { } } } +}'`, + }, + semantic: { + createIndex: ({ elasticsearchURL, apiKey, indexName }) => `curl PUT '${elasticsearchURL}/${ + indexName ?? INDEX_PLACEHOLDER + }' \ +--header 'Authorization: ApiKey ${apiKey ?? API_KEY_PLACEHOLDER}' \ +--header 'Content-Type: application/json +--data-raw '{ + "mappings": { + "properties":{ + "text":{ + "type":"semantic_text" + } + } + } }'`, }, }; -export const CurlVectorsIngestDataExample: IngestDataCodeDefinition = { +export const CurlIngestDataExample: IngestDataCodeDefinition = { ingestCommand: ({ elasticsearchURL, apiKey, indexName, sampleDocuments }) => { let result = `curl -X POST "${elasticsearchURL}/_bulk?pretty" \ --header 'Authorization: ApiKey ${apiKey ?? API_KEY_PLACEHOLDER}' \ diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/ingest_data.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/ingest_data.ts index f2eb019bda3e9..3f60109dd32e1 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/ingest_data.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/ingest_data.ts @@ -8,21 +8,43 @@ import { i18n } from '@kbn/i18n'; import { IngestDataCodeExamples } from '../types'; -import { JSServerlessIngestVectorDataExample } from './javascript'; -import { PythonServerlessVectorsIngestDataExample } from './python'; -import { ConsoleVectorsIngestDataExample } from './sense'; -import { CurlVectorsIngestDataExample } from './curl'; +import { JSIngestDataExample } from './javascript'; +import { PythonIngestDataExample } from './python'; +import { ConsoleIngestDataExample } from './sense'; +import { CurlIngestDataExample } from './curl'; import { INSTALL_INSTRUCTIONS_TITLE, INSTALL_INSTRUCTIONS_DESCRIPTION } from './constants'; -export const DenseVectorServerlessCodeExamples: IngestDataCodeExamples = { +const addMappingsTitle = i18n.translate( + 'xpack.searchIndices.codeExamples.serverless.denseVector.mappingsTitle', + { + defaultMessage: 'Define field mappings', + } +); + +export const DefaultIngestDataCodeExamples: IngestDataCodeExamples = { installTitle: INSTALL_INSTRUCTIONS_TITLE, installDescription: INSTALL_INSTRUCTIONS_DESCRIPTION, - addMappingsTitle: i18n.translate( - 'xpack.searchIndices.codeExamples.serverless.denseVector.mappingsTitle', + addMappingsTitle, + addMappingsDescription: i18n.translate( + 'xpack.searchIndices.codeExamples.serverless.default.mappingsDescription', { - defaultMessage: 'Define field mappings', + defaultMessage: + 'This example defines one field: a text field that will provide full-text search capabilities. You can add more field types by modifying the mappings in your API call, or in the mappings tab.', } ), + defaultMapping: { + text: { type: 'text' }, + }, + sense: ConsoleIngestDataExample, + curl: CurlIngestDataExample, + python: PythonIngestDataExample, + javascript: JSIngestDataExample, +}; + +export const DenseVectorIngestDataCodeExamples: IngestDataCodeExamples = { + installTitle: INSTALL_INSTRUCTIONS_TITLE, + installDescription: INSTALL_INSTRUCTIONS_DESCRIPTION, + addMappingsTitle, addMappingsDescription: i18n.translate( 'xpack.searchIndices.codeExamples.serverless.denseVector.mappingsDescription', { @@ -34,8 +56,29 @@ export const DenseVectorServerlessCodeExamples: IngestDataCodeExamples = { vector: { type: 'dense_vector', dims: 3 }, text: { type: 'text' }, }, - sense: ConsoleVectorsIngestDataExample, - curl: CurlVectorsIngestDataExample, - python: PythonServerlessVectorsIngestDataExample, - javascript: JSServerlessIngestVectorDataExample, + sense: ConsoleIngestDataExample, + curl: CurlIngestDataExample, + python: PythonIngestDataExample, + javascript: JSIngestDataExample, +}; + +export const SemanticIngestDataCodeExamples: IngestDataCodeExamples = { + installTitle: INSTALL_INSTRUCTIONS_TITLE, + installDescription: INSTALL_INSTRUCTIONS_DESCRIPTION, + addMappingsTitle, + addMappingsDescription: i18n.translate( + 'xpack.searchIndices.codeExamples.serverless.denseVector.mappingsDescription', + { + defaultMessage: + 'This example defines one field: a semantic text field that will provide vector search capabilities using the default ELSER model. You can add more field types by modifying the mappings in your API call, or in the mappings tab.', + } + ), + defaultMapping: { + // @ts-expect-error - our types don't understand yet that we can have semantic_text fields without inference ids + text: { type: 'semantic_text' }, + }, + sense: ConsoleIngestDataExample, + curl: CurlIngestDataExample, + python: PythonIngestDataExample, + javascript: JSIngestDataExample, }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/javascript.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/javascript.ts index 75de93e485742..4da25de849068 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/javascript.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/javascript.ts @@ -19,11 +19,11 @@ export const JAVASCRIPT_INFO: CodeLanguage = { codeBlockLanguage: 'javascript', }; -const SERVERLESS_INSTALL_CMD = `npm install @elastic/elasticsearch`; +const INSTALL_CMD = `npm install @elastic/elasticsearch`; -export const JavascriptServerlessCreateIndexExamples: CreateIndexLanguageExamples = { +export const JavascriptCreateIndexExamples: CreateIndexLanguageExamples = { default: { - installCommand: SERVERLESS_INSTALL_CMD, + installCommand: INSTALL_CMD, createIndex: ({ elasticsearchURL, apiKey, @@ -39,10 +39,15 @@ const client = new Client({ client.indices.create({ index: "${indexName ?? INDEX_PLACEHOLDER}", + mappings: { + properties: { + text: { type: "text"} + }, + }, });`, }, dense_vector: { - installCommand: SERVERLESS_INSTALL_CMD, + installCommand: INSTALL_CMD, createIndex: ({ elasticsearchURL, apiKey, @@ -64,12 +69,36 @@ client.indices.create({ text: { type: "text"} }, }, +});`, + }, + semantic: { + installCommand: INSTALL_CMD, + createIndex: ({ + elasticsearchURL, + apiKey, + indexName, + }) => `import { Client } from "@elastic/elasticsearch" + +const client = new Client({ + node: '${elasticsearchURL}', + auth: { + apiKey: "${apiKey ?? API_KEY_PLACEHOLDER}" + } +}); + +client.indices.create({ + index: "${indexName ?? INDEX_PLACEHOLDER}", + mappings: { + properties: { + text: { type: "semantic_text"} + }, + }, });`, }, }; -export const JSServerlessIngestVectorDataExample: IngestDataCodeDefinition = { - installCommand: SERVERLESS_INSTALL_CMD, +export const JSIngestDataExample: IngestDataCodeDefinition = { + installCommand: INSTALL_CMD, ingestCommand: ({ apiKey, elasticsearchURL, diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/python.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/python.ts index cf2b06603c381..326e3259663be 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/python.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/python.ts @@ -23,11 +23,11 @@ export const PYTHON_INFO: CodeLanguage = { codeBlockLanguage: 'python', }; -const SERVERLESS_PYTHON_INSTALL_CMD = 'pip install elasticsearch'; +const PYTHON_INSTALL_CMD = 'pip install elasticsearch'; -export const PythonServerlessCreateIndexExamples: CreateIndexLanguageExamples = { +export const PythonCreateIndexExamples: CreateIndexLanguageExamples = { default: { - installCommand: SERVERLESS_PYTHON_INSTALL_CMD, + installCommand: PYTHON_INSTALL_CMD, createIndex: ({ elasticsearchURL, apiKey, @@ -40,11 +40,16 @@ client = Elasticsearch( ) client.indices.create( - index="${indexName ?? INDEX_PLACEHOLDER}" + index="${indexName ?? INDEX_PLACEHOLDER}", + mappings={ + "properties": { + "text": {"type": "text"} + } + } )`, }, dense_vector: { - installCommand: SERVERLESS_PYTHON_INSTALL_CMD, + installCommand: PYTHON_INSTALL_CMD, createIndex: ({ elasticsearchURL, apiKey, @@ -64,10 +69,32 @@ client.indices.create( "text": {"type": "text"} } } +)`, + }, + semantic: { + installCommand: PYTHON_INSTALL_CMD, + createIndex: ({ + elasticsearchURL, + apiKey, + indexName, + }: CodeSnippetParameters) => `from elasticsearch import Elasticsearch + +client = Elasticsearch( + "${elasticsearchURL}", + api_key="${apiKey ?? API_KEY_PLACEHOLDER}" +) + +client.indices.create( + index="${indexName ?? INDEX_PLACEHOLDER}", + mappings={ + "properties": { + "text": {"type": "semantic_text"} + } + } )`, }, }; -const serverlessIngestionCommand: IngestCodeSnippetFunction = ({ +const ingestionCommand: IngestCodeSnippetFunction = ({ elasticsearchURL, apiKey, indexName, @@ -86,7 +113,7 @@ docs = ${JSON.stringify(sampleDocuments, null, 4)} bulk_response = helpers.bulk(client, docs, index=index_name) print(bulk_response)`; -const serverlessUpdateMappingsCommand: IngestCodeSnippetFunction = ({ +const updateMappingsCommand: IngestCodeSnippetFunction = ({ elasticsearchURL, apiKey, indexName, @@ -106,8 +133,8 @@ mapping_response = client.indices.put_mapping(index=index_name, body=mappings) print(mapping_response) `; -export const PythonServerlessVectorsIngestDataExample: IngestDataCodeDefinition = { - installCommand: SERVERLESS_PYTHON_INSTALL_CMD, - ingestCommand: serverlessIngestionCommand, - updateMappingsCommand: serverlessUpdateMappingsCommand, +export const PythonIngestDataExample: IngestDataCodeDefinition = { + installCommand: PYTHON_INSTALL_CMD, + ingestCommand: ingestionCommand, + updateMappingsCommand, }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/sense.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/sense.ts index f54071003df64..8d6a01ff7e34c 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/sense.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/sense.ts @@ -11,7 +11,16 @@ import { CreateIndexLanguageExamples } from './types'; export const ConsoleCreateIndexExamples: CreateIndexLanguageExamples = { default: { - createIndex: ({ indexName }) => `PUT /${indexName ?? INDEX_PLACEHOLDER}`, + createIndex: ({ indexName }) => `PUT /${indexName ?? INDEX_PLACEHOLDER} +{ + "mappings": { + "properties":{ + "text":{ + "type":"text" + } + } + } +}`, }, dense_vector: { createIndex: ({ indexName }) => `PUT /${indexName ?? INDEX_PLACEHOLDER} @@ -27,11 +36,23 @@ export const ConsoleCreateIndexExamples: CreateIndexLanguageExamples = { } } } +}`, + }, + semantic: { + createIndex: ({ indexName }) => `PUT /${indexName ?? INDEX_PLACEHOLDER} +{ + "mappings": { + "properties":{ + "text":{ + "type":"semantic_text" + } + } + } }`, }, }; -export const ConsoleVectorsIngestDataExample: IngestDataCodeDefinition = { +export const ConsoleIngestDataExample: IngestDataCodeDefinition = { ingestCommand: ({ indexName, sampleDocuments }) => { let result = 'POST /_bulk?pretty\n'; sampleDocuments.forEach((document) => { diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/types.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/types.ts index dc8f877f565d5..cc99baae41a8c 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/code_examples/types.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/types.ts @@ -10,8 +10,11 @@ import { CreateIndexCodeDefinition, IngestDataCodeDefinition } from '../types'; export interface CreateIndexLanguageExamples { default: CreateIndexCodeDefinition; dense_vector: CreateIndexCodeDefinition; + semantic: CreateIndexCodeDefinition; } export interface IngestDataLanguageExamples { + default: IngestDataCodeDefinition; dense_vector: IngestDataCodeDefinition; + semantic: IngestDataCodeDefinition; } diff --git a/x-pack/solutions/search/plugins/search_indices/public/code_examples/workflows.ts b/x-pack/solutions/search/plugins/search_indices/public/code_examples/workflows.ts new file mode 100644 index 0000000000000..29d2a64254028 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_indices/public/code_examples/workflows.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 { i18n } from '@kbn/i18n'; + +export type WorkflowId = 'default' | 'vector' | 'semantic'; + +export interface Workflow { + title: string; + id: WorkflowId; + summary: string; +} + +export const workflows: Workflow[] = [ + { + title: i18n.translate('xpack.searchIndices.workflows.default', { + defaultMessage: 'Keyword Search', + }), + id: 'default', + summary: i18n.translate('xpack.searchIndices.workflows.defaultSummary', { + defaultMessage: 'Set up an index in Elasticsearch using the text field mapping.', + }), + }, + { + title: i18n.translate('xpack.searchIndices.workflows.vector', { + defaultMessage: 'Vector Search', + }), + id: 'vector', + summary: i18n.translate('xpack.searchIndices.workflows.vectorSummary', { + defaultMessage: 'Set up an index in Elasticsearch using the dense_vector field mapping.', + }), + }, + { + title: i18n.translate('xpack.searchIndices.workflows.semantic', { + defaultMessage: 'Semantic Search', + }), + id: 'semantic', + summary: i18n.translate('xpack.searchIndices.workflows.semanticSummary', { + defaultMessage: + "Semantic search in Elasticsearch is now simpler with the new semantic_text field type. This example walks through setting up your index with a semantic_text field, which uses Elastic's built-in ELSER machine learning model. If the model is not running, a new deployment will start once the mappings are defined.", + }), + }, +]; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index.tsx index f09ae3856c097..2f4081b99d486 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index.tsx @@ -22,6 +22,8 @@ import { CreateIndexPanel } from '../shared/create_index_panel'; import { CreateIndexCodeView } from './create_index_code_view'; import { CreateIndexUIView } from './create_index_ui_view'; +import { WorkflowId } from '../../code_examples/workflows'; +import { useWorkflow } from '../shared/hooks/use_workflow'; function initCreateIndexState() { const defaultIndexName = generateRandomIndexName(); @@ -50,6 +52,7 @@ export const CreateIndex = ({ indicesData }: CreateIndexProps) => { ? CreateIndexViewMode.Code : CreateIndexViewMode.UI ); + const { workflow, setSelectedWorkflowId } = useWorkflow(); const usageTracker = useUsageTracker(); const onChangeView = useCallback( (id: string) => { @@ -102,6 +105,14 @@ export const CreateIndex = ({ indicesData }: CreateIndexProps) => { selectedLanguage={formState.codingLanguage} indexName={formState.indexName} changeCodingLanguage={onChangeCodingLanguage} + changeWorkflowId={(workflowId: WorkflowId) => { + setSelectedWorkflowId(workflowId); + usageTracker.click([ + AnalyticsEvents.startCreateIndexWorkflowSelect, + `${AnalyticsEvents.startCreateIndexWorkflowSelect}_${workflowId}`, + ]); + }} + selectedWorkflow={workflow} canCreateApiKey={userPrivileges?.privileges.canCreateApiKeys} analyticsEvents={{ runInConsole: AnalyticsEvents.createIndexRunInConsole, diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index_page.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index_page.tsx index 56ee5f49c5339..1466fbdcec6a6 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index_page.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/create_index/create_index_page.tsx @@ -8,7 +8,7 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; -import { EuiLoadingLogo, EuiPageTemplate } from '@elastic/eui'; +import { EuiLoadingLogo } from '@elastic/eui'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { useKibana } from '../../hooks/use_kibana'; @@ -24,7 +24,7 @@ const CreateIndexLabel = i18n.translate('xpack.searchIndices.createIndex.docTitl }); export const CreateIndexPage = () => { - const { console: consolePlugin } = useKibana().services; + const { console: consolePlugin, history, searchNavigation } = useKibana().services; const { data: indicesData, isInitialLoading, @@ -39,11 +39,12 @@ export const CreateIndexPage = () => { usePageChrome(CreateIndexLabel, [...IndexManagementBreadcrumbs, { text: CreateIndexLabel }]); return ( - {isInitialLoading && } @@ -53,6 +54,6 @@ export const CreateIndexPage = () => { )} {embeddableConsole} - + ); }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx index c5fdc7428e690..e19ece4162dcb 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx @@ -7,11 +7,7 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { - AddDocumentsCodeExample, - basicExampleTexts, - exampleTextsWithCustomMapping, -} from './add_documents_code_example'; +import { AddDocumentsCodeExample, exampleTexts } from './add_documents_code_example'; import { generateSampleDocument } from '../../utils/document_generation'; import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; @@ -71,7 +67,7 @@ describe('AddDocumentsCodeExample', () => { expect(generateSampleDocument).toHaveBeenCalledTimes(3); - basicExampleTexts.forEach((text, index) => { + exampleTexts.forEach((text, index) => { expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); }); }); @@ -84,16 +80,15 @@ describe('AddDocumentsCodeExample', () => { expect(generateSampleDocument).toHaveBeenCalledTimes(3); const mappingProperties: Record = { - vector: { type: 'dense_vector', dims: 3 }, text: { type: 'text' }, }; - basicExampleTexts.forEach((text, index) => { + exampleTexts.forEach((text, index) => { expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); }); }); - it('pass basic examples when mapping is default with extra vector fields', () => { + it('pass examples when mapping is default with extra vector fields', () => { const indexName = 'test-index'; const mappingProperties: Record = { vector: { type: 'dense_vector', dims: 3, similarity: 'extra' }, @@ -106,25 +101,7 @@ describe('AddDocumentsCodeExample', () => { expect(generateSampleDocument).toHaveBeenCalledTimes(3); - basicExampleTexts.forEach((text, index) => { - expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); - }); - }); - - it('pass examples text when mapping is custom', () => { - const indexName = 'test-index'; - const mappingProperties: Record = { - text: { type: 'text' }, - test: { type: 'boolean' }, - }; - - render( - - ); - - expect(generateSampleDocument).toHaveBeenCalledTimes(3); - - exampleTextsWithCustomMapping.forEach((text, index) => { + exampleTexts.forEach((text, index) => { expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); }); }); diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx index d96055b5dc184..e4655f6a858b5 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx @@ -6,17 +6,15 @@ */ import React, { useCallback, useMemo, useState } from 'react'; -import { MappingDenseVectorProperty, MappingProperty } from '@elastic/elasticsearch/lib/api/types'; -import { EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui'; +import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; +import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { TryInConsoleButton } from '@kbn/try-in-console'; -import { isEqual } from 'lodash'; import { useSearchApiKey } from '@kbn/search-api-keys-components'; import { useKibana } from '../../hooks/use_kibana'; import { IngestCodeSnippetParameters } from '../../types'; import { LanguageSelector } from '../shared/language_selector'; -import { useIngestCodeExamples } from './hooks/use_ingest_code_examples'; import { useElasticsearchUrl } from '../../hooks/use_elasticsearch_url'; import { useUsageTracker } from '../../contexts/usage_tracker_context'; import { AvailableLanguages, LanguageOptions, Languages } from '../../code_examples'; @@ -24,13 +22,15 @@ import { AnalyticsEvents } from '../../analytics/constants'; import { CodeSample } from '../shared/code_sample'; import { generateSampleDocument } from '../../utils/document_generation'; import { getDefaultCodingLanguage } from '../../utils/language'; +import { GuideSelector } from '../shared/guide_selector'; +import { useWorkflow } from '../shared/hooks/use_workflow'; +import { WorkflowId } from '../../code_examples/workflows'; -export const basicExampleTexts = [ - 'Yellowstone National Park', - 'Yosemite National Park', - 'Rocky Mountain National Park', +export const exampleTexts = [ + 'Yellowstone National Park is one of the largest national parks in the United States. It ranges from the Wyoming to Montana and Idaho, and contains an area of 2,219,791 acress across three different states. Its most famous for hosting the geyser Old Faithful and is centered on the Yellowstone Caldera, the largest super volcano on the American continent. Yellowstone is host to hundreds of species of animal, many of which are endangered or threatened. Most notably, it contains free-ranging herds of bison and elk, alongside bears, cougars and wolves. The national park receives over 4.5 million visitors annually and is a UNESCO World Heritage Site.', + 'Yosemite National Park is a United States National Park, covering over 750,000 acres of land in California. A UNESCO World Heritage Site, the park is best known for its granite cliffs, waterfalls and giant sequoia trees. Yosemite hosts over four million visitors in most years, with a peak of five million visitors in 2016. The park is home to a diverse range of wildlife, including mule deer, black bears, and the endangered Sierra Nevada bighorn sheep. The park has 1,200 square miles of wilderness, and is a popular destination for rock climbers, with over 3,000 feet of vertical granite to climb. Its most famous and cliff is the El Capitan, a 3,000 feet monolith along its tallest face.', + 'Rocky Mountain National Park is one of the most popular national parks in the United States. It receives over 4.5 million visitors annually, and is known for its mountainous terrain, including Longs Peak, which is the highest peak in the park. The park is home to a variety of wildlife, including elk, mule deer, moose, and bighorn sheep. The park is also home to a variety of ecosystems, including montane, subalpine, and alpine tundra. The park is a popular destination for hiking, camping, and wildlife viewing, and is a UNESCO World Heritage Site.', ]; -export const exampleTextsWithCustomMapping = [1, 2, 3].map((num) => `Example text ${num}`); export interface AddDocumentsCodeExampleProps { indexName: string; @@ -42,41 +42,28 @@ export const AddDocumentsCodeExample = ({ mappingProperties, }: AddDocumentsCodeExampleProps) => { const { application, share, console: consolePlugin } = useKibana().services; - const ingestCodeExamples = useIngestCodeExamples(); const elasticsearchUrl = useElasticsearchUrl(); const usageTracker = useUsageTracker(); const indexHasMappings = Object.keys(mappingProperties).length > 0; const [selectedLanguage, setSelectedLanguage] = useState(getDefaultCodingLanguage); - const selectedCodeExamples = ingestCodeExamples[selectedLanguage]; - const codeSampleMappings = indexHasMappings - ? mappingProperties - : ingestCodeExamples.defaultMapping; + const { selectedWorkflowId, setSelectedWorkflowId, ingestExamples, workflow } = useWorkflow(); + const selectedCodeExamples = ingestExamples[selectedLanguage]; + const codeSampleMappings = indexHasMappings ? mappingProperties : ingestExamples.defaultMapping; const onSelectLanguage = useCallback( (value: AvailableLanguages) => { setSelectedLanguage(value); usageTracker.count([ - AnalyticsEvents.startCreateIndexLanguageSelect, - `${AnalyticsEvents.startCreateIndexLanguageSelect}_${value}`, + AnalyticsEvents.indexDetailsCodeLanguageSelect, + `${AnalyticsEvents.indexDetailsCodeLanguageSelect}_${value}`, ]); }, [usageTracker] ); const sampleDocuments = useMemo(() => { - // If the default mapping was used, we need to exclude generated vector fields - const copyCodeSampleMappings = { - ...codeSampleMappings, - vector: { - type: codeSampleMappings.vector?.type, - dims: (codeSampleMappings.vector as MappingDenseVectorProperty)?.dims, - }, - }; - const isDefaultMapping = isEqual(copyCodeSampleMappings, ingestCodeExamples.defaultMapping); - const sampleTexts = isDefaultMapping ? basicExampleTexts : exampleTextsWithCustomMapping; - - return sampleTexts.map((text) => generateSampleDocument(codeSampleMappings, text)); - }, [codeSampleMappings, ingestCodeExamples.defaultMapping]); + return exampleTexts.map((text) => generateSampleDocument(codeSampleMappings, text)); + }, [codeSampleMappings]); const { apiKey } = useSearchApiKey(); const codeParams: IngestCodeSnippetParameters = useMemo(() => { return { @@ -88,6 +75,7 @@ export const AddDocumentsCodeExample = ({ apiKey: apiKey || undefined, }; }, [indexName, elasticsearchUrl, sampleDocuments, codeSampleMappings, indexHasMappings, apiKey]); + const [panelRef, setPanelRef] = useState(null); return ( - - - + {!indexHasMappings && ( + + { + setSelectedWorkflowId(workflowId); + usageTracker.click([ + AnalyticsEvents.indexDetailsCodeLanguageSelect, + `${AnalyticsEvents.indexDetailsCodeLanguageSelect}_${workflowId}`, + ]); + }} + showTour + container={panelRef} + /> + + )} + {!!workflow && ( + + +

{workflow.title}

+
+ + +

{workflow.summary}

+
+
+ )} + + + {selectedCodeExamples.installCommand && ( { @@ -141,8 +158,8 @@ export const AddDocumentsCodeExample = ({ { diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/hooks/use_ingest_code_examples.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/hooks/use_ingest_code_examples.tsx deleted file mode 100644 index 7eb84e6f62933..0000000000000 --- a/x-pack/solutions/search/plugins/search_indices/public/components/index_documents/hooks/use_ingest_code_examples.tsx +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import * as IngestCodeExamples from '../../../code_examples/ingest_data'; - -export const useIngestCodeExamples = () => { - // TODO: Choose code examples based on onboarding token, stack vs es3, or project type - return IngestCodeExamples.DenseVectorServerlessCodeExamples; -}; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/indices/details_page.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/indices/details_page.tsx index fb09943710dc6..16b355955c2b2 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/indices/details_page.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/indices/details_page.tsx @@ -21,6 +21,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { SectionLoading } from '@kbn/es-ui-shared-plugin/public'; import { ApiKeyForm } from '@kbn/search-api-keys-components'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { useNavigateToDiscover } from '../../hooks/use_navigate_to_discover'; import { useIndex } from '../../hooks/api/use_index'; import { useKibana } from '../../hooks/use_kibana'; @@ -45,7 +46,14 @@ export const SearchIndexDetailsPage = () => { const indexName = decodeURIComponent(useParams<{ indexName: string }>().indexName); const tabId = decodeURIComponent(useParams<{ tabId: string }>().tabId); - const { console: consolePlugin, docLinks, application, history, share } = useKibana().services; + const { + console: consolePlugin, + docLinks, + application, + history, + share, + searchNavigation, + } = useKibana().services; const { data: index, refetch, @@ -71,12 +79,7 @@ export const SearchIndexDetailsPage = () => { }, [share, index]); const navigateToDiscover = useNavigateToDiscover(indexName); - const [hasDocuments, setHasDocuments] = useState(false); - const [isDocumentsLoading, setDocumentsLoading] = useState(true); - useEffect(() => { - setDocumentsLoading(isInitialLoading); - setHasDocuments(!(!isInitialLoading && indexDocuments?.results?.data.length === 0)); - }, [indexDocuments, isInitialLoading, setHasDocuments, setDocumentsLoading]); + const hasDocuments = Boolean(isInitialLoading || indexDocuments?.results?.data.length); usePageChrome(indexName, [ ...IndexManagementBreadcrumbs, @@ -189,13 +192,14 @@ export const SearchIndexDetailsPage = () => { } return ( - {isIndexError || isMappingsError || !index || !mappings || !indexDocuments ? ( { <> @@ -228,7 +232,7 @@ export const SearchIndexDetailsPage = () => { { @@ -311,6 +315,6 @@ export const SearchIndexDetailsPage = () => { /> )} {embeddableConsole} - + ); }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/quick_stats/quick_stat.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/quick_stats/quick_stat.tsx index 9df28ccec4bd6..9f2e3785b3681 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/quick_stats/quick_stat.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/quick_stats/quick_stat.tsx @@ -54,7 +54,7 @@ export const QuickStat: React.FC = ({ const id = useGeneratedHtmlId({ prefix: 'formAccordion', - suffix: title, + suffix: title.replace(/\s/g, '_'), }); return ( diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/shared/create_index_code_view.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/shared/create_index_code_view.tsx index c169179bf2982..389e5dcd0b989 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/shared/create_index_code_view.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/shared/create_index_code_view.tsx @@ -5,7 +5,7 @@ * 2.0. */ import React, { useMemo } from 'react'; -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; import { TryInConsoleButton } from '@kbn/try-in-console'; import { useSearchApiKey } from '@kbn/search-api-keys-components'; @@ -17,13 +17,17 @@ import { useElasticsearchUrl } from '../../hooks/use_elasticsearch_url'; import { APIKeyCallout } from './api_key_callout'; import { CodeSample } from './code_sample'; -import { useCreateIndexCodingExamples } from './hooks/use_create_index_coding_examples'; +import { useWorkflow } from './hooks/use_workflow'; import { LanguageSelector } from './language_selector'; +import { GuideSelector } from './guide_selector'; +import { Workflow, WorkflowId } from '../../code_examples/workflows'; export interface CreateIndexCodeViewProps { selectedLanguage: AvailableLanguages; indexName: string; changeCodingLanguage: (language: AvailableLanguages) => void; + changeWorkflowId: (workflowId: WorkflowId) => void; + selectedWorkflow?: Workflow; canCreateApiKey?: boolean; analyticsEvents: { runInConsole: string; @@ -36,12 +40,14 @@ export const CreateIndexCodeView = ({ analyticsEvents, canCreateApiKey, changeCodingLanguage, + changeWorkflowId, + selectedWorkflow, indexName, selectedLanguage, }: CreateIndexCodeViewProps) => { const { application, share, console: consolePlugin } = useKibana().services; const usageTracker = useUsageTracker(); - const selectedCodeExamples = useCreateIndexCodingExamples(); + const { createIndexExamples: selectedCodeExamples } = useWorkflow(); const elasticsearchUrl = useElasticsearchUrl(); const { apiKey } = useSearchApiKey(); @@ -64,30 +70,52 @@ export const CreateIndexCodeView = ({ )} - - - - - - { - usageTracker.click([ - analyticsEvents.runInConsole, - `${analyticsEvents.runInConsole}_${selectedLanguage}`, - ]); - }} - /> - - + + + + + + + { + usageTracker.click([ + analyticsEvents.runInConsole, + `${analyticsEvents.runInConsole}_${selectedLanguage}`, + ]); + }} + /> + + + + {!!selectedWorkflow && ( + <> + + +

{selectedWorkflow?.title}

+
+ + +

{selectedWorkflow?.summary}

+
+
+ + )} + + + {selectedCodeExample.installCommand && ( void; +} + +const PopoverCard: React.FC = ({ workflow, onChange, isSelected }) => ( + + {workflow.summary} + + } + selectable={{ + onClick: () => onChange(workflow.id), + isSelected, + }} + /> +); + +interface GuideSelectorProps { + selectedWorkflowId: WorkflowId; + onChange: (workflow: WorkflowId) => void; + showTour: boolean; + container?: HTMLElement | null; +} + +export const GuideSelector: React.FC = ({ + selectedWorkflowId, + onChange, + showTour, + container, +}) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const { tourIsOpen, setTourIsOpen } = useGuideTour(); + + const onPopoverClick = () => { + setIsPopoverOpen(() => !isPopoverOpen); + }; + + useEffect(() => { + closePopover(); + }, [selectedWorkflowId]); + + const closePopover = () => setIsPopoverOpen(false); + + const PopoverButton = ( + + {i18n.translate('xpack.searchIndices.guideSelector.selectWorkflow', { + defaultMessage: 'Select a guide', + })} + + ); + + const Popover = () => ( + + <> + + {workflows.map((workflow) => ( + + onChange(value)} + /> + + ))} + + + + ); + + return showTour ? ( + +

+ {i18n.translate('xpack.searchIndices.tourDescription', { + defaultMessage: 'Explore additional guides for setting up your Elasticsearch index.', + })} +

+ + } + isStepOpen={tourIsOpen} + minWidth={300} + onFinish={() => setTourIsOpen(false)} + step={1} + stepsTotal={1} + title={i18n.translate('xpack.searchIndices.touTitle', { + defaultMessage: 'New guides available!', + })} + anchorPosition="rightUp" + > + +
+ ) : ( + + ); +}; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_create_index_coding_examples.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_create_index_coding_examples.tsx deleted file mode 100644 index fb1cb6a7eab52..0000000000000 --- a/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_create_index_coding_examples.tsx +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { CreateIndexCodeExamples } from '../../../types'; -import { DenseVectorSeverlessCodeExamples } from '../../../code_examples/create_index'; - -export const useCreateIndexCodingExamples = (): CreateIndexCodeExamples => { - // TODO: in the future this will be dynamic based on the onboarding token - // or project sub-type - return DenseVectorSeverlessCodeExamples; -}; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_guide_tour.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_guide_tour.tsx new file mode 100644 index 0000000000000..fee2fc156a914 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_guide_tour.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 { useState } from 'react'; + +const GUIDE_TOUR_KEY = 'searchIndicesIngestDataGuideTour'; + +export const useGuideTour = () => { + const hasDismissedGuide = localStorage.getItem(GUIDE_TOUR_KEY) === 'dismissed'; + const [tourIsOpen, setTourIsOpen] = useState(!hasDismissedGuide); + return { + tourIsOpen, + setTourIsOpen: (isOpen: boolean) => { + setTourIsOpen(isOpen); + localStorage.setItem(GUIDE_TOUR_KEY, isOpen ? '' : 'dismissed'); + }, + }; +}; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_workflow.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_workflow.tsx new file mode 100644 index 0000000000000..0db49738aed8d --- /dev/null +++ b/x-pack/solutions/search/plugins/search_indices/public/components/shared/hooks/use_workflow.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 { useState } from 'react'; +import { + DenseVectorIngestDataCodeExamples, + SemanticIngestDataCodeExamples, + DefaultIngestDataCodeExamples, +} from '../../../code_examples/ingest_data'; +import { WorkflowId, workflows } from '../../../code_examples/workflows'; +import { + DefaultCodeExamples, + DenseVectorCodeExamples, + SemanticCodeExamples, +} from '../../../code_examples/create_index'; + +const workflowIdToCreateIndexExamples = (type: WorkflowId) => { + switch (type) { + case 'vector': + return DenseVectorCodeExamples; + case 'semantic': + return SemanticCodeExamples; + default: + return DefaultCodeExamples; + } +}; + +const workflowIdToIngestDataExamples = (type: WorkflowId) => { + switch (type) { + case 'vector': + return DenseVectorIngestDataCodeExamples; + case 'semantic': + return SemanticIngestDataCodeExamples; + default: + return DefaultIngestDataCodeExamples; + } +}; + +export const useWorkflow = () => { + // TODO: in the future this will be dynamic based on the onboarding token + // or project sub-type + const [selectedWorkflowId, setSelectedWorkflowId] = useState('default'); + return { + selectedWorkflowId, + setSelectedWorkflowId, + workflow: workflows.find((workflow) => workflow.id === selectedWorkflowId), + createIndexExamples: workflowIdToCreateIndexExamples(selectedWorkflowId), + ingestExamples: workflowIdToIngestDataExamples(selectedWorkflowId), + }; +}; diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/shared/language_selector.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/shared/language_selector.tsx index ce31e4c38e0fe..406b658cb181d 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/shared/language_selector.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/shared/language_selector.tsx @@ -17,12 +17,14 @@ export interface LanguageSelectorProps { selectedLanguage: AvailableLanguages; options: CodeLanguage[]; onSelectLanguage: (value: AvailableLanguages) => void; + showLabel?: boolean; } export const LanguageSelector = ({ selectedLanguage, options, onSelectLanguage, + showLabel = false, }: LanguageSelectorProps) => { const assetBasePath = useAssetBasePath(); const languageOptions = useMemo( @@ -48,6 +50,16 @@ export const LanguageSelector = ({ ); return ( + prepend={ + showLabel + ? i18n.translate('xpack.searchIndices.codeLanguage.selectLabel', { + defaultMessage: 'Language', + }) + : undefined + } + aria-label={i18n.translate('xpack.searchIndices.codeLanguage.selectLabel', { + defaultMessage: 'Select a programming language for the code examples', + })} options={languageOptions} valueOfSelected={selectedLanguage} onChange={(value) => onSelectLanguage(value)} diff --git a/x-pack/solutions/search/plugins/search_indices/public/components/start/elasticsearch_start.tsx b/x-pack/solutions/search/plugins/search_indices/public/components/start/elasticsearch_start.tsx index 7b525250ff493..0b359688353a5 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/components/start/elasticsearch_start.tsx +++ b/x-pack/solutions/search/plugins/search_indices/public/components/start/elasticsearch_start.tsx @@ -23,6 +23,8 @@ import { CreateIndexFormState, CreateIndexViewMode } from '../../types'; import { CreateIndexPanel } from '../shared/create_index_panel'; import { useKibana } from '../../hooks/use_kibana'; import { useUserPrivilegesQuery } from '../../hooks/api/use_user_permissions'; +import { WorkflowId } from '../../code_examples/workflows'; +import { useWorkflow } from '../shared/hooks/use_workflow'; function initCreateIndexState(): CreateIndexFormState { const defaultIndexName = generateRandomIndexName(); @@ -48,6 +50,7 @@ export const ElasticsearchStart: React.FC = () => { : CreateIndexViewMode.UI ); const usageTracker = useUsageTracker(); + const { workflow, setSelectedWorkflowId } = useWorkflow(); useEffect(() => { usageTracker.load(AnalyticsEvents.startPageOpened); @@ -114,6 +117,14 @@ export const ElasticsearchStart: React.FC = () => { selectedLanguage={formState.codingLanguage} indexName={formState.indexName} changeCodingLanguage={onChangeCodingLanguage} + changeWorkflowId={(workflowId: WorkflowId) => { + setSelectedWorkflowId(workflowId); + usageTracker.click([ + AnalyticsEvents.startCreateIndexWorkflowSelect, + `${AnalyticsEvents.startCreateIndexWorkflowSelect}_${workflowId}`, + ]); + }} + selectedWorkflow={workflow} canCreateApiKey={userPrivileges?.privileges.canCreateApiKeys} analyticsEvents={{ runInConsole: AnalyticsEvents.startCreateIndexRunInConsole, diff --git a/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_document_search.ts b/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_document_search.ts index a8afd69385623..db0e9bac718c8 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_document_search.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_document_search.ts @@ -27,7 +27,7 @@ export const useIndexDocumentSearch = (indexName: string) => { const { services: { http }, } = useKibana(); - const response = useQuery({ + const { data, isInitialLoading } = useQuery({ queryKey: [QueryKeys.SearchDocuments, indexName], refetchInterval: INDEX_SEARCH_POLLING, refetchIntervalInBackground: true, @@ -46,7 +46,8 @@ export const useIndexDocumentSearch = (indexName: string) => { }), }); return { - ...response, - meta: pageToPagination(response?.data?.results?._meta?.page ?? DEFAULT_PAGINATION), + data, + isInitialLoading, + meta: pageToPagination(data?.results?._meta?.page ?? DEFAULT_PAGINATION), }; }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index.ts b/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index.ts index e91e4c9d06f5f..1f0ad428a33b9 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index.ts @@ -14,7 +14,7 @@ const POLLING_INTERVAL = 15 * 1000; export const useIndex = (indexName: string) => { const { http } = useKibana().services; const queryKey = [QueryKeys.FetchIndex, indexName]; - const result = useQuery({ + return useQuery({ queryKey, refetchInterval: POLLING_INTERVAL, refetchIntervalInBackground: true, @@ -25,5 +25,4 @@ export const useIndex = (indexName: string) => { queryFn: () => http.fetch(`/internal/index_management/indices/${encodeURIComponent(indexName)}`), }); - return { queryKey, ...result }; }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index_mappings.ts b/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index_mappings.ts index 1d5a83aa920ed..b09cf79f4aba4 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index_mappings.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/hooks/api/use_index_mappings.ts @@ -14,7 +14,7 @@ const POLLING_INTERVAL = 15 * 1000; export const useIndexMapping = (indexName: string) => { const { http } = useKibana().services; const queryKey = [QueryKeys.FetchMapping, indexName]; - const result = useQuery({ + return useQuery({ queryKey, refetchInterval: POLLING_INTERVAL, refetchIntervalInBackground: true, @@ -22,5 +22,4 @@ export const useIndexMapping = (indexName: string) => { queryFn: () => http.fetch(`/api/index_management/mapping/${encodeURIComponent(indexName)}`), }); - return { queryKey, ...result }; }; diff --git a/x-pack/solutions/search/plugins/search_indices/public/types.ts b/x-pack/solutions/search/plugins/search_indices/public/types.ts index abf749b67e374..d74de14c58784 100644 --- a/x-pack/solutions/search/plugins/search_indices/public/types.ts +++ b/x-pack/solutions/search/plugins/search_indices/public/types.ts @@ -7,6 +7,7 @@ import type { CloudSetup, CloudStart } from '@kbn/cloud-plugin/public'; import type { ConsolePluginSetup, ConsolePluginStart } from '@kbn/console-plugin/public'; +import type { SearchNavigationPluginStart } from '@kbn/search-navigation/public'; import type { AppMountParameters, CoreStart } from '@kbn/core/public'; import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import type { @@ -50,6 +51,7 @@ export interface SearchIndicesAppPluginStartDependencies { serverless?: ServerlessPluginStart; usageCollection?: UsageCollectionStart; indexManagement: IndexManagementPluginStart; + searchNavigation?: SearchNavigationPluginStart; } export interface SearchIndicesServicesContextDeps { diff --git a/x-pack/solutions/search/plugins/search_indices/server/config.ts b/x-pack/solutions/search/plugins/search_indices/server/config.ts index 408d45cf23e2e..7aab566c6a7f0 100644 --- a/x-pack/solutions/search/plugins/search_indices/server/config.ts +++ b/x-pack/solutions/search/plugins/search_indices/server/config.ts @@ -9,7 +9,7 @@ import { schema, TypeOf } from '@kbn/config-schema'; import { PluginConfigDescriptor } from '@kbn/core/server'; const configSchema = schema.object({ - enabled: schema.boolean({ defaultValue: false }), + enabled: schema.boolean({ defaultValue: true }), }); export type SearchIndicesConfig = TypeOf; diff --git a/x-pack/solutions/search/plugins/search_indices/server/routes/indices.ts b/x-pack/solutions/search/plugins/search_indices/server/routes/indices.ts index c726f2fc62975..d8a65f87300cd 100644 --- a/x-pack/solutions/search/plugins/search_indices/server/routes/indices.ts +++ b/x-pack/solutions/search/plugins/search_indices/server/routes/indices.ts @@ -9,9 +9,9 @@ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; import type { IRouter } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; - -import { fetchSearchResults } from '@kbn/search-index-documents/lib'; import { DEFAULT_DOCS_PER_PAGE } from '@kbn/search-index-documents/types'; +import { fetchSearchResults } from '@kbn/search-index-documents/lib'; + import { POST_CREATE_INDEX_ROUTE, SEARCH_DOCUMENTS_ROUTE } from '../../common/routes'; import { CreateIndexRequest } from '../../common/types'; import { createIndex } from '../lib/indices'; @@ -64,6 +64,7 @@ export function registerIndicesRoutes(router: IRouter, logger: Logger) { } } ); + router.post( { path: SEARCH_DOCUMENTS_ROUTE, diff --git a/x-pack/solutions/search/plugins/search_indices/tsconfig.json b/x-pack/solutions/search/plugins/search_indices/tsconfig.json index 471a6a5541a5f..c69c785e087ab 100644 --- a/x-pack/solutions/search/plugins/search_indices/tsconfig.json +++ b/x-pack/solutions/search/plugins/search_indices/tsconfig.json @@ -39,7 +39,8 @@ "@kbn/deeplinks-search", "@kbn/core-chrome-browser", "@kbn/serverless", - "@kbn/utility-types" + "@kbn/utility-types", + "@kbn/search-navigation" ], "exclude": [ "target/**/*", diff --git a/x-pack/solutions/search/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts b/x-pack/solutions/search/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts index 7ab5f261989a4..7ba2cef9b2b34 100644 --- a/x-pack/solutions/search/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts +++ b/x-pack/solutions/search/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts @@ -11,10 +11,10 @@ export const SPARSE_SEMANTIC_FIELD_FIELD_CAPS = { indices: ['test-index2'], fields: { infer_field: { - semantic_text: { - type: 'semantic_text', + text: { + type: 'text', metadata_field: false, - searchable: false, + searchable: true, aggregatable: false, }, }, @@ -127,10 +127,10 @@ export const DENSE_SEMANTIC_FIELD_FIELD_CAPS = { indices: ['test-index2'], fields: { infer_field: { - semantic_text: { - type: 'semantic_text', + text: { + type: 'text', metadata_field: false, - searchable: false, + searchable: true, aggregatable: false, }, }, diff --git a/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.test.tsx b/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.test.tsx index 485bb5eb5df55..ed9799abc2578 100644 --- a/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.test.tsx +++ b/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.test.tsx @@ -56,7 +56,8 @@ describe('CreateIndexButton', () => { url: { locators: { get: jest.fn().mockReturnValue({ - getUrl: jest.fn().mockReturnValue('mock-create-index-url'), + getUrl: jest.fn().mockReturnValue('mock-url'), + getRedirectUrl: jest.fn().mockReturnValue('mock-shown-url'), }), }, }, @@ -72,7 +73,7 @@ describe('CreateIndexButton', () => { fireEvent.click(createIndexButton); await waitFor(() => { - expect(navigateToUrl).toHaveBeenCalledWith('mock-create-index-url'); + expect(navigateToUrl).toHaveBeenCalledWith('mock-url'); }); }); }); diff --git a/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.tsx b/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.tsx index 5bc9f84c833fb..0d12e58c22eed 100644 --- a/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.tsx +++ b/x-pack/solutions/search/plugins/search_playground/public/components/setup_page/create_index_button.tsx @@ -15,27 +15,35 @@ export const CreateIndexButton: React.FC = () => { const { services: { application, share }, } = useKibana(); + const createIndexLocator = useMemo( - () => - share.url.locators.get('CREATE_INDEX_LOCATOR_ID') ?? - share.url.locators.get('SEARCH_CREATE_INDEX'), + () => share.url.locators.get('SEARCH_CREATE_INDEX'), [share.url.locators] ); - const handleNavigateToIndex = useCallback(async () => { - const createIndexUrl = await createIndexLocator?.getUrl({}); - if (createIndexUrl) { - application?.navigateToUrl(createIndexUrl); - } - }, [application, createIndexLocator]); + const handleCreateIndexClick = useCallback( + async (event: React.MouseEvent) => { + event.preventDefault(); + + if (!createIndexLocator) { + return; + } + + const url = await createIndexLocator.getUrl({}); + application?.navigateToUrl(url); + }, + [application, createIndexLocator] + ); return createIndexLocator ? ( + // eslint-disable-next-line @elastic/eui/href-or-on-click { { standard: { query: { - nested: { - inner_hits: { - _source: ['field2.inference.chunks.text'], - name: 'index1.field2', - size: 2, - }, - path: 'field2.inference.chunks', - query: { - sparse_vector: { - field: 'field2.inference.chunks.embeddings', - inference_id: 'model2', - query: '{query}', - }, - }, + semantic: { + field: 'field2', + query: '{query}', }, }, }, @@ -542,6 +531,15 @@ describe('create_query', () => { ], }, }, + highlight: { + fields: { + field2: { + number_of_fragments: 2, + order: 'score', + type: 'semantic', + }, + }, + }, }); }); @@ -638,24 +636,9 @@ describe('create_query', () => { { standard: { query: { - nested: { - inner_hits: { - _source: ['field2.inference.chunks.text'], - name: 'index1.field2', - size: 2, - }, - path: 'field2.inference.chunks', - query: { - knn: { - field: 'field2.inference.chunks.embeddings', - query_vector_builder: { - text_embedding: { - model_id: 'model2', - model_text: '{query}', - }, - }, - }, - }, + semantic: { + field: 'field2', + query: '{query}', }, }, }, @@ -668,6 +651,15 @@ describe('create_query', () => { ], }, }, + highlight: { + fields: { + field2: { + number_of_fragments: 2, + order: 'score', + type: 'semantic', + }, + }, + }, }); }); diff --git a/x-pack/solutions/search/plugins/search_playground/public/utils/create_query.ts b/x-pack/solutions/search/plugins/search_playground/public/utils/create_query.ts index 63cdcdf76bb65..cf0a1846bfb65 100644 --- a/x-pack/solutions/search/plugins/search_playground/public/utils/create_query.ts +++ b/x-pack/solutions/search/plugins/search_playground/public/utils/create_query.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { RetrieverContainer } from '@elastic/elasticsearch/lib/api/types'; +import { RetrieverContainer, SearchHighlight } from '@elastic/elasticsearch/lib/api/types'; import { IndicesQuerySourceFields, QuerySourceFields } from '../types'; export type IndexFields = Record; @@ -36,6 +36,8 @@ const SUGGESTED_SOURCE_FIELDS = [ 'text_field', ]; +const SEMANTIC_FIELD_TYPE = 'semantic'; + interface Matches { queryMatches: any[]; knnMatches: any[]; @@ -52,7 +54,7 @@ export function createQuery( rerankOptions: ReRankOptions = { rrf: true, } -): { retriever: RetrieverContainer } { +): { retriever: RetrieverContainer; highlight?: SearchHighlight } { const indices = Object.keys(fieldDescriptors); const boolMatches = Object.keys(fields).reduce( (acc, index) => { @@ -64,60 +66,8 @@ export function createQuery( const semanticMatches = indexFields.map((field) => { const semanticField = indexFieldDescriptors.semantic_fields.find((x) => x.field === field); - const isSourceField = sourceFields[index].includes(field); - - // this is needed to get the inner_hits for the source field - // we cant rely on only the semantic field - // in future inner_hits option will be added to semantic - if (semanticField && isSourceField) { - if (semanticField.embeddingType === 'dense_vector') { - const filter = - semanticField.indices.length < indices.length - ? { filter: { terms: { _index: semanticField.indices } } } - : {}; - return { - nested: { - path: `${semanticField.field}.inference.chunks`, - query: { - knn: { - field: `${semanticField.field}.inference.chunks.embeddings`, - ...filter, - query_vector_builder: { - text_embedding: { - model_id: semanticField.inferenceId, - model_text: '{query}', - }, - }, - }, - }, - inner_hits: { - size: 2, - name: `${index}.${semanticField.field}`, - _source: [`${semanticField.field}.inference.chunks.text`], - }, - }, - }; - } else if (semanticField.embeddingType === 'sparse_vector') { - return { - nested: { - path: `${semanticField.field}.inference.chunks`, - query: { - sparse_vector: { - inference_id: semanticField.inferenceId, - field: `${semanticField.field}.inference.chunks.embeddings`, - query: '{query}', - }, - }, - inner_hits: { - size: 2, - name: `${index}.${semanticField.field}`, - _source: [`${semanticField.field}.inference.chunks.text`], - }, - }, - }; - } - } else if (semanticField) { + if (semanticField) { return { semantic: { field: semanticField.field, @@ -241,12 +191,34 @@ export function createQuery( // for single Elser support to make it easy to read - skips bool query if (boolMatches.queryMatches.length === 1 && boolMatches.knnMatches.length === 0) { + const semanticField = boolMatches.queryMatches[0].semantic?.field ?? null; + + let isSourceField = false; + indices.forEach((index) => { + if (sourceFields[index].includes(semanticField)) { + isSourceField = true; + } + }); + return { retriever: { standard: { query: boolMatches.queryMatches[0], }, }, + ...(isSourceField + ? { + highlight: { + fields: { + [semanticField]: { + type: SEMANTIC_FIELD_TYPE, + number_of_fragments: 2, + order: 'score', + }, + }, + }, + } + : {}), }; } @@ -285,12 +257,39 @@ export function createQuery( }; }); + const semanticFields = matches + .filter((match) => match.semantic) + .map((match) => match.semantic.field) + .filter((field) => { + let isSourceField = false; + indices.forEach((index) => { + if (sourceFields[index].includes(field)) { + isSourceField = true; + } + }); + return isSourceField; + }); + return { retriever: { rrf: { retrievers, }, }, + ...(semanticFields.length > 0 + ? { + highlight: { + fields: semanticFields.reduce((acc, field) => { + acc[field] = { + type: SEMANTIC_FIELD_TYPE, + number_of_fragments: 2, + order: 'score', + }; + return acc; + }, {}), + }, + } + : {}), }; } diff --git a/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts b/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts index d8958da6ff112..5a59ddead7d9c 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts @@ -237,19 +237,7 @@ describe('conversational chain', () => { { _index: 'index', _id: '1', - inner_hits: { - 'index.field': { - hits: { - hits: [ - { - _source: { - text: 'value', - }, - }, - ], - }, - }, - }, + highlight: { field: ['value'] }, }, ], expectedDocs: [ diff --git a/x-pack/solutions/search/plugins/search_playground/server/lib/fetch_query_source_fields.ts b/x-pack/solutions/search/plugins/search_playground/server/lib/fetch_query_source_fields.ts index 9592766e115ec..154261a019528 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/lib/fetch_query_source_fields.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/lib/fetch_query_source_fields.ts @@ -244,10 +244,9 @@ export const parseFieldsCapabilities = ( (indexModelIdField) => indexModelIdField.index === index )!; const nestedField = isFieldNested(fieldKey, fieldCapsResponse); + const semanticFieldMapping = getSemanticField(fieldKey, semanticTextFields); - if (isFieldInIndex(field, 'semantic_text', index)) { - const semanticFieldMapping = getSemanticField(fieldKey, semanticTextFields); - + if (isFieldInIndex(field, 'text', index) && semanticFieldMapping) { // only use this when embeddingType and inferenceId is defined // this requires semantic_text field to be set up correctly and ingested if ( @@ -260,7 +259,7 @@ export const parseFieldsCapabilities = ( field: fieldKey, inferenceId: semanticFieldMapping.inferenceId, embeddingType: semanticFieldMapping.embeddingType, - indices: (field.semantic_text.indices as string[]) || indicesPresentIn, + indices: (field.text.indices as string[]) || indicesPresentIn, }; acc[index].semantic_fields.push(semanticField); diff --git a/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts b/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts index 7eae929cc70c0..11351c56adb97 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.test.ts @@ -78,49 +78,30 @@ describe('getValueForSelectedField', () => { expect(getValueForSelectedField(hit, 'bla.sources')).toBe(''); }); - test('should return when its a chunked passage', () => { + test('should return when it has highlighted messages', () => { const hit = { - _index: 'sample-index', + _index: 'books', _id: '8jSNY48B6iHEi98DL1C-', _score: 0.7789394, _source: { - test: 'The Shawshank Redemption', + test: 'The Big Bang and Black Holes', metadata: { source: - 'Over the course of several years, two convicts form a friendship, seeking consolation and, eventually, redemption through basic compassion', + 'This book explores the origins of the universe, beginning with the Big Bang—an immense explosion that created space, time, and matter. It delves into how black holes, regions of space where gravity is so strong that not even light can escape, play a crucial role in the evolution of galaxies and the universe as a whole. Stephen Hawking’s groundbreaking discoveries about black hole radiation, often referred to as Hawking Radiation, are also discussed in detail.', }, }, - inner_hits: { - 'sample-index.test': { - hits: { - hits: [ - { - _source: { - text: 'Over the course of several years', - }, - }, - { - _source: { - text: 'two convicts form a friendship', - }, - }, - { - _source: { - text: 'seeking consolation and, eventually, redemption through basic compassion', - }, - }, - ], - }, - }, + highlight: { + test: [ + 'This book explores the origins of the universe.', + 'The beginning with the Big Bang—an immense explosion that created space, time, and matter. It delves into how black holes, regions of space where gravity is so strong that not even light can escape, play a crucial role in the evolution of galaxies and the universe as a whole. Stephen Hawking’s groundbreaking discoveries about black hole radiation, often referred to as Hawking Radiation, are also discussed in detail.', + ], }, }; expect(getValueForSelectedField(hit as any, 'test')).toMatchInlineSnapshot(` - "Over the course of several years - --- - two convicts form a friendship + "This book explores the origins of the universe. --- - seeking consolation and, eventually, redemption through basic compassion" + The beginning with the Big Bang—an immense explosion that created space, time, and matter. It delves into how black holes, regions of space where gravity is so strong that not even light can escape, play a crucial role in the evolution of galaxies and the universe as a whole. Stephen Hawking’s groundbreaking discoveries about black hole radiation, often referred to as Hawking Radiation, are also discussed in detail." `); }); diff --git a/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.ts b/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.ts index 5556e407de979..fe0772a314327 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/utils/get_value_for_selected_field.ts @@ -14,11 +14,8 @@ export const getValueForSelectedField = (hit: SearchHit, path: string): string = } // for semantic_text matches - const innerHitPath = `${hit._index}.${path}`; - if (!!hit.inner_hits?.[innerHitPath]) { - return hit.inner_hits[innerHitPath].hits.hits - .map((innerHit) => innerHit._source.text) - .join('\n --- \n'); + if (hit.highlight && hit.highlight[path]) { + return hit.highlight[path].flat().join('\n --- \n'); } return has(hit._source, `${path}.text`) diff --git a/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.ts b/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.ts index 529b913293021..c21d9cc005fa3 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.ts @@ -107,7 +107,7 @@ export function streamFactory(logger: Logger, isCloud: boolean = false): StreamF ); if (line === undefined) { - logger.error('Stream chunk must not be undefined.'); + logDebugMessage('Stream chunk must not be undefined.'); return; } diff --git a/x-pack/solutions/search/plugins/search_solution/search_navigation/public/classic_navigation.test.ts b/x-pack/solutions/search/plugins/search_solution/search_navigation/public/classic_navigation.test.ts index bb9789442c18b..c24e7df81329e 100644 --- a/x-pack/solutions/search/plugins/search_solution/search_navigation/public/classic_navigation.test.ts +++ b/x-pack/solutions/search/plugins/search_solution/search_navigation/public/classic_navigation.test.ts @@ -18,11 +18,6 @@ describe('classicNavigationFactory', function () { url: '/app/elasticsearch/overview', title: 'Overview', }, - { - id: 'enterpriseSearchContent:searchIndices', - title: 'Indices', - url: '/app/elasticsearch/content/search_indices', - }, { id: 'enterpriseSearchContent:connectors', title: 'Connectors', @@ -110,12 +105,6 @@ describe('classicNavigationFactory', function () { id: 'searchContent', name: 'Content', items: [ - { - id: 'searchIndices', - deepLink: { - link: 'enterpriseSearchContent:searchIndices', - }, - }, { id: 'searchConnectors', deepLink: { @@ -131,13 +120,6 @@ describe('classicNavigationFactory', function () { { id: 'searchContent', items: [ - { - href: '/app/elasticsearch/content/search_indices', - id: 'searchIndices', - isSelected: false, - name: 'Indices', - onClick: expect.any(Function), - }, { href: '/app/elasticsearch/content/connectors', id: 'searchConnectors', @@ -153,20 +135,20 @@ describe('classicNavigationFactory', function () { it('returns name if provided over the deeplink title', () => { const items: ClassicNavItem[] = [ { - id: 'searchIndices', + id: 'searchConnectors', deepLink: { - link: 'enterpriseSearchContent:searchIndices', + link: 'enterpriseSearchContent:connectors', }, - name: 'Index Management', + name: 'Date connectors', }, ]; const solutionNav = classicNavigationFactory(items, core, history); expect(solutionNav!.items).toEqual([ { - href: '/app/elasticsearch/content/search_indices', - id: 'searchIndices', + href: '/app/elasticsearch/content/connectors', + id: 'searchConnectors', isSelected: false, - name: 'Index Management', + name: 'Date connectors', onClick: expect.any(Function), }, ]); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts index e837aaf1b47d8..313256ce655af 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/common/constants.ts @@ -12,3 +12,8 @@ export const ACTOR_ENTITY_ID = 'actor.entity.id' as const; export const TARGET_ENTITY_ID = 'target.entity.id' as const; export const EVENT_ACTION = 'event.action' as const; export const EVENT_ID = 'event.id' as const; + +export const SHOW_SEARCH_BAR_BUTTON_TOUR_STORAGE_KEY = + 'securitySolution.graphInvestigation:showSearchBarButtonTour' as const; +export const TOGGLE_SEARCH_BAR_STORAGE_KEY = + 'securitySolution.graphInvestigation:toggleSearchBarState' as const; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.stories.tsx index 6c53cb7a61bca..c6706e1d76436 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.stories.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.stories.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { Story } from '@storybook/react'; +import type { Meta, Story } from '@storybook/react'; import { ThemeProvider, css } from '@emotion/react'; import { action } from '@storybook/addon-actions'; import { Actions as ActionsComponent, type ActionsProps } from './actions'; @@ -14,8 +14,12 @@ import { Actions as ActionsComponent, type ActionsProps } from './actions'; export default { title: 'Components/Graph Components/Additional Components', description: 'CDR - Graph visualization', - argTypes: {}, -}; + argTypes: { + searchWarningMessage: { + control: 'object', + }, + }, +} as Meta; const Template: Story = (props) => { return ( @@ -38,4 +42,5 @@ Actions.args = { showToggleSearch: true, searchFilterCounter: 0, showInvestigateInTimeline: true, + searchToggled: false, }; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.test.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.test.tsx index 593dca424c600..9f8b6f976aac9 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.test.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.test.tsx @@ -6,14 +6,18 @@ */ import React from 'react'; -import { render, fireEvent } from '@testing-library/react'; -import { Actions, ActionsProps } from './actions'; +import { render, fireEvent, waitFor } from '@testing-library/react'; import { EuiThemeProvider } from '@elastic/eui'; +import { Actions, ActionsProps } from './actions'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; import { GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID, GRAPH_ACTIONS_TOGGLE_SEARCH_ID, } from '../test_ids'; +jest.mock('react-use/lib/useLocalStorage', () => jest.fn().mockReturnValue([false, jest.fn()])); +const SEARCH_BAR_TOUR_TITLE = 'Refine your view with search'; + const defaultProps: ActionsProps = { showToggleSearch: true, showInvestigateInTimeline: true, @@ -89,13 +93,124 @@ describe('Actions component', () => { expect(getByText('5')).toBeInTheDocument(); }); - it('renders "9" in search filter counter badge when searchFilterCounter is equal to 9', () => { - const { getByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 9 }); - expect(getByText('9')).toBeInTheDocument(); + it('renders "99" in search filter counter badge when searchFilterCounter is equal to 99', () => { + const { getByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 99 }); + expect(getByText('99')).toBeInTheDocument(); + }); + + it('renders "99+" in search filter counter badge when searchFilterCounter is greater than 99', () => { + const { getByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 100 }); + expect(getByText('99+')).toBeInTheDocument(); + }); + + describe('search warning message', () => { + it('should show search warning message when searchWarningMessage is provided', async () => { + const { getByTestId, getByText, container } = renderWithProviders({ + ...defaultProps, + searchWarningMessage: { + title: 'Warning title', + content: 'Warning content', + }, + }); + expect(container.querySelector('.euiBeacon')).toBeInTheDocument(); + + getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID).focus(); + await waitFor(() => { + expect(getByText('Warning title')).toBeInTheDocument(); + expect(getByText('Warning content')).toBeInTheDocument(); + }); + }); + + it('should show search warning message when search button is toggled', async () => { + const { getByTestId, getByText, container } = renderWithProviders({ + ...defaultProps, + searchToggled: true, + searchWarningMessage: { + title: 'Warning title', + content: 'Warning content', + }, + }); + + expect(container.querySelector('.euiBeacon')).toBeInTheDocument(); + + getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID).focus(); + await waitFor(() => { + expect(getByText('Warning title')).toBeInTheDocument(); + expect(getByText('Warning content')).toBeInTheDocument(); + }); + }); }); - it('renders "9+" in search filter counter badge when searchFilterCounter is greater than 9', () => { - const { getByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 10 }); - expect(getByText('9+')).toBeInTheDocument(); + describe('search bar tour', () => { + it('opens the search bar tour when searchFilterCounter is greater than 0 and shouldShowSearchBarButtonTour is true', () => { + let shouldShowSearchBarButtonTour = true; + const setShouldShowSearchBarButtonTourMock = jest.fn( + (value: boolean) => (shouldShowSearchBarButtonTour = value) + ); + (useLocalStorage as jest.Mock).mockImplementation(() => [ + shouldShowSearchBarButtonTour, + setShouldShowSearchBarButtonTourMock, + ]); + const { getByText } = renderWithProviders({ + ...defaultProps, + searchFilterCounter: 3, + }); + + expect(getByText(SEARCH_BAR_TOUR_TITLE)).toBeInTheDocument(); + expect(setShouldShowSearchBarButtonTourMock).toBeCalled(); + expect(setShouldShowSearchBarButtonTourMock).toBeCalledWith(false); + }); + + it('does not open the search bar tour when searchFilterCounter is greater than 0 and shouldShowSearchBarButtonTour is false', () => { + const setShouldShowSearchBarButtonTourMock = jest.fn(); + (useLocalStorage as jest.Mock).mockReturnValue([false, setShouldShowSearchBarButtonTourMock]); + const { queryByText } = renderWithProviders({ + ...defaultProps, + searchFilterCounter: 2, + }); + + expect(queryByText(SEARCH_BAR_TOUR_TITLE)).not.toBeInTheDocument(); + expect(setShouldShowSearchBarButtonTourMock).not.toBeCalled(); + }); + + it('should not show the tour if user already toggled the search bar', () => { + const setShouldShowSearchBarButtonTourMock = jest.fn(); + (useLocalStorage as jest.Mock).mockReturnValue([true, setShouldShowSearchBarButtonTourMock]); + renderWithProviders({ + ...defaultProps, + searchFilterCounter: 0, + searchToggled: true, + }); + + expect(defaultProps.onSearchToggle).toHaveBeenCalledWith(true); + expect(setShouldShowSearchBarButtonTourMock).toBeCalled(); + expect(setShouldShowSearchBarButtonTourMock).toBeCalledWith(false); + }); + + it('closes the search bar tour when the search toggle button is clicked', async () => { + let shouldShowSearchBarButtonTourState = true; + const setShouldShowSearchBarButtonTourMock = jest.fn( + (value: boolean) => (shouldShowSearchBarButtonTourState = value) + ); + (useLocalStorage as jest.Mock).mockImplementation(() => [ + shouldShowSearchBarButtonTourState, + setShouldShowSearchBarButtonTourMock, + ]); + const { getByTestId, getByText, queryByText } = renderWithProviders({ + ...defaultProps, + searchFilterCounter: 1, + }); + + expect(getByText(SEARCH_BAR_TOUR_TITLE)).toBeInTheDocument(); + + fireEvent.click(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)); + + await waitFor(() => { + expect(queryByText(SEARCH_BAR_TOUR_TITLE)).not.toBeInTheDocument(); + }); + + expect(setShouldShowSearchBarButtonTourMock).toBeCalled(); + expect(setShouldShowSearchBarButtonTourMock).toBeCalledWith(false); + }); }); }); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.tsx index 13124beb5a161..5ee102bf51941 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.tsx @@ -16,23 +16,42 @@ import { useEuiTheme, EuiNotificationBadge, EuiButton, + EuiTourStep, + EuiBeacon, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; import { GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID, GRAPH_ACTIONS_TOGGLE_SEARCH_ID, } from '../test_ids'; +import { SHOW_SEARCH_BAR_BUTTON_TOUR_STORAGE_KEY } from '../../common/constants'; + +const toggleSearchBarTourTitle = i18n.translate( + 'securitySolutionPackages.csp.graph.controls.toggleSearchBar.tour.title', + { + defaultMessage: 'Refine your view with search', + } +); + +const toggleSearchBarTourContent = i18n.translate( + 'securitySolutionPackages.csp.graph.controls.toggleSearchBar.tour.content', + { + defaultMessage: + 'Click here to reveal the search bar and advanced filtering options to focus on specific connections within the graph.', + } +); const toggleSearchBarTooltip = i18n.translate( - 'securitySolutionPackages.csp.graph.controls.toggleSearchBar', + 'securitySolutionPackages.csp.graph.controls.toggleSearchBar.tooltip', { defaultMessage: 'Toggle search bar', } ); const investigateInTimelineTooltip = i18n.translate( - 'securitySolutionPackages.csp.graph.controls.investigate', + 'securitySolutionPackages.csp.graph.controls.investigateInTimeline.tooltip', { defaultMessage: 'Investigate in timeline', } @@ -63,66 +82,131 @@ export interface ActionsProps extends CommonProps { * Callback when investigate in timeline action button is clicked, ignored if investigateInTimelineComponent is provided. */ onInvestigateInTimeline?: () => void; + + /** + * Whether search is toggled or not. Defaults value is false. + */ + searchToggled?: boolean; + + /** + * Warning message to show. Defaults value is undefined. + */ + searchWarningMessage?: { title: string; content: string }; } +// eslint-disable-next-line complexity export const Actions = ({ showToggleSearch = true, showInvestigateInTimeline = true, onInvestigateInTimeline, onSearchToggle, searchFilterCounter = 0, + searchToggled, + searchWarningMessage, ...props }: ActionsProps) => { const { euiTheme } = useEuiTheme(); - const [searchToggled, setSearchToggled] = useState(false); + const [isSearchBarTourOpen, setIsSearchBarTourOpen] = useState(false); + const hasSearchWarning = searchWarningMessage !== undefined && searchWarningMessage !== null; + const [shouldShowSearchBarButtonTour, setShouldShowSearchBarButtonTour] = useLocalStorage( + SHOW_SEARCH_BAR_BUTTON_TOUR_STORAGE_KEY, + true + ); + + if (shouldShowSearchBarButtonTour) { + if (searchFilterCounter > 0) { + setIsSearchBarTourOpen(true); + setShouldShowSearchBarButtonTour(false); + } else if (searchToggled) { + // User already used the search bar, so we don't need to show the tour + setShouldShowSearchBarButtonTour(false); + } + } + + const tooltipTitle = + !isSearchBarTourOpen && hasSearchWarning ? searchWarningMessage.title : undefined; + const tooltipContent = + !isSearchBarTourOpen && hasSearchWarning + ? searchWarningMessage.content + : !isSearchBarTourOpen + ? toggleSearchBarTooltip + : undefined; return ( {showToggleSearch && ( - - { - setSearchToggled((prev) => { - onSearchToggle?.(!prev); - return !prev; - }); - }} - > - {searchFilterCounter > 0 && ( - - {searchFilterCounter > 9 ? '9+' : searchFilterCounter} - - )} - - + setIsSearchBarTourOpen(false)} + step={1} + stepsTotal={1} + maxWidth={350} + > + + ) => { + onSearchToggle?.(!searchToggled); + + setIsSearchBarTourOpen(false); + + // After a button click we wish to remove the focus from the button so the tooltip won't appear + // Since it causes the position of the button to shift, + // the tooltip is hanging out there at the wrong position + // /~https://github.com/elastic/eui/issues/8266 + event.currentTarget?.blur(); + }} + > + {hasSearchWarning && ( + + )} + {searchFilterCounter > 0 && ( + + {searchFilterCounter > 99 ? '99+' : searchFilterCounter} + + )} + + + )} {showToggleSearch && showInvestigateInTimeline && } @@ -135,8 +219,12 @@ export const Actions = ({ size="m" aria-label={investigateInTimelineTooltip} data-test-subj={GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID} - onClick={() => { + onClick={(event: React.MouseEvent) => { onInvestigateInTimeline?.(); + + // After a button click we wish to remove the focus from the button so the tooltip won't appear + // Since it causes a modal to be opened, the tooltip is hanging out there on top of the modal + event.currentTarget?.blur(); }} /> diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.test.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.test.tsx index 7171a35d27cdc..a4f3728c94eb7 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.test.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.test.tsx @@ -6,15 +6,22 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { setProjectAnnotations } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import { composeStories } from '@storybook/testing-react'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import useSessionStorage from 'react-use/lib/useSessionStorage'; import * as stories from './graph_investigation.stories'; import { type GraphInvestigationProps } from './graph_investigation'; -import { GRAPH_INVESTIGATION_TEST_ID, GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID } from '../test_ids'; +import { + GRAPH_INVESTIGATION_TEST_ID, + GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID, + GRAPH_ACTIONS_TOGGLE_SEARCH_ID, + NODE_EXPAND_BUTTON_TEST_ID, + GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID, +} from '../test_ids'; import * as previewAnnotations from '../../../.storybook/preview'; import { NOTIFICATIONS_ADD_ERROR_ACTION } from '../../../.storybook/constants'; import { USE_FETCH_GRAPH_DATA_REFRESH_ACTION } from '../mock/constants'; @@ -53,9 +60,58 @@ jest.mock('../graph/constants', () => ({ ONLY_RENDER_VISIBLE_ELEMENTS: false, })); +// By default we toggle the search bar visibility +jest.mock('react-use/lib/useSessionStorage', () => jest.fn().mockReturnValue([true, jest.fn()])); + const QUERY_PARAM_IDX = 0; const FILTERS_PARAM_IDX = 1; +const expandNode = (container: HTMLElement, nodeId: string) => { + const nodeElement = container.querySelector( + `.react-flow__nodes .react-flow__node[data-id="${nodeId}"]` + ); + expect(nodeElement).not.toBeNull(); + userEvent.hover(nodeElement!); + ( + nodeElement?.querySelector( + `[data-test-subj="${NODE_EXPAND_BUTTON_TEST_ID}"]` + ) as HTMLButtonElement + )?.click(); +}; + +const showActionsByNode = (container: HTMLElement, nodeId: string) => { + expandNode(container, nodeId); + + const btn = screen.getByTestId(GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID); + expect(btn).toHaveTextContent('Show actions by this entity'); + btn.click(); +}; + +const hideActionsByNode = (container: HTMLElement, nodeId: string) => { + expandNode(container, nodeId); + + const hideBtn = screen.getByTestId(GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID); + expect(hideBtn).toHaveTextContent('Hide actions by this entity'); + hideBtn.click(); +}; + +const disableFilter = (container: HTMLElement, filterIndex: number) => { + const filterBtn = container.querySelector( + `[data-test-subj*="filter-id-${filterIndex}"]` + ) as HTMLButtonElement; + expect(filterBtn).not.toBeNull(); + filterBtn.click(); + + const disableFilterBtn = screen.getByTestId('disableFilter'); + expect(disableFilterBtn).not.toBeNull(); + disableFilterBtn.click(); +}; + +const isSearchBarVisible = (container: HTMLElement) => { + const searchBarContainer = container.querySelector('.toggled-off'); + return searchBarContainer === null; +}; + describe('GraphInvestigation Component', () => { beforeEach(() => { for (const key in actionMocks) { @@ -104,106 +160,223 @@ describe('GraphInvestigation Component', () => { expect(mockRefresh).toHaveBeenCalledTimes(1); }); - it('calls onInvestigateInTimeline action', () => { - const onInvestigateInTimeline = jest.fn(); - const { getByTestId } = renderStory({ - onInvestigateInTimeline, - showInvestigateInTimeline: true, + describe('searchBar', () => { + it('shows searchBar when search button toggle is hidden', () => { + const { getByTestId, queryByTestId, container } = renderStory(); + + expect(queryByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).not.toBeInTheDocument(); + expect(getByTestId('globalQueryBar')).toBeInTheDocument(); + expect(isSearchBarVisible(container)).toBeTruthy(); }); - getByTestId(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID).click(); + it('toggles searchBar on click', async () => { + let searchBarToggled = false; + const setSearchBarToggled = jest.fn((value: boolean) => { + searchBarToggled = value; + }); + (useSessionStorage as jest.Mock).mockImplementation(() => [ + searchBarToggled, + setSearchBarToggled, + ]); + const { getByTestId, container } = renderStory({ + showToggleSearch: true, + }); + + expect(isSearchBarVisible(container)).toBeFalsy(); - expect(onInvestigateInTimeline).toHaveBeenCalled(); - expect(onInvestigateInTimeline.mock.calls[0][QUERY_PARAM_IDX]).toEqual({ - query: '', - language: 'kuery', + // Act + getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID).click(); + + // Assert + expect(setSearchBarToggled).lastCalledWith(true); }); - expect(onInvestigateInTimeline.mock.calls[0][FILTERS_PARAM_IDX]).toEqual([ - { - $state: { - store: 'appState', - }, - meta: { - disabled: false, - index: '1235', - negate: false, - params: ['1', '2'].map((eventId) => ({ - meta: { - controlledBy: 'graph-investigation', - field: 'event.id', - index: '1235', - key: 'event.id', - negate: false, - params: { - query: eventId, - }, - type: 'phrase', - }, - query: { - match_phrase: { - 'event.id': eventId, - }, - }, - })), - type: 'combined', - relation: 'OR', - }, - }, - ]); - }); - it('query includes origin event ids onInvestigateInTimeline callback', async () => { - // Arrange - const onInvestigateInTimeline = jest.fn(); - const { getByTestId } = renderStory({ - onInvestigateInTimeline, - showInvestigateInTimeline: true, + it('toggles searchBar off on click', async () => { + let searchBarToggled = true; + const setSearchBarToggled = jest.fn((value: boolean) => { + searchBarToggled = value; + }); + (useSessionStorage as jest.Mock).mockImplementation(() => [ + searchBarToggled, + setSearchBarToggled, + ]); + const { getByTestId, container } = renderStory({ + showToggleSearch: true, + }); + + expect(isSearchBarVisible(container)).toBeTruthy(); + + // Act + getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID).click(); + + // Assert + expect(setSearchBarToggled).lastCalledWith(false); }); - const queryInput = getByTestId('queryInput'); - await userEvent.type(queryInput, 'host1'); - const querySubmitBtn = getByTestId('querySubmitButton'); - querySubmitBtn.click(); - // Act - getByTestId(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID).click(); + it('shows filters counter when KQL filter is applied', async () => { + const { getByTestId } = renderStory({ + showToggleSearch: true, + }); - // Assert - expect(onInvestigateInTimeline).toHaveBeenCalled(); - expect(onInvestigateInTimeline.mock.calls[0][QUERY_PARAM_IDX]).toEqual({ - query: '(host1) OR event.id: "1" OR event.id: "2"', - language: 'kuery', + const queryInput = getByTestId('queryInput'); + await userEvent.type(queryInput, 'host1'); + const querySubmitBtn = getByTestId('querySubmitButton'); + querySubmitBtn.click(); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toHaveTextContent('1'); + }); + + it('shows filters counter when node filter is applied', () => { + const { getByTestId, container } = renderStory({ + showToggleSearch: true, + }); + expandNode(container, 'admin@example.com'); + getByTestId(GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID).click(); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toHaveTextContent('1'); }); - expect(onInvestigateInTimeline.mock.calls[0][FILTERS_PARAM_IDX]).toEqual([ - { - $state: { - store: 'appState', + + it('hide filters counter when node filter is toggled off', () => { + const { getByTestId, container } = renderStory({ + showToggleSearch: true, + }); + showActionsByNode(container, 'admin@example.com'); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toHaveTextContent('1'); + + hideActionsByNode(container, 'admin@example.com'); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toHaveTextContent(''); + + expandNode(container, 'admin@example.com'); + expect(getByTestId(GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID)).toHaveTextContent( + 'Show actions by this entity' + ); + }); + + it('hide filters counter when filter is disabled', () => { + const { getByTestId, container } = renderStory({ + showToggleSearch: true, + }); + showActionsByNode(container, 'admin@example.com'); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toHaveTextContent('1'); + + disableFilter(container, 0); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toHaveTextContent(''); + + expandNode(container, 'admin@example.com'); + expect(getByTestId(GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID)).toHaveTextContent( + 'Show actions by this entity' + ); + }); + }); + + describe('investigateInTimeline', () => { + it('calls onInvestigateInTimeline action', () => { + const onInvestigateInTimeline = jest.fn(); + const { getByTestId } = renderStory({ + onInvestigateInTimeline, + showInvestigateInTimeline: true, + }); + + getByTestId(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID).click(); + + expect(onInvestigateInTimeline).toHaveBeenCalled(); + expect(onInvestigateInTimeline.mock.calls[0][QUERY_PARAM_IDX]).toEqual({ + query: '', + language: 'kuery', + }); + expect(onInvestigateInTimeline.mock.calls[0][FILTERS_PARAM_IDX]).toEqual([ + { + $state: { + store: 'appState', + }, + meta: expect.objectContaining({ + disabled: false, + index: '1235', + negate: false, + controlledBy: 'graph-investigation', + params: ['1', '2'].map((eventId) => ({ + meta: { + controlledBy: 'graph-investigation', + field: 'event.id', + index: '1235', + key: 'event.id', + negate: false, + params: { + query: eventId, + }, + type: 'phrase', + }, + query: { + match_phrase: { + 'event.id': eventId, + }, + }, + })), + type: 'combined', + relation: 'OR', + }), }, - meta: { - disabled: false, - index: '1235', - negate: false, - params: ['1', '2'].map((eventId) => ({ - meta: { - controlledBy: 'graph-investigation', - field: 'event.id', - index: '1235', - key: 'event.id', - negate: false, - params: { - query: eventId, + ]); + }); + + it('query includes origin event ids onInvestigateInTimeline callback', async () => { + // Arrange + const onInvestigateInTimeline = jest.fn(); + const { getByTestId } = renderStory({ + onInvestigateInTimeline, + showInvestigateInTimeline: true, + }); + const queryInput = getByTestId('queryInput'); + await userEvent.type(queryInput, 'host1'); + const querySubmitBtn = getByTestId('querySubmitButton'); + querySubmitBtn.click(); + + // Act + getByTestId(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID).click(); + + // Assert + expect(onInvestigateInTimeline).toHaveBeenCalled(); + expect(onInvestigateInTimeline.mock.calls[0][QUERY_PARAM_IDX]).toEqual({ + query: '(host1) OR event.id: "1" OR event.id: "2"', + language: 'kuery', + }); + expect(onInvestigateInTimeline.mock.calls[0][FILTERS_PARAM_IDX]).toEqual([ + { + $state: { + store: 'appState', + }, + meta: expect.objectContaining({ + disabled: false, + index: '1235', + negate: false, + controlledBy: 'graph-investigation', + params: ['1', '2'].map((eventId) => ({ + meta: { + controlledBy: 'graph-investigation', + field: 'event.id', + index: '1235', + key: 'event.id', + negate: false, + params: { + query: eventId, + }, + type: 'phrase', }, - type: 'phrase', - }, - query: { - match_phrase: { - 'event.id': eventId, + query: { + match_phrase: { + 'event.id': eventId, + }, }, - }, - })), - type: 'combined', - relation: 'OR', + })), + type: 'combined', + relation: 'OR', + }), }, - }, - ]); + ]); + }); }); }); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.tsx index 047410dcd13d7..04f5d5c9882ef 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { Story } from '@storybook/react'; +import { type Meta, Story } from '@storybook/react'; import { action } from '@storybook/addon-actions'; import { GraphInvestigation, type GraphInvestigationProps } from './graph_investigation'; import { @@ -14,6 +14,12 @@ import { ReactQueryStorybookDecorator, } from '../../../.storybook/decorators'; import { mockDataView } from '../mock/data_view.mock'; +import { SHOW_SEARCH_BAR_BUTTON_TOUR_STORAGE_KEY } from '../../common/constants'; +import { MockDataProvider } from '../mock/mock_context_provider'; +import { + USE_FETCH_GRAPH_DATA_ACTION, + USE_FETCH_GRAPH_DATA_REFRESH_ACTION, +} from '../mock/constants'; export default { title: 'Components/Graph Components/Investigation', @@ -21,13 +27,44 @@ export default { argTypes: { showToggleSearch: { control: { type: 'boolean' }, + defaultValue: false, }, showInvestigateInTimeline: { control: { type: 'boolean' }, + defaultValue: false, + }, + shouldShowSearchBarTour: { + description: 'Toggle the button to set the initial state of showing search bar tour', + control: { type: 'boolean' }, + defaultValue: true, + }, + isLoading: { + control: { type: 'boolean' }, + defaultValue: false, }, }, - decorators: [ReactQueryStorybookDecorator, KibanaReactStorybookDecorator], -}; + decorators: [ + ReactQueryStorybookDecorator, + KibanaReactStorybookDecorator, + (StoryComponent, context) => { + const { shouldShowSearchBarTour, isLoading } = context.args; + localStorage.setItem(SHOW_SEARCH_BAR_BUTTON_TOUR_STORAGE_KEY, shouldShowSearchBarTour); + const mockData = { + useFetchGraphDataMock: { + isFetching: isLoading, + refresh: action(USE_FETCH_GRAPH_DATA_REFRESH_ACTION), + log: action(USE_FETCH_GRAPH_DATA_ACTION), + }, + }; + + return ( + + + + ); + }, + ], +} as Meta; const hourAgo = new Date(new Date().getTime() - 60 * 60 * 1000); const defaultProps: GraphInvestigationProps = { @@ -58,8 +95,3 @@ const Template: Story> = (props) => { }; export const Investigation = Template.bind({}); - -Investigation.args = { - showToggleSearch: false, - showInvestigateInTimeline: false, -}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx index 8f9a9e6129b0f..abaf62a457324 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx @@ -10,127 +10,30 @@ import { SearchBar } from '@kbn/unified-search-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { i18n } from '@kbn/i18n'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { - BooleanRelation, - buildEsQuery, - isCombinedFilter, - buildCombinedFilter, - isFilter, - FilterStateStore, -} from '@kbn/es-query'; -import type { Filter, Query, TimeRange, PhraseFilter } from '@kbn/es-query'; +import { buildEsQuery, isCombinedFilter } from '@kbn/es-query'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { css } from '@emotion/react'; import { Panel } from '@xyflow/react'; import { getEsQueryConfig } from '@kbn/data-service'; -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiProgress } from '@elastic/eui'; +import useSessionStorage from 'react-use/lib/useSessionStorage'; import { Graph, isEntityNode } from '../../..'; -import { useGraphNodeExpandPopover } from './use_graph_node_expand_popover'; -import { useGraphLabelExpandPopover } from './use_graph_label_expand_popover'; import { type UseFetchGraphDataParams, useFetchGraphData } from '../../hooks/use_fetch_graph_data'; import { GRAPH_INVESTIGATION_TEST_ID } from '../test_ids'; -import { - ACTOR_ENTITY_ID, - EVENT_ACTION, - EVENT_ID, - RELATED_ENTITY, - TARGET_ENTITY_ID, -} from '../../common/constants'; -import { Actions, type ActionsProps } from '../controls/actions'; - -const CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER = 'graph-investigation'; - -const buildPhraseFilter = (field: string, value: string, dataViewId?: string): PhraseFilter => ({ - meta: { - key: field, - index: dataViewId, - negate: false, - disabled: false, - type: 'phrase', - field, - controlledBy: CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, - params: { - query: value, - }, - }, - query: { - match_phrase: { - [field]: value, - }, - }, -}); - -/** - * Adds a filter to the existing list of filters based on the provided key and value. - * It will always use the first filter in the list to build a combined filter with the new filter. - * - * @param dataViewId - The ID of the data view to which the filter belongs. - * @param prev - The previous list of filters. - * @param key - The key for the filter. - * @param value - The value for the filter. - * @returns A new list of filters with the added filter. - */ -const addFilter = (dataViewId: string, prev: Filter[], key: string, value: string) => { - const [firstFilter, ...otherFilters] = prev; - - if (isCombinedFilter(firstFilter) && firstFilter?.meta?.relation === BooleanRelation.OR) { - return [ - { - ...firstFilter, - meta: { - ...firstFilter.meta, - params: [ - ...(Array.isArray(firstFilter.meta.params) ? firstFilter.meta.params : []), - buildPhraseFilter(key, value), - ], - }, - }, - ...otherFilters, - ]; - } else if (isFilter(firstFilter) && firstFilter.meta?.type !== 'custom') { - return [ - buildCombinedFilter( - BooleanRelation.OR, - [firstFilter, buildPhraseFilter(key, value, dataViewId)], - { - id: dataViewId, - } - ), - ...otherFilters, - ]; - } else { - return [ - { - $state: { - store: FilterStateStore.APP_STATE, - }, - ...buildPhraseFilter(key, value, dataViewId), - }, - ...prev, - ]; - } -}; +import { EVENT_ID, TOGGLE_SEARCH_BAR_STORAGE_KEY } from '../../common/constants'; +import { Actions } from '../controls/actions'; +import { AnimatedSearchBarContainer, useBorder } from './styles'; +import { CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, addFilter } from './search_filters'; +import { useEntityNodeExpandPopover } from './use_entity_node_expand_popover'; +import { useLabelNodeExpandPopover } from './use_label_node_expand_popover'; const useGraphPopovers = ( dataViewId: string, - setSearchFilters: React.Dispatch> + setSearchFilters: React.Dispatch>, + searchFilters: Filter[] ) => { - const nodeExpandPopover = useGraphNodeExpandPopover({ - onExploreRelatedEntitiesClick: (node) => { - setSearchFilters((prev) => addFilter(dataViewId, prev, RELATED_ENTITY, node.id)); - }, - onShowActionsByEntityClick: (node) => { - setSearchFilters((prev) => addFilter(dataViewId, prev, ACTOR_ENTITY_ID, node.id)); - }, - onShowActionsOnEntityClick: (node) => { - setSearchFilters((prev) => addFilter(dataViewId, prev, TARGET_ENTITY_ID, node.id)); - }, - }); - - const labelExpandPopover = useGraphLabelExpandPopover({ - onShowEventsWithThisActionClick: (node) => { - setSearchFilters((prev) => addFilter(dataViewId, prev, EVENT_ACTION, node.data.label ?? '')); - }, - }); + const nodeExpandPopover = useEntityNodeExpandPopover(setSearchFilters, dataViewId, searchFilters); + const labelExpandPopover = useLabelNodeExpandPopover(setSearchFilters, dataViewId, searchFilters); const openPopoverCallback = useCallback( (cb: Function, ...args: unknown[]) => { @@ -145,6 +48,21 @@ const useGraphPopovers = ( return { nodeExpandPopover, labelExpandPopover, openPopoverCallback }; }; +const NEGATED_FILTER_SEARCH_WARNING_MESSAGE = { + title: i18n.translate( + 'securitySolutionPackages.csp.graph.investigation.warningNegatedFilterTitle', + { + defaultMessage: 'Filters Negated', + } + ), + content: i18n.translate( + 'securitySolutionPackages.csp.graph.investigation.warningNegatedFilterContent', + { + defaultMessage: 'One or more filters are negated and may not return expected results.', + } + ), +}; + export interface GraphInvestigationProps { /** * The initial state to use for the graph investigation view. @@ -211,6 +129,10 @@ export const GraphInvestigation = memo( }: GraphInvestigationProps) => { const [searchFilters, setSearchFilters] = useState(() => []); const [timeRange, setTimeRange] = useState(initialTimeRange); + const [searchToggled, setSearchToggled] = useSessionStorage( + TOGGLE_SEARCH_BAR_STORAGE_KEY, + !showToggleSearch + ); const lastValidEsQuery = useRef(); const [kquery, setKQuery] = useState(EMPTY_QUERY); @@ -229,15 +151,6 @@ export const GraphInvestigation = memo( onInvestigateInTimeline?.(query, filters, timeRange); }, [dataView?.id, onInvestigateInTimeline, originEventIds, kquery, searchFilters, timeRange]); - const actionsProps: ActionsProps = useMemo( - () => ({ - showInvestigateInTimeline, - showToggleSearch, - onInvestigateInTimeline: onInvestigateInTimelineCallback, - }), - [onInvestigateInTimelineCallback, showInvestigateInTimeline, showToggleSearch] - ); - const { services: { uiSettings, notifications }, } = useKibana(); @@ -264,12 +177,13 @@ export const GraphInvestigation = memo( const { nodeExpandPopover, labelExpandPopover, openPopoverCallback } = useGraphPopovers( dataView?.id ?? '', - setSearchFilters + setSearchFilters, + searchFilters ); const nodeExpandButtonClickHandler = (...args: unknown[]) => openPopoverCallback(nodeExpandPopover.onNodeExpandButtonClick, ...args); const labelExpandButtonClickHandler = (...args: unknown[]) => - openPopoverCallback(labelExpandPopover.onLabelExpandButtonClick, ...args); + openPopoverCallback(labelExpandPopover.onNodeExpandButtonClick, ...args); const isPopoverOpen = [nodeExpandPopover, labelExpandPopover].some( ({ state: { isOpen } }) => isOpen ); @@ -309,6 +223,31 @@ export const GraphInvestigation = memo( // eslint-disable-next-line react-hooks/exhaustive-deps }, [data?.nodes]); + const searchFilterCounter = useMemo(() => { + const filtersCount = searchFilters + .filter((filter) => !filter.meta.disabled) + .reduce((sum, filter) => { + if (isCombinedFilter(filter)) { + return sum + filter.meta.params.length; + } + + return sum + 1; + }, 0); + + const queryCounter = kquery.query.trim().length > 0 ? 1 : 0; + return filtersCount + queryCounter; + }, [kquery.query, searchFilters]); + + const searchWarningMessage = + searchFilters.filter( + (filter) => + !filter.meta.disabled && + filter.meta.negate && + filter.meta.controlledBy === CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER + ).length > 0 + ? NEGATED_FILTER_SEARCH_WARNING_MESSAGE + : undefined; + return ( <> ( gutterSize="none" css={css` height: 100%; + + .react-flow__panel { + margin-right: 8px; + } `} > {dataView && ( - - showFilterBar={true} - showDatePicker={true} - showAutoRefreshOnly={false} - showSaveQuery={false} - showQueryInput={true} - disableQueryLanguageSwitcher={true} - isLoading={isFetching} - isAutoRefreshDisabled={true} - dateRangeFrom={timeRange.from} - dateRangeTo={timeRange.to} - query={kquery} - indexPatterns={[dataView]} - filters={searchFilters} - submitButtonStyle={'iconOnly'} - onFiltersUpdated={(newFilters) => { - setSearchFilters(newFilters); - }} - onQuerySubmit={(payload, isUpdate) => { - if (isUpdate) { - setTimeRange({ ...payload.dateRange }); - setKQuery(payload.query || EMPTY_QUERY); - } else { - refresh(); - } - }} - /> + + + showFilterBar={true} + showDatePicker={true} + showAutoRefreshOnly={false} + showSaveQuery={false} + showQueryInput={true} + disableQueryLanguageSwitcher={true} + isLoading={isFetching} + isAutoRefreshDisabled={true} + dateRangeFrom={timeRange.from} + dateRangeTo={timeRange.to} + query={kquery} + indexPatterns={[dataView]} + filters={searchFilters} + submitButtonStyle={'iconOnly'} + onFiltersUpdated={(newFilters) => { + setSearchFilters(newFilters); + }} + onQuerySubmit={(payload, isUpdate) => { + if (isUpdate) { + setTimeRange({ ...payload.dateRange }); + setKQuery(payload.query || EMPTY_QUERY); + } else { + refresh(); + } + }} + /> + )} - + + {isFetching && } ( isLocked={isPopoverOpen} > - + setSearchToggled(isSearchToggle)} + searchFilterCounter={searchFilterCounter} + searchToggled={searchToggled} + searchWarningMessage={searchWarningMessage} + /> diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_label_expand_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_label_expand_popover.tsx deleted file mode 100644 index 6064e1cf9087b..0000000000000 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_label_expand_popover.tsx +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { memo } from 'react'; -import { EuiListGroup } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { ExpandPopoverListItem } from '../styles'; -import { GraphPopover } from '../../..'; -import { - GRAPH_LABEL_EXPAND_POPOVER_TEST_ID, - GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID, -} from '../test_ids'; - -interface GraphLabelExpandPopoverProps { - isOpen: boolean; - anchorElement: HTMLElement | null; - closePopover: () => void; - onShowEventsWithThisActionClick: () => void; -} - -export const GraphLabelExpandPopover = memo( - ({ isOpen, anchorElement, closePopover, onShowEventsWithThisActionClick }) => { - return ( - - - - - - ); - } -); - -GraphLabelExpandPopover.displayName = 'GraphLabelExpandPopover'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_node_expand_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_node_expand_popover.tsx deleted file mode 100644 index 5104dbaeed5fb..0000000000000 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_node_expand_popover.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { memo } from 'react'; -import { EuiListGroup } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { ExpandPopoverListItem } from '../styles'; -import { GraphPopover } from '../../..'; -import { - GRAPH_NODE_EXPAND_POPOVER_TEST_ID, - GRAPH_NODE_POPOVER_SHOW_RELATED_ITEM_ID, - GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID, - GRAPH_NODE_POPOVER_SHOW_ACTIONS_ON_ITEM_ID, -} from '../test_ids'; - -interface GraphNodeExpandPopoverProps { - isOpen: boolean; - anchorElement: HTMLElement | null; - closePopover: () => void; - onShowRelatedEntitiesClick: () => void; - onShowActionsByEntityClick: () => void; - onShowActionsOnEntityClick: () => void; -} - -export const GraphNodeExpandPopover = memo( - ({ - isOpen, - anchorElement, - closePopover, - onShowRelatedEntitiesClick, - onShowActionsByEntityClick, - onShowActionsOnEntityClick, - }) => { - return ( - - - - - - - - ); - } -); - -GraphNodeExpandPopover.displayName = 'GraphNodeExpandPopover'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/list_group_graph_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/list_group_graph_popover.tsx new file mode 100644 index 0000000000000..84c7760703111 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/list_group_graph_popover.tsx @@ -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 React, { memo } from 'react'; +import { EuiHorizontalRule, EuiListGroup } from '@elastic/eui'; +import { ExpandPopoverListItem } from '../styles'; +import { GraphPopover } from '../../..'; + +/** + * Props for the ListGroupGraphPopover component. + */ +interface ListGroupGraphPopoverProps { + /** + * The data-test-subj value for the popover. + */ + testSubject: string; + + /** + * Indicates whether the popover is open. + */ + isOpen: boolean; + + /** + * The HTML element that the popover is anchored to. + */ + anchorElement: HTMLElement | null; + + /** + * Function to close the popover. + */ + closePopover: () => void; + + /** + * The action to take when the related entities toggle is clicked. + */ + items?: Array; + + /** + * Function to get the list of items to display in the popover. + * When provided, this function is called each time the popover is opened. + * If `items` is provided, this function is ignored. + */ + itemsFn?: () => Array; +} + +export interface ItemExpandPopoverListItemProps { + type: 'item'; + iconType: string; + label: string; + onClick: () => void; + testSubject: string; +} + +export interface SeparatorExpandPopoverListItemProps { + type: 'separator'; +} + +/** + * A graph popover that displays a list of items. + */ +export const ListGroupGraphPopover = memo( + ({ isOpen, anchorElement, closePopover, items, itemsFn, testSubject }) => { + const listItems = items || itemsFn?.() || []; + + return ( + + + {listItems.map((item, index) => { + if (item.type === 'separator') { + return ; + } + return ( + + ); + })} + + + ); + } +); + +ListGroupGraphPopover.displayName = 'ListGroupGraphPopover'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/search_filters.test.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/search_filters.test.ts new file mode 100644 index 0000000000000..78177f71327d9 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/search_filters.test.ts @@ -0,0 +1,306 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { expect } from 'expect'; +import { + type Filter, + BooleanRelation, + type CombinedFilter, + FILTERS, + isCombinedFilter, +} from '@kbn/es-query'; +import type { PhraseFilter, PhraseFilterMetaParams } from '@kbn/es-query/src/filters/build_filters'; +import { omit } from 'lodash'; +import { + CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, + addFilter, + containsFilter, + removeFilter, +} from './search_filters'; + +const dataViewId = 'test-data-view'; + +const buildFilterMock = (key: string, value: string, controlledBy?: string) => ({ + meta: { + key, + index: dataViewId, + negate: false, + disabled: false, + type: 'phrase', + field: key, + controlledBy, + params: { + query: value, + }, + }, + query: { + match_phrase: { + [key]: value, + }, + }, +}); + +const buildCombinedFilterMock = (filters: Filter[], controlledBy?: string): CombinedFilter => ({ + meta: { + relation: BooleanRelation.OR, + controlledBy, + params: filters, + type: FILTERS.COMBINED, + }, + query: {}, +}); + +describe('search_filters', () => { + const key = 'test-key'; + const value = 'test-value'; + + const controlledPhraseFilter: PhraseFilter = buildFilterMock( + key, + value, + CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER + ); + + describe('containsFilter', () => { + it('should return true if the filter is present in the controlled phrase filter', () => { + const filters: Filter[] = [controlledPhraseFilter]; + + expect(containsFilter(filters, key, value)).toBe(true); + }); + + it('should return true if the filter is present in a phrase filter (not controlled)', () => { + const filters: Filter[] = [ + buildFilterMock(key, 'another-value', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + buildFilterMock(key, value), + ]; + + expect(containsFilter(filters, key, value)).toBe(true); + }); + + it('should return true if the filter is present in the controlled combined filter', () => { + const filters: Filter[] = [ + buildCombinedFilterMock( + [ + buildFilterMock(key, 'another-value', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + controlledPhraseFilter, + ], + CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER + ), + ]; + + expect(containsFilter(filters, key, value)).toBe(true); + }); + + it('should return true if the filter is present in a combined filter (not controlled)', () => { + const filters: Filter[] = [ + buildCombinedFilterMock([ + buildFilterMock(key, 'another-value'), + buildFilterMock(key, value), + ]), + ]; + + expect(containsFilter(filters, key, value)).toBe(true); + }); + + it('should return false if the filter is not present in empty filters', () => { + const filters: Filter[] = []; + expect(containsFilter(filters, key, value)).toBe(false); + }); + + it('should return false if the filter is not present with controlled filter with same key and different value', () => { + const filters: Filter[] = [ + buildFilterMock(key, 'different-value', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + ]; + expect(containsFilter(filters, key, value)).toBe(false); + }); + + it('should return false when the combined filter with same key and different value', () => { + const filters: Filter[] = [ + buildCombinedFilterMock( + [ + buildFilterMock(key, 'different-value', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + buildFilterMock(key, 'different-value2', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + ], + CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER + ), + ]; + + expect(containsFilter(filters, key, value)).toBe(false); + }); + }); + + describe('addFilter', () => { + it('should add a new filter to an empty list', () => { + const filters: Filter[] = []; + + // Act + const newFilters = addFilter(dataViewId, filters, key, value); + + // Assert + expect(newFilters).toHaveLength(1); + expect(newFilters[0]).toEqual({ + $state: { store: 'appState' }, + meta: expect.objectContaining({ + key, + params: { query: value }, + controlledBy: CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, + index: dataViewId, + disabled: false, + field: key, + negate: false, + type: 'phrase', + }), + query: { + match_phrase: { + [key]: value, + }, + }, + }); + }); + + it('should add a new filter to an existing list with uncontrolled filter', () => { + const filters: Filter[] = [buildFilterMock(key, 'another-value')]; + + // Act + const newFilters = addFilter(dataViewId, filters, key, value); + + // Assert + expect(newFilters).toHaveLength(1); + expect(newFilters[0]).toEqual({ + $state: { store: 'appState' }, + meta: expect.objectContaining({ + params: [ + { ...filters[0], meta: { ...omit(filters[0].meta, 'disabled') } }, + { + meta: expect.objectContaining({ + key, + field: key, + params: { query: value }, + index: dataViewId, + controlledBy: CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, + type: 'phrase', + }), + query: { + match_phrase: { + [key]: value, + }, + }, + }, + ], + index: dataViewId, + controlledBy: CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, + relation: 'OR', + type: 'combined', + }), + }); + }); + + it('should combine with an existing filter', () => { + const filters: Filter[] = [controlledPhraseFilter]; + + // Act + const newFilters = addFilter(dataViewId, filters, key, 'new-value'); + + // Assert + expect(newFilters).toHaveLength(1); + expect(newFilters[0].meta.params).toHaveLength(2); + }); + + it('should a new filter when the existing controlled (first) filter is disabled', () => { + const filters: Filter[] = [ + { ...controlledPhraseFilter, meta: { ...controlledPhraseFilter.meta, disabled: true } }, + ]; + + // Act + const newFilters = addFilter(dataViewId, filters, key, value); + + // Assert + expect(newFilters).toHaveLength(2); + expect(newFilters[0].meta.disabled).toBe(false); + expect(newFilters[1].meta.disabled).toBe(true); + }); + }); + + describe('removeFilter', () => { + it('should return the same filters when filter not found', () => { + const filters: Filter[] = [controlledPhraseFilter]; + + // Act + const newFilters = removeFilter(filters, key, 'non-existent-value'); + + // Assert + expect(newFilters).toHaveLength(1); + expect(newFilters).toEqual(filters); + }); + + it('should remove a single phrase filter when present', () => { + const filters: Filter[] = [controlledPhraseFilter]; + + // Act + const newFilters = removeFilter(filters, key, value); + + // Assert + expect(newFilters).toHaveLength(0); + }); + + it('should not remove any filters if the filter is not present', () => { + const filters: Filter[] = [controlledPhraseFilter]; + + // Act + const newFilters = removeFilter(filters, key, 'non-existent-value'); + + // Assert + expect(newFilters).toHaveLength(1); + }); + + it('should remove the correct filter from combined filter and return phrase filter', () => { + // Arrange + const combinedFilter: CombinedFilter = buildCombinedFilterMock( + [ + controlledPhraseFilter, + buildFilterMock(key, 'another-value', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + ], + CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER + ); + const filters: Filter[] = [combinedFilter]; + + // Act + const newFilters = removeFilter(filters, key, value); + + // Assert + expect(newFilters).toHaveLength(1); + expect(isCombinedFilter(newFilters[0])).toBe(false); + expect(newFilters[0].meta.key).toBe(key); + expect((newFilters[0].meta.params as PhraseFilterMetaParams).query).toBe('another-value'); + }); + + it('should remove the correct filter from the a combined filter that contains more than 2 filters', () => { + // Arrange + const filters: Filter[] = [ + buildCombinedFilterMock( + [ + buildFilterMock(key, 'another-value', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + buildFilterMock(key, 'another-value1', CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER), + ], + CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER + ), + buildCombinedFilterMock([ + buildFilterMock(key, value), + buildFilterMock(key, 'another-value'), + buildFilterMock(key, 'another-value2'), + ]), + ]; + + // Act + const newFilters = removeFilter(filters, key, value); + + // Assert + expect(newFilters).toHaveLength(2); + expect(isCombinedFilter(newFilters[1])).toBe(true); + expect(newFilters[1].meta.params).toHaveLength(2); + }); + }); +}); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/search_filters.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/search_filters.ts new file mode 100644 index 0000000000000..75fd2f0576a42 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/search_filters.ts @@ -0,0 +1,169 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { + BooleanRelation, + FilterStateStore, + isCombinedFilter, + buildCombinedFilter, + isFilter, +} from '@kbn/es-query'; +import type { Filter, PhraseFilter } from '@kbn/es-query'; +import type { + CombinedFilter, + PhraseFilterMetaParams, +} from '@kbn/es-query/src/filters/build_filters'; + +export const CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER = 'graph-investigation'; + +const buildPhraseFilter = (field: string, value: string, dataViewId?: string): PhraseFilter => ({ + meta: { + key: field, + index: dataViewId, + negate: false, + disabled: false, + type: 'phrase', + field, + controlledBy: CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, + params: { + query: value, + }, + }, + query: { + match_phrase: { + [field]: value, + }, + }, +}); + +const filterHasKeyAndValue = (filter: Filter, key: string, value: string): boolean => { + if (isCombinedFilter(filter)) { + return filter.meta.params.some((param) => filterHasKeyAndValue(param, key, value)); + } + + return filter.meta.key === key && (filter.meta.params as PhraseFilterMetaParams)?.query === value; +}; + +/** + * Determines whether the provided filters contain a filter with the provided key and value. + * + * @param filters - The list of filters to check. + * @param key - The key to check for. + * @param value - The value to check for. + * @returns true if the filters do contain the filter, false if they don't. + */ +export const containsFilter = (filters: Filter[], key: string, value: string): boolean => { + return filters + .filter((filter) => !filter.meta.disabled) + .some((filter) => filterHasKeyAndValue(filter, key, value)); +}; + +/** + * Adds a filter to the existing list of filters based on the provided key and value. + * It will always use the first filter in the list to build a combined filter with the new filter. + * + * @param dataViewId - The ID of the data view to which the filter belongs. + * @param prev - The previous list of filters. + * @param key - The key for the filter. + * @param value - The value for the filter. + * @returns A new list of filters with the added filter. + */ +export const addFilter = (dataViewId: string, prev: Filter[], key: string, value: string) => { + const [firstFilter, ...otherFilters] = prev; + + if ( + isCombinedFilter(firstFilter) && + !firstFilter?.meta?.disabled && + firstFilter?.meta?.relation === BooleanRelation.OR + ) { + return [ + { + ...firstFilter, + meta: { + ...firstFilter.meta, + controlledBy: CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, + params: [ + ...(Array.isArray(firstFilter.meta.params) ? firstFilter.meta.params : []), + buildPhraseFilter(key, value), + ], + }, + }, + ...otherFilters, + ]; + } else if ( + isFilter(firstFilter) && + !firstFilter?.meta?.disabled && + firstFilter.meta?.type !== 'custom' + ) { + const combinedFilter = buildCombinedFilter( + BooleanRelation.OR, + [firstFilter, buildPhraseFilter(key, value, dataViewId)], + { + id: dataViewId, + } + ); + return [ + { + ...combinedFilter, + meta: { + ...combinedFilter.meta, + controlledBy: CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER, + }, + }, + ...otherFilters, + ]; + } else { + // When the first filter is disabled or a custom filter, we just add the new filter to the list. + return [ + { + $state: { + store: FilterStateStore.APP_STATE, + }, + ...buildPhraseFilter(key, value, dataViewId), + }, + ...prev, + ]; + } +}; + +const removeFilterFromCombinedFilter = (filter: CombinedFilter, key: string, value: string) => { + const newCombinedFilter = { + ...filter, + meta: { + ...filter.meta, + params: filter.meta.params.filter( + (param: Filter) => !filterHasKeyAndValue(param, key, value) + ), + }, + }; + + if (newCombinedFilter.meta.params.length === 1) { + return newCombinedFilter.meta.params[0]; + } else if (newCombinedFilter.meta.params.length === 0) { + return null; + } else { + return newCombinedFilter; + } +}; + +export const removeFilter = (filters: Filter[], key: string, value: string) => { + const matchedFilter = filters.filter((filter) => filterHasKeyAndValue(filter, key, value)); + + if (matchedFilter.length > 0 && isCombinedFilter(matchedFilter[0])) { + const newCombinedFilter = removeFilterFromCombinedFilter(matchedFilter[0], key, value); + + if (!newCombinedFilter) { + return filters.filter((filter) => filter !== matchedFilter[0]); + } + + return filters.map((filter) => (filter === matchedFilter[0] ? newCombinedFilter : filter)); + } else if (matchedFilter.length > 0) { + return filters.filter((filter) => filter !== matchedFilter[0]); + } + + return filters; +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/styles.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/styles.tsx new file mode 100644 index 0000000000000..a22f7b202dcda --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/styles.tsx @@ -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 styled from '@emotion/styled'; +import { euiCanAnimate, useEuiTheme } from '@elastic/eui'; + +export const useBorder = () => { + const { euiTheme } = useEuiTheme(); + return `1px solid ${euiTheme.colors.borderBasePlain}`; +}; + +export const AnimatedSearchBarContainer = styled.div` + display: grid; + grid-template-rows: 1fr; + border-top: ${() => useBorder()}; + padding: 16px 8px; + + &.toggled-off { + padding: 0; + border-top: none; + transform: translateY(-100%); + grid-template-rows: 0fr; + } + + ${euiCanAnimate} { + ${() => { + const { euiTheme } = useEuiTheme(); + return `transition: transform ${euiTheme.animation.normal} ease, + grid-template-rows ${euiTheme.animation.normal} ease; + `; + }} + } + + & > div { + overflow: hidden; + padding: 0; + + ${euiCanAnimate} { + ${() => { + const { euiTheme } = useEuiTheme(); + return `transition: padding ${euiTheme.animation.normal} ease;`; + }} + } + } + + &.toggled-off > div { + padding: 0; + } +`; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_entity_node_expand_popover.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_entity_node_expand_popover.ts new file mode 100644 index 0000000000000..539861990225c --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_entity_node_expand_popover.ts @@ -0,0 +1,172 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { Filter } from '@kbn/es-query'; +import { i18n } from '@kbn/i18n'; +import { useNodeExpandGraphPopover } from './use_node_expand_graph_popover'; +import type { NodeProps } from '../../..'; +import { + GRAPH_NODE_EXPAND_POPOVER_TEST_ID, + GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID, + GRAPH_NODE_POPOVER_SHOW_ACTIONS_ON_ITEM_ID, + GRAPH_NODE_POPOVER_SHOW_RELATED_ITEM_ID, +} from '../test_ids'; +import { + ItemExpandPopoverListItemProps, + SeparatorExpandPopoverListItemProps, +} from './list_group_graph_popover'; +import { ACTOR_ENTITY_ID, RELATED_ENTITY, TARGET_ENTITY_ID } from '../../common/constants'; +import { addFilter, containsFilter, removeFilter } from './search_filters'; + +type NodeToggleAction = 'show' | 'hide'; + +/** + * Hook to handle the entity node expand popover. + * This hook is used to show the popover when the user clicks on the expand button of an entity node. + * The popover contains the actions to show/hide the actions by entity, actions on entity, and related entities. + * + * @param setSearchFilters - Function to set the search filters. + * @param dataViewId - The data view id. + * @param searchFilters - The search filters. + * @returns The entity node expand popover. + */ +export const useEntityNodeExpandPopover = ( + setSearchFilters: React.Dispatch>, + dataViewId: string, + searchFilters: Filter[] +) => { + const onToggleExploreRelatedEntitiesClick = useCallback( + (node: NodeProps, action: NodeToggleAction) => { + if (action === 'show') { + setSearchFilters((prev) => addFilter(dataViewId, prev, RELATED_ENTITY, node.id)); + } else if (action === 'hide') { + setSearchFilters((prev) => removeFilter(prev, RELATED_ENTITY, node.id)); + } + }, + [dataViewId, setSearchFilters] + ); + + const onToggleActionsByEntityClick = useCallback( + (node: NodeProps, action: NodeToggleAction) => { + if (action === 'show') { + setSearchFilters((prev) => addFilter(dataViewId, prev, ACTOR_ENTITY_ID, node.id)); + } else if (action === 'hide') { + setSearchFilters((prev) => removeFilter(prev, ACTOR_ENTITY_ID, node.id)); + } + }, + [dataViewId, setSearchFilters] + ); + + const onToggleActionsOnEntityClick = useCallback( + (node: NodeProps, action: NodeToggleAction) => { + if (action === 'show') { + setSearchFilters((prev) => addFilter(dataViewId, prev, TARGET_ENTITY_ID, node.id)); + } else if (action === 'hide') { + setSearchFilters((prev) => removeFilter(prev, TARGET_ENTITY_ID, node.id)); + } + }, + [dataViewId, setSearchFilters] + ); + + const itemsFn = useCallback( + ( + node: NodeProps + ): Array => { + const actionsByEntityAction = containsFilter(searchFilters, ACTOR_ENTITY_ID, node.id) + ? 'hide' + : 'show'; + const actionsOnEntityAction = containsFilter(searchFilters, TARGET_ENTITY_ID, node.id) + ? 'hide' + : 'show'; + const relatedEntitiesAction = containsFilter(searchFilters, RELATED_ENTITY, node.id) + ? 'hide' + : 'show'; + + return [ + { + type: 'item', + iconType: 'users', + testSubject: GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_ITEM_ID, + label: + actionsByEntityAction === 'show' + ? i18n.translate( + 'securitySolutionPackages.csp.graph.graphNodeExpandPopover.showActionsByEntity', + { + defaultMessage: 'Show actions by this entity', + } + ) + : i18n.translate( + 'securitySolutionPackages.csp.graph.graphNodeExpandPopover.hideActionsByEntity', + { + defaultMessage: 'Hide actions by this entity', + } + ), + onClick: () => { + onToggleActionsByEntityClick(node, actionsByEntityAction); + }, + }, + { + type: 'item', + iconType: 'storage', + testSubject: GRAPH_NODE_POPOVER_SHOW_ACTIONS_ON_ITEM_ID, + label: + actionsOnEntityAction === 'show' + ? i18n.translate( + 'securitySolutionPackages.csp.graph.graphNodeExpandPopover.showActionsOnEntity', + { + defaultMessage: 'Show actions on this entity', + } + ) + : i18n.translate( + 'securitySolutionPackages.csp.graph.graphNodeExpandPopover.hideActionsOnEntity', + { + defaultMessage: 'Hide actions on this entity', + } + ), + onClick: () => { + onToggleActionsOnEntityClick(node, actionsOnEntityAction); + }, + }, + { + type: 'item', + iconType: 'visTagCloud', + testSubject: GRAPH_NODE_POPOVER_SHOW_RELATED_ITEM_ID, + label: + relatedEntitiesAction === 'show' + ? i18n.translate( + 'securitySolutionPackages.csp.graph.graphNodeExpandPopover.showRelatedEntities', + { + defaultMessage: 'Show related entities', + } + ) + : i18n.translate( + 'securitySolutionPackages.csp.graph.graphNodeExpandPopover.hideRelatedEntities', + { + defaultMessage: 'Hide related entities', + } + ), + onClick: () => { + onToggleExploreRelatedEntitiesClick(node, relatedEntitiesAction); + }, + }, + ]; + }, + [ + onToggleActionsByEntityClick, + onToggleActionsOnEntityClick, + onToggleExploreRelatedEntitiesClick, + searchFilters, + ] + ); + const entityNodeExpandPopover = useNodeExpandGraphPopover({ + id: 'entity-node-expand-popover', + itemsFn, + testSubject: GRAPH_NODE_EXPAND_POPOVER_TEST_ID, + }); + return entityNodeExpandPopover; +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_label_expand_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_label_expand_popover.tsx deleted file mode 100644 index 90b2ba107d64b..0000000000000 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_label_expand_popover.tsx +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { useGraphPopover } from '../../..'; -import type { ExpandButtonClickCallback, NodeProps } from '../types'; -import type { PopoverActions } from '../graph/use_graph_popover'; -import { GraphLabelExpandPopover } from './graph_label_expand_popover'; - -interface UseGraphLabelExpandPopoverArgs { - onShowEventsWithThisActionClick: (node: NodeProps) => void; -} - -export const useGraphLabelExpandPopover = ({ - onShowEventsWithThisActionClick, -}: UseGraphLabelExpandPopoverArgs) => { - const { id, state, actions } = useGraphPopover('label-expand-popover'); - const { openPopover, closePopover } = actions; - - const selectedNode = useRef(null); - const unToggleCallbackRef = useRef<(() => void) | null>(null); - const [pendingOpen, setPendingOpen] = useState<{ - node: NodeProps; - el: HTMLElement; - unToggleCallback: () => void; - } | null>(null); - - const closePopoverHandler = useCallback(() => { - selectedNode.current = null; - unToggleCallbackRef.current?.(); - unToggleCallbackRef.current = null; - closePopover(); - }, [closePopover]); - - const onLabelExpandButtonClick: ExpandButtonClickCallback = useCallback( - (e, node, unToggleCallback) => { - const lastExpandedNode = selectedNode.current?.id; - - // Close the current popover if open - closePopoverHandler(); - - if (lastExpandedNode !== node.id) { - // Set the pending open state - setPendingOpen({ node, el: e.currentTarget, unToggleCallback }); - } - }, - [closePopoverHandler] - ); - - useEffect(() => { - // Open pending popover if the popover is not open - if (!state.isOpen && pendingOpen) { - const { node, el, unToggleCallback } = pendingOpen; - - selectedNode.current = node; - unToggleCallbackRef.current = unToggleCallback; - openPopover(el); - - setPendingOpen(null); - } - }, [state.isOpen, pendingOpen, openPopover]); - - const PopoverComponent = memo(() => ( - { - onShowEventsWithThisActionClick(selectedNode.current as NodeProps); - closePopoverHandler(); - }} - /> - )); - - PopoverComponent.displayName = GraphLabelExpandPopover.displayName; - - const actionsWithClose: PopoverActions = useMemo( - () => ({ - ...actions, - closePopover: closePopoverHandler, - }), - [actions, closePopoverHandler] - ); - - return useMemo( - () => ({ - onLabelExpandButtonClick, - PopoverComponent, - id, - actions: actionsWithClose, - state, - }), - [PopoverComponent, actionsWithClose, id, onLabelExpandButtonClick, state] - ); -}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_label_node_expand_popover.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_label_node_expand_popover.ts new file mode 100644 index 0000000000000..c1ff6e73515ee --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_label_node_expand_popover.ts @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { Filter } from '@kbn/es-query'; +import { i18n } from '@kbn/i18n'; +import { useNodeExpandGraphPopover } from './use_node_expand_graph_popover'; +import type { NodeProps } from '../../..'; +import { + GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID, + GRAPH_LABEL_EXPAND_POPOVER_TEST_ID, +} from '../test_ids'; +import { + ItemExpandPopoverListItemProps, + SeparatorExpandPopoverListItemProps, +} from './list_group_graph_popover'; +import { EVENT_ACTION } from '../../common/constants'; +import { addFilter, containsFilter, removeFilter } from './search_filters'; + +type NodeToggleAction = 'show' | 'hide'; + +/** + * Hook to handle the label node expand popover. + * This hook is used to show the popover when the user clicks on the expand button of a label node. + * The popover contains the actions to show/hide the events with this action. + * + * @param setSearchFilters - Function to set the search filters. + * @param dataViewId - The data view id. + * @param searchFilters - The search filters. + * @returns The label node expand popover. + */ +export const useLabelNodeExpandPopover = ( + setSearchFilters: React.Dispatch>, + dataViewId: string, + searchFilters: Filter[] +) => { + const onShowEventsWithThisActionClick = useCallback( + (node: NodeProps, action: NodeToggleAction) => { + if (action === 'show') { + setSearchFilters((prev) => + addFilter(dataViewId, prev, EVENT_ACTION, node.data.label ?? '') + ); + } else if (action === 'hide') { + setSearchFilters((prev) => removeFilter(prev, EVENT_ACTION, node.data.label ?? '')); + } + }, + [dataViewId, setSearchFilters] + ); + + const itemsFn = useCallback( + ( + node: NodeProps + ): Array => { + const eventsWithThisActionToggleAction = containsFilter( + searchFilters, + EVENT_ACTION, + node.data.label ?? '' + ) + ? 'hide' + : 'show'; + + return [ + { + type: 'item', + iconType: 'users', + testSubject: GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID, + label: + eventsWithThisActionToggleAction === 'show' + ? i18n.translate( + 'securitySolutionPackages.csp.graph.graphLabelExpandPopover.showEventsWithThisAction', + { defaultMessage: 'Show events with this action' } + ) + : i18n.translate( + 'securitySolutionPackages.csp.graph.graphLabelExpandPopover.hideEventsWithThisAction', + { defaultMessage: 'Hide events with this action' } + ), + onClick: () => { + onShowEventsWithThisActionClick(node, eventsWithThisActionToggleAction); + }, + }, + ]; + }, + [onShowEventsWithThisActionClick, searchFilters] + ); + const labelNodeExpandPopover = useNodeExpandGraphPopover({ + id: 'label-node-expand-popover', + testSubject: GRAPH_LABEL_EXPAND_POPOVER_TEST_ID, + itemsFn, + }); + return labelNodeExpandPopover; +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_node_expand_popover.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_node_expand_graph_popover.tsx similarity index 58% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_node_expand_popover.tsx rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_node_expand_graph_popover.tsx index 984f605533dcb..4cf780abf12e7 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_graph_node_expand_popover.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/use_node_expand_graph_popover.tsx @@ -8,20 +8,66 @@ import React, { memo, useCallback, useRef, useState } from 'react'; import { useGraphPopover } from '../../..'; import type { ExpandButtonClickCallback, NodeProps } from '../types'; -import { GraphNodeExpandPopover } from './graph_node_expand_popover'; +import { + ListGroupGraphPopover, + type ItemExpandPopoverListItemProps, + type SeparatorExpandPopoverListItemProps, +} from './list_group_graph_popover'; +import type { PopoverActions, PopoverState } from '../graph/use_graph_popover'; -interface UseGraphNodeExpandPopoverArgs { - onExploreRelatedEntitiesClick: (node: NodeProps) => void; - onShowActionsByEntityClick: (node: NodeProps) => void; - onShowActionsOnEntityClick: (node: NodeProps) => void; +interface UseNodeExpandGraphPopoverArgs { + /** + * The ID of the popover. + */ + id: string; + + /** + * The data-test-subj value for the popover. + */ + testSubject: string; + + /** + * Function to get the list of items to display in the popover. + * This function is called each time the popover is opened. + */ + itemsFn?: ( + node: NodeProps + ) => Array; +} + +export interface UseNodeExpandGraphPopoverReturn { + /** + * The ID of the popover. + */ + id: string; + + /** + * Handler to open the popover when the node expand button is clicked. + */ + onNodeExpandButtonClick: ExpandButtonClickCallback; + + /** + * The component that renders the popover. + */ + PopoverComponent: React.FC; + + /** + * The popover actions and state. + */ + actions: PopoverActions; + + /** + * The popover state. + */ + state: PopoverState; } -export const useGraphNodeExpandPopover = ({ - onExploreRelatedEntitiesClick, - onShowActionsByEntityClick, - onShowActionsOnEntityClick, -}: UseGraphNodeExpandPopoverArgs) => { - const { id, state, actions } = useGraphPopover('node-expand-popover'); +export const useNodeExpandGraphPopover = ({ + id, + testSubject, + itemsFn, +}: UseNodeExpandGraphPopoverArgs): UseNodeExpandGraphPopoverReturn => { + const { state, actions } = useGraphPopover(id); const { openPopover, closePopover } = actions; const selectedNode = useRef(null); @@ -60,27 +106,40 @@ export const useGraphNodeExpandPopover = ({ [closePopoverHandler] ); + // Wrap the items function to add the onClick handler to the items and close the popover + const itemsFnWrapper = useCallback(() => { + const node = selectedNode.current; + + if (!node) { + return []; + } + + const items = itemsFn?.(node) || []; + return items.map((item) => { + if (item.type === 'item') { + return { + ...item, + onClick: () => { + item.onClick(); + closePopoverHandler(); + }, + }; + } + + return item; + }); + }, [closePopoverHandler, itemsFn]); + // PopoverComponent is a memoized component that renders the GraphNodeExpandPopover // It handles the display of the popover and the actions that can be performed on the node - // eslint-disable-next-line react/display-name const PopoverComponent = memo(() => ( - { - onExploreRelatedEntitiesClick(selectedNode.current as NodeProps); - closePopoverHandler(); - }} - onShowActionsByEntityClick={() => { - onShowActionsByEntityClick(selectedNode.current as NodeProps); - closePopoverHandler(); - }} - onShowActionsOnEntityClick={() => { - onShowActionsOnEntityClick(selectedNode.current as NodeProps); - closePopoverHandler(); - }} + itemsFn={itemsFnWrapper} + testSubject={testSubject} /> )); @@ -99,9 +158,9 @@ export const useGraphNodeExpandPopover = ({ } return { + id, onNodeExpandButtonClick, PopoverComponent, - id, actions: { ...actions, closePopover: closePopoverHandler, diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/mock_context_provider.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/mock_context_provider.tsx new file mode 100644 index 0000000000000..5ecf28a27ad0c --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/mock_context_provider.tsx @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { createContext, useContext, useState } from 'react'; + +interface MockData { + useFetchGraphDataMock?: { + log?: (...args: unknown[]) => void; + isFetching?: boolean; + refresh?: () => void; + }; +} + +const MockDataContext = createContext<{ + data: MockData; + setData: (newData: MockData) => void; +} | null>(null); + +interface MockDataProviderProps { + data?: MockData; + children: React.ReactNode; +} + +export const MockDataProvider = ({ children, data = {} }: MockDataProviderProps) => { + const [mockData, setMockData] = useState(data); + + // Synchronize data prop with state + React.useEffect(() => { + setMockData({ ...data }); + }, [data]); + + return ( + + {children} + + ); +}; + +export const useMockDataContext = () => { + const context = useContext(MockDataContext); + if (!context) { + throw new Error('useMockDataContext must be used within a MockDataProvider'); + } + return context; +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/use_fetch_graph_data.mock.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/use_fetch_graph_data.mock.ts index dcf00e22e52b9..58c0c11791fdc 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/use_fetch_graph_data.mock.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/use_fetch_graph_data.mock.ts @@ -6,17 +6,19 @@ */ import { useMemo } from 'react'; -import { action } from '@storybook/addon-actions'; import type { UseFetchGraphDataParams } from '../../hooks/use_fetch_graph_data'; -import { USE_FETCH_GRAPH_DATA_ACTION, USE_FETCH_GRAPH_DATA_REFRESH_ACTION } from './constants'; +import { useMockDataContext } from './mock_context_provider'; export const useFetchGraphData = (params: UseFetchGraphDataParams) => { - action(USE_FETCH_GRAPH_DATA_ACTION)(JSON.stringify(params)); + const { + data: { useFetchGraphDataMock }, + } = useMockDataContext(); + useFetchGraphDataMock?.log?.(JSON.stringify(params)); return useMemo( () => ({ isLoading: false, - isFetching: false, + isFetching: useFetchGraphDataMock?.isFetching ?? false, isError: false, data: { nodes: [ @@ -64,8 +66,8 @@ export const useFetchGraphData = (params: UseFetchGraphDataParams) => { }, ], }, - refresh: action(USE_FETCH_GRAPH_DATA_REFRESH_ACTION), + refresh: useFetchGraphDataMock?.refresh ?? (() => {}), }), - [] + [useFetchGraphDataMock] ); }; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/node_expand_button.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/node_expand_button.tsx index 80d354cd77d6b..f525f74f2a739 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/node_expand_button.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/node_expand_button.tsx @@ -8,6 +8,7 @@ import React, { useCallback, useState } from 'react'; import { StyledNodeExpandButton, RoundEuiButtonIcon, ExpandButtonSize } from './styles'; import type { EntityNodeViewModel, LabelNodeViewModel } from '..'; +import { NODE_EXPAND_BUTTON_TEST_ID } from '../test_ids'; export interface NodeExpandButtonProps { x?: string; @@ -37,7 +38,7 @@ export const NodeExpandButton = ({ x, y, color, onClick }: NodeExpandButtonProps onClick={onClickHandler} iconSize="m" aria-label="Open or close node actions" - data-test-subj="nodeExpandButton" + data-test-subj={NODE_EXPAND_BUTTON_TEST_ID} /> ); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts index ec711d4acc819..468d184232ddd 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts @@ -30,3 +30,5 @@ export const GRAPH_CONTROLS_ZOOM_IN_ID = `${GRAPH_INVESTIGATION_TEST_ID}ZoomIn` export const GRAPH_CONTROLS_ZOOM_OUT_ID = `${GRAPH_INVESTIGATION_TEST_ID}ZoomOut` as const; export const GRAPH_CONTROLS_CENTER_ID = `${GRAPH_INVESTIGATION_TEST_ID}Center` as const; export const GRAPH_CONTROLS_FIT_VIEW_ID = `${GRAPH_INVESTIGATION_TEST_ID}FitView` as const; + +export const NODE_EXPAND_BUTTON_TEST_ID = `${PREFIX}NodeExpandButton` as const; diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml index 2aac93167d2a9..0dcdfced8b10e 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml @@ -464,11 +464,17 @@ components: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListDescription' @@ -489,13 +495,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/ExceptionListVersion' @@ -514,31 +525,47 @@ components: - updated_at - updated_by ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string ExceptionListHumanId: - $ref: '#/components/schemas/NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: >- + Exception list's human readable string identifier, e.g. + `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string ExceptionListId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string ExceptionListItem: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string comments: $ref: '#/components/schemas/ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListItemDescription' entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' id: $ref: '#/components/schemas/ExceptionListItemId' item_id: @@ -556,13 +583,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListItemTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -585,6 +617,7 @@ components: comment: $ref: '#/components/schemas/NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -592,6 +625,7 @@ components: id: $ref: '#/components/schemas/NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -602,10 +636,15 @@ components: - created_at - created_by ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/ExceptionListItemComment' type: array ExceptionListItemDescription: + description: Describes the exception list. type: string ExceptionListItemEntry: anyOf: @@ -747,22 +786,44 @@ components: - excluded - included type: string + ExceptionListItemExpireTime: + description: >- + The exception item’s expiration date, in ISO format. This field is only + available for regular exception items, not endpoint exceptions. + format: date-time + type: string ExceptionListItemHumanId: - $ref: '#/components/schemas/NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string ExceptionListItemId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string ExceptionListItemMeta: additionalProperties: true type: object ExceptionListItemName: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/ExceptionListOsType' type: array ExceptionListItemTags: items: - $ref: '#/components/schemas/NonEmptyString' + description: >- + String array containing words and phrases to help categorize exception + items. + format: nonempty + minLength: 1 + type: string type: array ExceptionListItemType: enum: @@ -770,24 +831,35 @@ components: type: string ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object ExceptionListName: + description: The name of the exception list. + example: My exception list type: string ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/ExceptionListOsType' type: array ExceptionListTags: + description: >- + String array containing words and phrases to help categorize exception + containers. items: type: string type: array ExceptionListType: + description: >- + The type of exception list to be created. Different list types may + denote where they can be utilized. enum: - detection - rule_default @@ -798,6 +870,7 @@ components: - endpoint_blocklists type: string ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer ExceptionNamespaceType: diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml index 1257b37622add..a472aaf164983 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/security_solution_endpoint_exceptions_api_2023_10_31.bundled.schema.yaml @@ -464,11 +464,17 @@ components: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListDescription' @@ -489,13 +495,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/ExceptionListVersion' @@ -514,31 +525,47 @@ components: - updated_at - updated_by ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string ExceptionListHumanId: - $ref: '#/components/schemas/NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: >- + Exception list's human readable string identifier, e.g. + `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string ExceptionListId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string ExceptionListItem: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string comments: $ref: '#/components/schemas/ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListItemDescription' entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' id: $ref: '#/components/schemas/ExceptionListItemId' item_id: @@ -556,13 +583,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListItemTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -585,6 +617,7 @@ components: comment: $ref: '#/components/schemas/NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -592,6 +625,7 @@ components: id: $ref: '#/components/schemas/NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -602,10 +636,15 @@ components: - created_at - created_by ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/ExceptionListItemComment' type: array ExceptionListItemDescription: + description: Describes the exception list. type: string ExceptionListItemEntry: anyOf: @@ -747,22 +786,44 @@ components: - excluded - included type: string + ExceptionListItemExpireTime: + description: >- + The exception item’s expiration date, in ISO format. This field is only + available for regular exception items, not endpoint exceptions. + format: date-time + type: string ExceptionListItemHumanId: - $ref: '#/components/schemas/NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string ExceptionListItemId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string ExceptionListItemMeta: additionalProperties: true type: object ExceptionListItemName: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/ExceptionListOsType' type: array ExceptionListItemTags: items: - $ref: '#/components/schemas/NonEmptyString' + description: >- + String array containing words and phrases to help categorize exception + items. + format: nonempty + minLength: 1 + type: string type: array ExceptionListItemType: enum: @@ -770,24 +831,35 @@ components: type: string ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object ExceptionListName: + description: The name of the exception list. + example: My exception list type: string ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/ExceptionListOsType' type: array ExceptionListTags: + description: >- + String array containing words and phrases to help categorize exception + containers. items: type: string type: array ExceptionListType: + description: >- + The type of exception list to be created. Different list types may + denote where they can be utilized. enum: - detection - rule_default @@ -798,6 +870,7 @@ components: - endpoint_blocklists type: string ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer ExceptionNamespaceType: diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list/create_exception_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list/create_exception_list.schema.yaml index e4aa39a5db30f..1826d94495dcb 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list/create_exception_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list/create_exception_list.schema.yaml @@ -10,7 +10,7 @@ paths: x-codegen-enabled: true summary: Create an exception list description: | - An exception list groups exception items and can be associated with detection rules. You can assign detection rules with multiple exception lists. + An exception list groups exception items and can be associated with detection rules. You can assign exception lists to multiple detection rules. > info > All exception items added to the same list are evaluated using `OR` logic. That is, if any of the items in a list evaluate to `true`, the exception prevents the rule from generating an alert. Likewise, `OR` logic is used for evaluating exceptions when more than one exception list is assigned to a rule. To use the `AND` operator, you can define multiple clauses (`entries`) in a single exception item. requestBody: @@ -20,6 +20,14 @@ paths: application/json: schema: type: object + example: + list_id: simple_list + type: detection + name: Sample Detection Exception List + description: This is a sample detection type exception list. + namespace_type: single + tags: [malware] + os_types: [linux] properties: list_id: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListHumanId' @@ -53,6 +61,79 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionList' + examples: + typeDetection: + value: + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + list_id: simple_list + type: detection + name: Sample Detection Exception List + description: This is a sample detection type exception list. + immutable: false + namespace_type: single + os_types: [linux] + tags: [malware] + version: 1 + _version: WzIsMV0= + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + typeEndpoint: + value: + id: a79f4730-6e32-4278-abfc-349c0add7d54 + list_id: endpoint_list + type: endpoint + name: Sample Endpoint Exception List + description: This is a sample endpoint type exception list. + immutable: false + namespace_type: single + os_types: [linux] + tags: [malware] + version: 1 + _version: WzQsMV0= + tie_breaker_id: 94a028af-8f47-427a-aca5-ffaf829e64ee + created_at: 2025-01-09T01:07:49.658Z + created_by: elastic + updated_at: 2025-01-09T01:07:49.658Z + updated_by: elastic + namespaceAgnostic: + value: + id: 1a744e77-22ca-4b6b-9085-54f55275ebe5 + list_id: b935eb55-7b21-4c1c-b235-faa1df23b3d6 + type: endpoint + name: Sample Agnostic Endpoint Exception List + description: This is a sample agnostic endpoint type exception. + immutable: false + namespace_type: agnostic + os_types: [linux] + tags: [malware] + version: 1 + _version: WzUsMV0= + tie_breaker_id: 49ea0adc-a2b8-4d83-a8f3-2fb98301dea3 + created_at: 2025-01-09T01:10:36.369Z + created_by: elastic + updated_at: 2025-01-09T01:10:36.369Z + updated_by: elastic + autogeneratedListId: + value: + id: 28243c2f-624a-4443-823d-c0b894880931 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + type: detection + name: Sample Detection Exception List + description: This is a sample detection type exception with an autogenerated list_id. + immutable: false + namespace_type: single + os_types: [] + tags: [malware] + version: 1 + _version: WzMsMV0= + tie_breaker_id: ad94de31-39f7-4ad7-b8e4-988bfa95f338 + created_at: 2025-01-09T01:05:23.019Z + created_by: elastic + updated_at: 2025-01-09T01:05:23.020Z + updated_by: elastic 400: description: Invalid input data response content: @@ -61,27 +142,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request body]: list_id: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/exception_lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 409: description: Exception list already exists response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.gen.ts index dba75c11fde83..7f007b0ce30bb 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.gen.ts @@ -27,6 +27,7 @@ import { ExceptionListItemOsTypeArray, ExceptionListItemTags, ExceptionListItemMeta, + ExceptionListItemExpireTime, ExceptionListItem, } from '../model/exception_list_common.gen'; import { ExceptionListItemEntryArray } from '../model/exception_list_item_entry.gen'; @@ -53,7 +54,7 @@ export const CreateExceptionListItemRequestBody = z.object({ os_types: ExceptionListItemOsTypeArray.optional().default([]), tags: ExceptionListItemTags.optional().default([]), meta: ExceptionListItemMeta.optional(), - expire_time: z.string().datetime().optional(), + expire_time: ExceptionListItemExpireTime.optional(), comments: CreateExceptionListItemCommentArray.optional().default([]), }); export type CreateExceptionListItemRequestBodyInput = z.input< diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.schema.yaml index a86c6a21e25ed..e2afedbce5b35 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_exception_list_item/create_exception_list_item.schema.yaml @@ -20,6 +20,23 @@ paths: application/json: schema: type: object + example: + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + - type: match_any + field: host.name + value: [saturn, jupiter] + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] properties: item_id: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemHumanId' @@ -45,8 +62,7 @@ paths: meta: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemMeta' expire_time: - type: string - format: date-time + $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemExpireTime' comments: $ref: '#/components/schemas/CreateExceptionListItemCommentArray' default: [] @@ -63,6 +79,174 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItem' + examples: + detectionExceptionListItem: + value: + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + autogeneratedItemId: + value: + id: 323faa75-c657-4fa0-9084-8827612c207b + item_id: 80e6edf7-4b13-4414-858f-2fa74aa52b37 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + type: simple + name: Sample Autogenerated Exception List Item ID + description: This is a sample exception that has no item_id so it is autogenerated. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + namespace_type: single + os_types: [] + tags: [malware] + comments: [] + _version: WzYsMV0= + tie_breaker_id: d6799986-3a23-4213-bc6d-ed9463a32f23 + created_at: 2025-01-09T01:16:23.322Z + created_by: elastic + updated_at: 2025-01-09T01:16:23.322Z + updated_by: elastic + withMatchAnyEntry: + value: + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: match_any + field: host.name + value: [saturn, jupiter] + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withMatchEntry: + value: + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: match + field: actingProcess.file.signer + value: Elastic N.V. + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withNestedEntry: + value: + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: nested + field: file.signature + entries: + - type: match + field: signer + value: Evil + operator: included + - type: match + field: trusted + value: true + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withExistEntry: + value: + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withValueListEntry: + value: + id: deb26876-297d-4677-8a1f-35467d2f1c4f + item_id: 686b129e-9b8d-4c59-8d8d-c93a9ea82c71 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + type: simple + name: Filter out good guys ip and agent.name rock01 + description: Don't signal when agent.name is rock01 and source.ip is in the goodguys.txt list + entries: + - type: list + field: source.ip + list: + id: goodguys.txt + type: ip + operator: excluded + namespace_type: single + os_types: [] + tags: [malware] + comments: [] + _version: WzcsMV0= + tie_breaker_id: 5e0288ce-6657-4c18-9dcc-00ec9e8cc6c8 + created_at: 2025-01-09T01:31:12.614Z + created_by: elastic + updated_at: 2025-01-09T01:31:12.614Z + updated_by: elastic 400: description: Invalid input data response content: @@ -71,30 +255,58 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400, + error: Bad Request, + message: '[request body]: list_id: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/exception_lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 409: description: Exception list item already exists response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + alreadyExists: + value: + message: 'exception list item id: \"simple_list_item\" already exists' + status_code: 409 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: x-codegen-enabled: true diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.gen.ts index e2fa379cdc528..ccd2739a0ba82 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.gen.ts @@ -10,7 +10,7 @@ * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. * * info: - * title: Create rule exception list items API endpoint + * title: Create rule exception items API endpoint * version: 2023-10-31 */ diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.schema.yaml index 246c8de363a68..f466f50839ead 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_rule_exceptions/create_rule_exceptions.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: Create rule exception list items API endpoint + title: Create rule exception items API endpoint version: '2023-10-31' paths: /api/detection_engine/rules/{id}/exceptions: @@ -8,7 +8,7 @@ paths: x-labels: [serverless, ess] operationId: CreateRuleExceptionListItems x-codegen-enabled: true - summary: Create rule exception list items + summary: Create rule exception items description: Create exception items that apply to a single detection rule. parameters: - name: id @@ -17,8 +17,11 @@ paths: description: Detection rule's identifier schema: $ref: '#/components/schemas/RuleId' + examples: + id: + value: 330bdd28-eedf-40e1-bed0-f10176c7f9e0 requestBody: - description: Rule exception list items + description: Rule exception items. required: true content: application/json: @@ -30,6 +33,24 @@ paths: items: $ref: '#/components/schemas/CreateRuleExceptionListItemProps' required: [items] + example: + items: + - item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + - type: match_any + field: host.name + value: [saturn, jupiter] + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] responses: 200: description: Successful response @@ -39,6 +60,33 @@ paths: type: array items: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItem' + examples: + ruleExceptionItems: + value: + - id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + - type: match_any + field: host.name + value: [saturn, jupiter] + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic 400: description: Invalid input data response content: @@ -47,24 +95,51 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request params]: id: Invalid uuid' + badPayload: + value: + statusCode: 400 + error: Bad Request + message: 'Invalid request payload JSON format' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + message: 'Unable to create exception-list' + status_code: 403 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: schemas: diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_shared_exceptions_list/create_shared_exceptions_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_shared_exceptions_list/create_shared_exceptions_list.schema.yaml index 5ac7e8e78ccbb..221064a285037 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_shared_exceptions_list/create_shared_exceptions_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/create_shared_exceptions_list/create_shared_exceptions_list.schema.yaml @@ -27,6 +27,13 @@ paths: required: - name - description + example: + list_id: simple_list + name: Sample Detection Exception List + description: This is a sample detection type exception list. + namespace_type: single + tags: [malware] + os_types: [linux] responses: 200: description: Successful response @@ -34,6 +41,25 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionList' + examples: + sharedList: + value: + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + list_id: simple_list + type: detection + name: Sample Detection Exception List + description: This is a sample detection type exception list. + immutable: false + namespace_type: single + os_types: [linux] + tags: [malware] + version: 1 + _version: WzIsMV0= + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic 400: description: Invalid input data response content: @@ -42,27 +68,54 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request body]: list_id: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + message: 'Unable to create exception-list' + status_code: 403 409: description: Exception list already exists response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.gen.ts index 0842dc7c74637..9a53ef944f5f8 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.gen.ts @@ -26,11 +26,11 @@ import { export type DeleteExceptionListRequestQuery = z.infer; export const DeleteExceptionListRequestQuery = z.object({ /** - * Either `id` or `list_id` must be specified + * Exception list's identifier. Either `id` or `list_id` must be specified. */ id: ExceptionListId.optional(), /** - * Either `id` or `list_id` must be specified + * Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. */ list_id: ExceptionListHumanId.optional(), namespace_type: ExceptionNamespaceType.optional().default('single'), diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.schema.yaml index 709afe0fdff6b..0135f0fa86557 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list/delete_exception_list.schema.yaml @@ -14,21 +14,31 @@ paths: - name: id in: query required: false - description: Either `id` or `list_id` must be specified + description: Exception list's identifier. Either `id` or `list_id` must be specified. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListId' - name: list_id in: query required: false - description: Either `id` or `list_id` must be specified + description: Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListHumanId' + examples: + list_id: + value: simple_list + autogeneratedId: + value: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 - name: namespace_type in: query required: false schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' default: single + examples: + single: + value: single + agnostic: + value: agnostic responses: 200: description: Successful response @@ -36,6 +46,25 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionList' + examples: + detectionExceptionList: + value: + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + list_id: simple_list + type: detection + name: Sample Detection Exception List + description: This is a sample detection type exception list. + immutable: false + namespace_type: single + os_types: [linux] + tags: [malware] + version: 1 + _version: WzIsMV0= + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic 400: description: Invalid input data response content: @@ -44,27 +73,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type.0: Invalid enum value. Expected 'agnostic' | 'single', received 'blob'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [DELETE /api/exception_lists?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: Exception list not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.gen.ts index 429568c33f1c6..be7ff9b9279e4 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.gen.ts @@ -28,11 +28,11 @@ export type DeleteExceptionListItemRequestQuery = z.infer< >; export const DeleteExceptionListItemRequestQuery = z.object({ /** - * Either `id` or `item_id` must be specified + * Exception item's identifier. Either `id` or `item_id` must be specified */ id: ExceptionListItemId.optional(), /** - * Either `id` or `item_id` must be specified + * Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified */ item_id: ExceptionListItemHumanId.optional(), namespace_type: ExceptionNamespaceType.optional().default('single'), diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.schema.yaml index 22344db77f619..47853cade34f8 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/delete_exception_list_item/delete_exception_list_item.schema.yaml @@ -14,13 +14,13 @@ paths: - name: id in: query required: false - description: Either `id` or `item_id` must be specified + description: Exception item's identifier. Either `id` or `item_id` must be specified schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemId' - name: item_id in: query required: false - description: Either `id` or `item_id` must be specified + description: Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemHumanId' - name: namespace_type @@ -29,6 +29,11 @@ paths: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' default: single + examples: + single: + value: single + agnostic: + value: agnostic responses: 200: description: Successful response @@ -36,6 +41,33 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItem' + examples: + simpleExceptionItem: + value: + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + - type: match_any + field: host.name + value: [saturn, jupiter] + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic 400: description: Invalid input data response content: @@ -44,27 +76,53 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + example: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type.0: Invalid enum value. Expected 'agnostic' | 'single', received 'blob'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [DELETE /api/exception_lists/items?item_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: Exception list item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.gen.ts index d259d37b23487..46ea69aa82d4b 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.gen.ts @@ -24,13 +24,10 @@ import { export type DuplicateExceptionListRequestQuery = z.infer; export const DuplicateExceptionListRequestQuery = z.object({ - /** - * Exception list's human identifier - */ list_id: ExceptionListHumanId, namespace_type: ExceptionNamespaceType, /** - * Determines whether to include expired exceptions in the exported list + * Determines whether to include expired exceptions in the duplicated list. Expiration date defined by `expire_time`. */ include_expired_exceptions: z.enum(['true', 'false']).default('true'), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.schema.yaml index a758d2856123b..6d3ab96bb122f 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/duplicate_exception_list/duplicate_exception_list.schema.yaml @@ -14,7 +14,6 @@ paths: - name: list_id in: query required: true - description: Exception list's human identifier schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListHumanId' - name: namespace_type @@ -22,14 +21,20 @@ paths: required: true schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' + examples: + single: + value: single + agnostic: + value: agnostic - name: include_expired_exceptions in: query required: true - description: Determines whether to include expired exceptions in the exported list + description: Determines whether to include expired exceptions in the duplicated list. Expiration date defined by `expire_time`. schema: type: string enum: ['true', 'false'] default: 'true' + example: true responses: 200: description: Successful response @@ -37,6 +42,25 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionList' + examples: + detectionExceptionList: + value: + id: b2f4a715-6ab1-444c-8b1e-3fa1b1049429 + list_id: d6390d60-bce3-4a48-9002-52db600f329c + type: detection + name: Sample Detection Exception List [Duplicate] + description: This is a sample detection type exception + immutable: false + namespace_type: single + os_types: [] + tags: [malware] + version: 1 + _version: WzExNDY1LDFd + tie_breaker_id: 6fa670bd-666d-4c9c-9f1e-d1dbc516e985 + created_at: 2025-01-09T16:19:50.280Z + created_by: elastic + updated_at: 2025-01-09T16:19:50.280Z + updated_by: elastic 400: description: Invalid input data response content: @@ -45,18 +69,47 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type: Invalid enum value. Expected 'agnostic' | 'single', received 'foo'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/exception_lists/_duplicate] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' + 404: + description: Exception list not found + content: + application/json: + schema: + $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 405: description: Exception list to duplicate not found response content: @@ -69,3 +122,8 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.gen.ts index 280884c7d749d..f464a458dffb4 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.gen.ts @@ -24,17 +24,11 @@ import { export type ExportExceptionListRequestQuery = z.infer; export const ExportExceptionListRequestQuery = z.object({ - /** - * Exception list's identifier - */ id: ExceptionListId, - /** - * Exception list's human identifier - */ list_id: ExceptionListHumanId, namespace_type: ExceptionNamespaceType, /** - * Determines whether to include expired exceptions in the exported list + * Determines whether to include expired exceptions in the exported list. Expiration date defined by `expire_time`. */ include_expired_exceptions: z.enum(['true', 'false']).default('true'), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.schema.yaml index 2d5242131adbe..fe15640bf2cc3 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/export_exception_list/export_exception_list.schema.yaml @@ -14,13 +14,11 @@ paths: - name: id in: query required: true - description: Exception list's identifier schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListId' - name: list_id in: query required: true - description: Exception list's human identifier schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListHumanId' - name: namespace_type @@ -28,14 +26,20 @@ paths: required: true schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' + examples: + single: + value: single + agnostic: + value: agnostic - name: include_expired_exceptions in: query required: true - description: Determines whether to include expired exceptions in the exported list + description: Determines whether to include expired exceptions in the exported list. Expiration date defined by `expire_time`. schema: type: string enum: ['true', 'false'] default: 'true' + example: true responses: 200: description: Successful response @@ -45,6 +49,12 @@ paths: type: string format: binary description: A `.ndjson` file containing specified exception list and its items + examples: + exportSavedObjectsResponse: + value: | + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This is a sample detection type exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample Detection Exception List","namespace_type":"single","os_types":[],"tags":["user added string for a tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This is a sample endpoint type exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some host","another host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample Endpoint Exception List","namespace_type":"single","os_types":["linux"],"tags":["user added string for a tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} + {"exported_exception_list_count":1,"exported_exception_list_item_count":1,"missing_exception_list_item_count":0,"missing_exception_list_items":[],"missing_exception_lists":[],"missing_exception_lists_count":0} 400: description: Invalid input data response content: @@ -53,27 +63,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request query]: list_id: Required, namespace_type: Required' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/exception_lists/_export] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: Exception list not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.gen.ts index d7606bbccff37..0af303b491fc5 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.gen.ts @@ -30,7 +30,7 @@ export const FindExceptionListItemsFilter = NonEmptyString; export type FindExceptionListItemsRequestQuery = z.infer; export const FindExceptionListItemsRequestQuery = z.object({ /** - * List's id + * The `list_id`s of the items to fetch. */ list_id: ArrayFromString(ExceptionListHumanId), /** @@ -55,11 +55,11 @@ or available in all spaces (`agnostic` or `single`) */ per_page: z.coerce.number().int().min(0).optional(), /** - * Determines which field is used to sort the results + * Determines which field is used to sort the results. */ sort_field: NonEmptyString.optional(), /** - * Determines the sort order, which can be `desc` or `asc` + * Determines the sort order, which can be `desc` or `asc`. */ sort_order: z.enum(['desc', 'asc']).optional(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.schema.yaml index fc76802492420..640ec9b69efad 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_list_items/find_exception_list_items.schema.yaml @@ -14,7 +14,7 @@ paths: - name: list_id in: query required: true - description: List's id + description: The `list_id`s of the items to fetch. schema: type: array items: @@ -30,6 +30,9 @@ paths: items: $ref: '#/components/schemas/FindExceptionListItemsFilter' default: [] + examples: + singleFilter: + value: [exception-list.attributes.name:%My%20item] - name: namespace_type in: query required: false @@ -41,11 +44,15 @@ paths: items: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' default: [single] + examples: + single: + value: [single] - name: search in: query required: false schema: type: string + example: host.name - name: page in: query required: false @@ -53,6 +60,7 @@ paths: schema: type: integer minimum: 0 + example: 1 - name: per_page in: query required: false @@ -60,19 +68,22 @@ paths: schema: type: integer minimum: 0 + example: 20 - name: sort_field in: query required: false - description: Determines which field is used to sort the results + description: Determines which field is used to sort the results. schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + example: 'name' - name: sort_order in: query required: false - description: Determines the sort order, which can be `desc` or `asc` + description: Determines the sort order, which can be `desc` or `asc`. schema: type: string enum: [desc, asc] + example: desc responses: 200: description: Successful response @@ -101,6 +112,37 @@ paths: - page - per_page - total + examples: + simpleListItems: + value: + data: + - id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + - type: match_any + field: host.name + value: [jupiter, saturn] + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzgsMV0= + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + created_at: 2025-01-07T21:12:25.512Z + created_by: elastic + updated_at: 2025-01-07T21:12:25.512Z + updated_by: elastic + page: 1 + per_page: 20 + total: 1 400: description: Invalid input data response content: @@ -109,30 +151,58 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type.0: Invalid enum value. Expected 'agnostic' | 'single', received 'blob'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/exception_lists/items/_find?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 404: description: Exception list not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: schemas: diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.gen.ts index 82f5de2f5a157..7b1b670a3877b 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.gen.ts @@ -49,11 +49,11 @@ or available in all spaces (`agnostic` or `single`) */ per_page: z.coerce.number().int().min(1).optional(), /** - * Determines which field is used to sort the results + * Determines which field is used to sort the results. */ sort_field: z.string().optional(), /** - * Determines the sort order, which can be `desc` or `asc` + * Determines the sort order, which can be `desc` or `asc`. */ sort_order: z.enum(['desc', 'asc']).optional(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.schema.yaml index e5ef4f83a1343..78d87881e38e2 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/find_exception_lists/find_exception_lists.schema.yaml @@ -9,7 +9,7 @@ paths: operationId: FindExceptionLists x-codegen-enabled: true summary: Get exception lists - description: Get a list of all exception lists. + description: Get a list of all exception list containers. parameters: - name: filter in: query @@ -34,6 +34,11 @@ paths: items: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' default: [single] + examples: + single: + value: single + agnostic: + value: agnostic - name: page in: query required: false @@ -41,6 +46,7 @@ paths: schema: type: integer minimum: 1 + example: 1 - name: per_page in: query required: false @@ -48,19 +54,22 @@ paths: schema: type: integer minimum: 1 + example: 20 - name: sort_field in: query required: false - description: Determines which field is used to sort the results + description: Determines which field is used to sort the results. schema: type: string + example: 'name' - name: sort_order in: query required: false - description: Determines the sort order, which can be `desc` or `asc` + description: Determines the sort order, which can be `desc` or `asc`. schema: type: string enum: [desc, asc] + example: 'desc' responses: 200: description: Successful response @@ -87,6 +96,29 @@ paths: - page - per_page - total + examples: + simpleLists: + value: + data: + - id: '9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85' + list_id: 'simple_list' + type: 'detection' + name: 'Detection Exception List' + description: 'This is a sample detection type exception list.' + immutable: false + namespace_type: 'single' + os_types: [] + tags: ['malware'] + version: 1 + _version: 'WzIsMV0=' + tie_breaker_id: '78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3' + created_at: 2025-01-07T19:34:27.942Z + created_by: 'elastic' + updated_at: 2025-01-07T19:34:27.942Z + updated_by: 'elastic' + page: 1 + per_page: 20 + total: 1 400: description: Invalid input data response content: @@ -95,26 +127,50 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type.0: Invalid enum value. Expected 'agnostic' | 'single', received 'blob'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/exception_lists/_find?namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: schemas: FindExceptionListsFilter: type: string + example: exception-list.attributes.name:%Detection%20List diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.gen.ts index 738ce79dd97d0..b7da0f541552c 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.gen.ts @@ -45,8 +45,6 @@ If any exception items have the same `item_id`, those are also overwritten. */ overwrite: BooleanFromString.optional().default(false), - overwrite_exceptions: BooleanFromString.optional().default(false), - overwrite_action_connectors: BooleanFromString.optional().default(false), /** * Determines whether the list being imported will have a new `list_id` generated. Additional `item_id`'s are generated for each exception item. Both the exception diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.schema.yaml index 75778f07c0c8e..c3bd0eb853e0c 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/import_exceptions/import_exceptions.schema.yaml @@ -21,6 +21,9 @@ paths: type: string format: binary description: A `.ndjson` file containing the exception list + example: | + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This is a sample detection type exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample Detection Exception List","namespace_type":"single","os_types":[],"tags":["user added string for a tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This is a sample endpoint type exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some host","another host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample Endpoint Exception List","namespace_type":"single","os_types":["linux"],"tags":["user added string for a tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} parameters: - name: overwrite in: query @@ -31,18 +34,7 @@ paths: schema: type: boolean default: false - - name: overwrite_exceptions - in: query - required: false - schema: - type: boolean - default: false - - name: overwrite_action_connectors - in: query - required: false - schema: - type: boolean - default: false + example: false - name: as_new_list in: query required: false @@ -53,6 +45,7 @@ paths: schema: type: boolean default: false + example: false responses: 200: description: Successful response @@ -86,6 +79,34 @@ paths: - success_count_exception_lists - success_exception_list_items - success_count_exception_list_items + examples: + withoutErrors: + value: + errors: [] + success: true + success_count: 2 + success_exception_lists: true, + success_count_exception_lists: 1 + success_exception_list_items: true + success_count_exception_list_items: 1 + withErrors: + value: + errors: + - error: + status_code: 400 + message: 'Error found importing exception list: Invalid value \"4\" supplied to \"list_id\"' + list_id: (unknown list_id) + - error: + status_code: 409 + message: 'Found that item_id: \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" already exists. Import of item_id: \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" skipped.' + list_id: 7d7cccb8-db72-4667-b1f3-648efad7c1ee + item_id: f7fd00bb-dba8-4c93-9d59-6cbd427b6330 + success: false, + success_count: 0, + success_exception_lists: false, + success_count_exception_lists: 0, + success_exception_list_items: false, + success_count_exception_list_items: 0 400: description: Invalid input data response content: @@ -100,18 +121,35 @@ paths: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [POST /api/exception_lists/_import] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: schemas: diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.gen.ts index 2ee44afa69b9f..1f4e41bdce711 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.gen.ts @@ -15,19 +15,26 @@ */ import { z } from '@kbn/zod'; +import { isNonEmptyString } from '@kbn/zod-helpers'; import { NonEmptyString } from '@kbn/openapi-common/schemas/primitives.gen'; import { ExceptionListItemEntryArray } from './exception_list_item_entry.gen'; +/** + * Exception list's identifier. + */ export type ExceptionListId = z.infer; -export const ExceptionListId = NonEmptyString; +export const ExceptionListId = z.string().min(1).superRefine(isNonEmptyString); /** - * Human readable string identifier, e.g. `trusted-linux-processes` + * Exception list's human readable string identifier, e.g. `trusted-linux-processes`. */ export type ExceptionListHumanId = z.infer; -export const ExceptionListHumanId = NonEmptyString; +export const ExceptionListHumanId = z.string().min(1).superRefine(isNonEmptyString); +/** + * The type of exception list to be created. Different list types may denote where they can be utilized. + */ export type ExceptionListType = z.infer; export const ExceptionListType = z.enum([ 'detection', @@ -41,12 +48,21 @@ export const ExceptionListType = z.enum([ export type ExceptionListTypeEnum = typeof ExceptionListType.enum; export const ExceptionListTypeEnum = ExceptionListType.enum; +/** + * The name of the exception list. + */ export type ExceptionListName = z.infer; export const ExceptionListName = z.string(); +/** + * Describes the exception list. + */ export type ExceptionListDescription = z.infer; export const ExceptionListDescription = z.string(); +/** + * Placeholder for metadata about the list container. + */ export type ExceptionListMeta = z.infer; export const ExceptionListMeta = z.object({}).catchall(z.unknown()); @@ -63,17 +79,29 @@ export const ExceptionNamespaceType = z.enum(['agnostic', 'single']); export type ExceptionNamespaceTypeEnum = typeof ExceptionNamespaceType.enum; export const ExceptionNamespaceTypeEnum = ExceptionNamespaceType.enum; +/** + * String array containing words and phrases to help categorize exception containers. + */ export type ExceptionListTags = z.infer; export const ExceptionListTags = z.array(z.string()); +/** + * Use this field to specify the operating system. + */ export type ExceptionListOsType = z.infer; export const ExceptionListOsType = z.enum(['linux', 'macos', 'windows']); export type ExceptionListOsTypeEnum = typeof ExceptionListOsType.enum; export const ExceptionListOsTypeEnum = ExceptionListOsType.enum; +/** + * Use this field to specify the operating system. Only enter one value. + */ export type ExceptionListOsTypeArray = z.infer; export const ExceptionListOsTypeArray = z.array(ExceptionListOsType); +/** + * The document version, automatically increasd on updates. + */ export type ExceptionListVersion = z.infer; export const ExceptionListVersion = z.number().int().min(1); @@ -90,34 +118,70 @@ export const ExceptionList = z.object({ tags: ExceptionListTags.optional(), meta: ExceptionListMeta.optional(), version: ExceptionListVersion, + /** + * The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. + */ _version: z.string().optional(), + /** + * Field used in search to ensure all containers are sorted and returned correctly. + */ tie_breaker_id: z.string(), + /** + * Autogenerated date of object creation. + */ created_at: z.string().datetime(), + /** + * Autogenerated value - user that created object. + */ created_by: z.string(), + /** + * Autogenerated date of last object update. + */ updated_at: z.string().datetime(), + /** + * Autogenerated value - user that last updated object. + */ updated_by: z.string(), }); +/** + * Exception's identifier. + */ export type ExceptionListItemId = z.infer; -export const ExceptionListItemId = NonEmptyString; +export const ExceptionListItemId = z.string().min(1).superRefine(isNonEmptyString); +/** + * Human readable string identifier, e.g. `trusted-linux-processes` + */ export type ExceptionListItemHumanId = z.infer; -export const ExceptionListItemHumanId = NonEmptyString; +export const ExceptionListItemHumanId = z.string().min(1).superRefine(isNonEmptyString); export type ExceptionListItemType = z.infer; export const ExceptionListItemType = z.literal('simple'); +/** + * Exception list name. + */ export type ExceptionListItemName = z.infer; -export const ExceptionListItemName = NonEmptyString; +export const ExceptionListItemName = z.string().min(1).superRefine(isNonEmptyString); +/** + * Describes the exception list. + */ export type ExceptionListItemDescription = z.infer; export const ExceptionListItemDescription = z.string(); export type ExceptionListItemMeta = z.infer; export const ExceptionListItemMeta = z.object({}).catchall(z.unknown()); +/** + * The exception item’s expiration date, in ISO format. This field is only available for regular exception items, not endpoint exceptions. + */ +export type ExceptionListItemExpireTime = z.infer; +export const ExceptionListItemExpireTime = z.string().datetime(); + export type ExceptionListItemTags = z.infer; -export const ExceptionListItemTags = z.array(NonEmptyString); +export const ExceptionListItemTags = z.array(z.string().min(1).superRefine(isNonEmptyString)); export type ExceptionListItemOsType = z.infer; export const ExceptionListItemOsType = z.enum(['linux', 'macos', 'windows']); @@ -131,12 +195,24 @@ export type ExceptionListItemComment = z.infer; export const ExceptionListItemComment = z.object({ id: NonEmptyString, comment: NonEmptyString, + /** + * Autogenerated date of object creation. + */ created_at: z.string().datetime(), created_by: NonEmptyString, + /** + * Autogenerated date of last object update. + */ updated_at: z.string().datetime().optional(), updated_by: NonEmptyString.optional(), }); +/** + * Array of comment fields: + +- comment (string): Comments about the exception item. + + */ export type ExceptionListItemCommentArray = z.infer; export const ExceptionListItemCommentArray = z.array(ExceptionListItemComment); @@ -153,13 +229,31 @@ export const ExceptionListItem = z.object({ os_types: ExceptionListItemOsTypeArray.optional(), tags: ExceptionListItemTags.optional(), meta: ExceptionListItemMeta.optional(), - expire_time: z.string().datetime().optional(), + expire_time: ExceptionListItemExpireTime.optional(), comments: ExceptionListItemCommentArray, + /** + * The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. + */ _version: z.string().optional(), + /** + * Field used in search to ensure all containers are sorted and returned correctly. + */ tie_breaker_id: z.string(), + /** + * Autogenerated date of object creation. + */ created_at: z.string().datetime(), + /** + * Autogenerated value - user that created object. + */ created_by: z.string(), + /** + * Autogenerated date of last object update. + */ updated_at: z.string().datetime(), + /** + * Autogenerated value - user that last updated object. + */ updated_by: z.string(), }); @@ -176,11 +270,23 @@ export const ExceptionListSO = z.object({ os_types: ExceptionListItemOsTypeArray.optional(), tags: ExceptionListItemTags.optional(), meta: ExceptionListItemMeta.optional(), - expire_time: z.string().datetime().optional(), + expire_time: ExceptionListItemExpireTime.optional(), comments: ExceptionListItemCommentArray.optional(), version: NonEmptyString.optional(), + /** + * Field used in search to ensure all containers are sorted and returned correctly. + */ tie_breaker_id: z.string(), + /** + * Autogenerated date of object creation. + */ created_at: z.string().datetime(), + /** + * Autogenerated value - user that created object. + */ created_by: z.string(), + /** + * Autogenerated value - user that last updated object. + */ updated_by: z.string(), }); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.schema.yaml index 8d8cdf82b6d94..e1c2a9088e2a9 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/model/exception_list_common.schema.yaml @@ -7,14 +7,22 @@ components: x-codegen-enabled: true schemas: ExceptionListId: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 ExceptionListHumanId: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + type: string + minLength: 1 + format: nonempty + description: Exception list's human readable string identifier, e.g. `trusted-linux-processes`. + example: 'simple_list' ExceptionListType: type: string + description: The type of exception list to be created. Different list types may denote where they can be utilized. enum: - detection - rule_default @@ -26,13 +34,18 @@ components: ExceptionListName: type: string + description: The name of the exception list. + example: 'My exception list' ExceptionListDescription: type: string + description: Describes the exception list. + example: 'This list tracks allowlisted values.' ExceptionListMeta: type: object additionalProperties: true + description: Placeholder for metadata about the list container. ExceptionNamespaceType: type: string @@ -50,6 +63,7 @@ components: type: array items: type: string + description: String array containing words and phrases to help categorize exception containers. ExceptionListOsType: type: string @@ -57,15 +71,18 @@ components: - linux - macos - windows + description: Use this field to specify the operating system. ExceptionListOsTypeArray: type: array items: $ref: '#/components/schemas/ExceptionListOsType' + description: Use this field to specify the operating system. Only enter one value. ExceptionListVersion: type: integer minimum: 1 + description: The document version, automatically increasd on updates. ExceptionList: type: object @@ -94,18 +111,24 @@ components: $ref: '#/components/schemas/ExceptionListVersion' _version: type: string + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. tie_breaker_id: type: string + description: Field used in search to ensure all containers are sorted and returned correctly. created_at: type: string format: date-time + description: Autogenerated date of object creation. created_by: type: string + description: Autogenerated value - user that created object. updated_at: type: string format: date-time + description: Autogenerated date of last object update. updated_by: type: string + description: Autogenerated value - user that last updated object. required: - id - list_id @@ -122,29 +145,49 @@ components: - updated_by ExceptionListItemId: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 ExceptionListItemHumanId: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item ExceptionListItemType: type: string enum: [simple] ExceptionListItemName: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: Exception list name. ExceptionListItemDescription: type: string + description: Describes the exception list. ExceptionListItemMeta: type: object additionalProperties: true + ExceptionListItemExpireTime: + type: string + format: date-time + description: The exception item’s expiration date, in ISO format. This field is only available for regular exception items, not endpoint exceptions. + ExceptionListItemTags: type: array items: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' + type: string + minLength: 1 + format: nonempty + description: String array containing words and phrases to help categorize exception items. ExceptionListItemOsType: type: string @@ -168,11 +211,13 @@ components: created_at: type: string format: date-time + description: Autogenerated date of object creation. created_by: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' updated_at: type: string format: date-time + description: Autogenerated date of last object update. updated_by: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' required: @@ -183,6 +228,10 @@ components: ExceptionListItemCommentArray: type: array + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/ExceptionListItemComment' @@ -212,24 +261,29 @@ components: meta: $ref: '#/components/schemas/ExceptionListItemMeta' expire_time: - type: string - format: date-time + $ref: '#/components/schemas/ExceptionListItemExpireTime' comments: $ref: '#/components/schemas/ExceptionListItemCommentArray' _version: type: string + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. tie_breaker_id: type: string + description: Field used in search to ensure all containers are sorted and returned correctly. created_at: type: string format: date-time + description: Autogenerated date of object creation. created_by: type: string + description: Autogenerated value - user that created object. updated_at: type: string format: date-time + description: Autogenerated date of last object update. updated_by: type: string + description: Autogenerated value - user that last updated object. required: - id - item_id @@ -273,21 +327,24 @@ components: meta: $ref: '#/components/schemas/ExceptionListItemMeta' expire_time: - type: string - format: date-time + $ref: '#/components/schemas/ExceptionListItemExpireTime' comments: $ref: '#/components/schemas/ExceptionListItemCommentArray' version: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/primitives.schema.yaml#/components/schemas/NonEmptyString' tie_breaker_id: type: string + description: Field used in search to ensure all containers are sorted and returned correctly. created_at: type: string format: date-time + description: Autogenerated date of object creation. created_by: type: string + description: Autogenerated value - user that created object. updated_by: type: string + description: Autogenerated value - user that last updated object. required: - list_id - list_type diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/quickstart_client.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/quickstart_client.gen.ts index bfa84f18fa7c2..c40635cf22535 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/quickstart_client.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/quickstart_client.gen.ts @@ -97,7 +97,7 @@ export class Client { this.log = options.log; } /** - * An exception list groups exception items and can be associated with detection rules. You can assign detection rules with multiple exception lists. + * An exception list groups exception items and can be associated with detection rules. You can assign exception lists to multiple detection rules. > info > All exception items added to the same list are evaluated using `OR` logic. That is, if any of the items in a list evaluate to `true`, the exception prevents the rule from generating an alert. Likewise, `OR` logic is used for evaluating exceptions when more than one exception list is assigned to a rule. To use the `AND` operator, you can define multiple clauses (`entries`) in a single exception item. @@ -255,7 +255,7 @@ export class Client { .catch(catchAxiosErrorFormatAndThrow); } /** - * Get a list of all exception lists. + * Get a list of all exception list containers. */ async findExceptionLists(props: FindExceptionListsProps) { this.log.info(`${new Date().toISOString()} Calling API FindExceptionLists`); diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.gen.ts index 87db0f9e75623..f4223e0dce91e 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.gen.ts @@ -26,11 +26,11 @@ import { export type ReadExceptionListRequestQuery = z.infer; export const ReadExceptionListRequestQuery = z.object({ /** - * Either `id` or `list_id` must be specified + * Exception list's identifier. Either `id` or `list_id` must be specified. */ id: ExceptionListId.optional(), /** - * Either `id` or `list_id` must be specified + * Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. */ list_id: ExceptionListHumanId.optional(), namespace_type: ExceptionNamespaceType.optional().default('single'), diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.schema.yaml index 001c56a3eafb4..5d5e414dfad0e 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list/read_exception_list.schema.yaml @@ -14,13 +14,13 @@ paths: - name: id in: query required: false - description: Either `id` or `list_id` must be specified + description: Exception list's identifier. Either `id` or `list_id` must be specified. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListId' - name: list_id in: query required: false - description: Either `id` or `list_id` must be specified + description: Human readable exception list string identifier, e.g. `trusted-linux-processes`. Either `id` or `list_id` must be specified. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListHumanId' - name: namespace_type @@ -29,6 +29,11 @@ paths: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' default: single + examples: + single: + value: single + agnostic: + value: agnostic responses: 200: description: Successful response @@ -36,6 +41,25 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionList' + examples: + detectionType: + value: + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + list_id: simple_list + type: detection + name: Sample Detection Exception List + description: This is a sample detection type exception list. + immutable: false + namespace_type: single + os_types: [linux] + tags: [malware] + version: 1 + _version: WzIsMV0= + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic 400: description: Invalid input data response content: @@ -44,27 +68,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type.0: Invalid enum value. Expected 'agnostic' | 'single', received 'blob'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/exception_lists?list_id=simple_list&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 404: description: Exception list item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.gen.ts index 02f6d10558389..2b8d1e8b40733 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.gen.ts @@ -26,11 +26,11 @@ import { export type ReadExceptionListItemRequestQuery = z.infer; export const ReadExceptionListItemRequestQuery = z.object({ /** - * Either `id` or `item_id` must be specified + * Exception list item's identifier. Either `id` or `item_id` must be specified. */ id: ExceptionListItemId.optional(), /** - * Either `id` or `item_id` must be specified + * Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified. */ item_id: ExceptionListItemHumanId.optional(), namespace_type: ExceptionNamespaceType.optional().default('single'), diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.schema.yaml index 82cac05e97813..3b451d5de9e33 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_item/read_exception_list_item.schema.yaml @@ -14,13 +14,13 @@ paths: - name: id in: query required: false - description: Either `id` or `item_id` must be specified + description: Exception list item's identifier. Either `id` or `item_id` must be specified. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemId' - name: item_id in: query required: false - description: Either `id` or `item_id` must be specified + description: Human readable exception item string identifier, e.g. `trusted-linux-processes`. Either `id` or `item_id` must be specified. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemHumanId' - name: namespace_type @@ -29,6 +29,11 @@ paths: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' default: single + examples: + single: + value: single + agnostic: + value: agnostic responses: 200: description: Successful response @@ -36,6 +41,33 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItem' + examples: + simpleListItem: + value: + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + type: simple + name: Sample Exception List Item + description: This is a sample detection type exception item. + entries: + - type: exists + field: actingProcess.file.signer + operator: excluded + - type: match_any + field: host.name + value: [saturn, jupiter] + operator: included + namespace_type: single + os_types: [linux] + tags: [malware] + comments: [] + _version: WzQsMV0= + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic 400: description: Invalid input data response content: @@ -44,27 +76,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type.0: Invalid enum value. Expected 'agnostic' | 'single', received 'blob'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/exception_lists/items?item_id=&namespace_type=single] is unauthorized for user, this action is granted by the Kibana privileges [lists-read]' 404: description: Exception list item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.gen.ts index 8807f4b7e7812..04106c4ac6cf1 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.gen.ts @@ -27,11 +27,11 @@ export type ReadExceptionListSummaryRequestQuery = z.infer< >; export const ReadExceptionListSummaryRequestQuery = z.object({ /** - * Exception list's identifier generated upon creation + * Exception list's identifier generated upon creation. */ id: ExceptionListId.optional(), /** - * Exception list's human readable identifier + * Exception list's human readable identifier. */ list_id: ExceptionListHumanId.optional(), namespace_type: ExceptionNamespaceType.optional().default('single'), diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.schema.yaml index fe6bb93b9cdb9..8037c18a14026 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.schema.yaml @@ -14,13 +14,13 @@ paths: - name: id in: query required: false - description: Exception list's identifier generated upon creation + description: Exception list's identifier generated upon creation. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListId' - name: list_id in: query required: false - description: Exception list's human readable identifier + description: Exception list's human readable identifier. schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListHumanId' - name: namespace_type @@ -29,12 +29,18 @@ paths: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionNamespaceType' default: single + examples: + single: + value: single + agnostic: + value: agnostic - name: filter in: query required: false description: Search filter clause schema: type: string + example: exception-list-agnostic.attributes.tags:"policy:policy-1" OR exception-list-agnostic.attributes.tags:"policy:all" responses: 200: description: Successful response @@ -55,6 +61,13 @@ paths: total: type: integer minimum: 0 + examples: + summary: + value: + windows: 0 + linux: 0 + macos: 0 + total: 0 400: description: Invalid input data response content: @@ -63,27 +76,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: "[request query]: namespace_type.0: Invalid enum value. Expected 'agnostic' | 'single', received 'blob'" 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [GET /api/exception_lists/summary?list_id=simple_list&namespace_type=agnostic] is unauthorized for user, this action is granted by the Kibana privileges [lists-summary]' 404: description: Exception list not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.gen.ts index fb5fde05dcc85..9063abdc86685 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.gen.ts @@ -42,6 +42,9 @@ export const UpdateExceptionListRequestBody = z.object({ tags: ExceptionListTags.optional(), meta: ExceptionListMeta.optional(), version: ExceptionListVersion.optional(), + /** + * The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. + */ _version: z.string().optional(), }); export type UpdateExceptionListRequestBodyInput = z.input; diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.schema.yaml index 5a07623f4c937..d62845f48f17d 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list/update_exception_list.schema.yaml @@ -42,10 +42,18 @@ paths: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListVersion' _version: type: string + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. required: - name - description - type + example: + list_id: simple_list + tags: [draft malware] + type: detection + os_types: [linux] + description: Different description + name: Updated exception list name responses: 200: description: Successful response @@ -53,6 +61,28 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionList' + examples: + simpleList: + value: + id: fa7f545f-191b-4d32-b1f0-c7cd62a79e55 + list_id: simple_list + type: detection + name: Updated exception list name + description: Different description + immutable: false + namespace_type: single + os_types: [] + tags: [ + draft + malware, + ] + version: 2 + _version: WzExLDFd + tie_breaker_id: 319fe983-acdd-4806-b6c4-3098eae9392f + created_at: 2025-01-07T20:43:55.264Z + created_by: elastic + updated_at: 2025-01-07T21:32:03.726Z + updated_by: elastic 400: description: Invalid input data response content: @@ -61,27 +91,55 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request body]: list_id: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [PUT /api/exception_lists] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: Exception list not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.gen.ts b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.gen.ts index 791af5f65e35f..db68f6f03e5de 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.gen.ts +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.gen.ts @@ -28,6 +28,7 @@ import { ExceptionListItemOsTypeArray, ExceptionListItemTags, ExceptionListItemMeta, + ExceptionListItemExpireTime, ExceptionListItem, } from '../model/exception_list_common.gen'; import { ExceptionListItemEntryArray } from '../model/exception_list_item_entry.gen'; @@ -62,8 +63,11 @@ export const UpdateExceptionListItemRequestBody = z.object({ os_types: ExceptionListItemOsTypeArray.optional().default([]), tags: ExceptionListItemTags.optional(), meta: ExceptionListItemMeta.optional(), - expire_time: z.string().datetime().optional(), + expire_time: ExceptionListItemExpireTime.optional(), comments: UpdateExceptionListItemCommentArray.optional().default([]), + /** + * The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. + */ _version: z.string().optional(), }); export type UpdateExceptionListItemRequestBodyInput = z.input< diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.schema.yaml index d6021768492c5..376754f696249 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.schema.yaml @@ -45,18 +45,31 @@ paths: meta: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemMeta' expire_time: - type: string - format: date-time + $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItemExpireTime' comments: $ref: '#/components/schemas/UpdateExceptionListItemCommentArray' default: [] _version: type: string + description: The version id, normally returned by the API when the item was retrieved. Use it ensure updates are done against the latest version. required: - type - name - description - entries + example: + comments: [] + description: Updated description + entries: + - field: host.name + type: match + value: rock01 + operator: included + item_id: simple_list_item + name: Updated name + namespace_type: single + tags: [] + type: simple responses: 200: description: Successful response @@ -64,6 +77,30 @@ paths: application/json: schema: $ref: '../model/exception_list_common.schema.yaml#/components/schemas/ExceptionListItem' + examples: + simpleListItem: + value: + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + type: simple + name: Updated name + description: Updated description + entries: + - type: match + field: host.name + value: rock01 + operator: included + namespace_type: single + os_types: [] + tags: [] + comments: [] + _version: WzEyLDFd + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + created_at: 2025-01-07T21:12:25.512Z + created_by: elastic + updated_at: 2025-01-07T21:34:50.233Z + updated_by: elastic 400: description: Invalid input data response content: @@ -72,30 +109,58 @@ paths: oneOf: - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' - $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + badRequest: + value: + statusCode: 400 + error: Bad Request + message: '[request body]: item_id: Expected string, received number' 401: description: Unsuccessful authentication response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + unauthorized: + value: + statusCode: 401 + error: Unauthorized + message: '[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]' 403: description: Not enough privileges response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/PlatformErrorResponse' + examples: + forbidden: + value: + statusCode: 403 + error: Forbidden + message: 'API [PUT /api/exception_lists/items] is unauthorized for user, this action is granted by the Kibana privileges [lists-all]' 404: description: Exception list item not found response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 500: description: Internal server error response content: application/json: schema: $ref: '../../../../../../../src/platform/packages/shared/kbn-openapi-common/schemas/error_responses.schema.yaml#/components/schemas/SiemErrorResponse' + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 components: x-codegen-enabled: true diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml index c4f44ca0e85f5..32b7141662a7f 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml @@ -20,6 +20,9 @@ paths: operationId: CreateRuleExceptionListItems parameters: - description: Detection rule's identifier + examples: + id: + value: 330bdd28-eedf-40e1-bed0-f10176c7f9e0 in: path name: id required: true @@ -29,6 +32,28 @@ paths: content: application/json: schema: + example: + items: + - description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: items: @@ -37,12 +62,43 @@ paths: type: array required: - items - description: Rule exception list items + description: Rule exception items. required: true responses: '200': content: application/json: + examples: + ruleExceptionItems: + value: + - _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic schema: items: $ref: '#/components/schemas/ExceptionListItem' @@ -51,6 +107,17 @@ paths: '400': content: application/json: + examples: + badPayload: + value: + error: Bad Request + message: Invalid request payload JSON format + statusCode: 400 + badRequest: + value: + error: Bad Request + message: '[request params]: id: Invalid uuid' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -59,22 +126,43 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Create rule exception list items + summary: Create rule exception items tags: - Security Exceptions API /api/exception_lists: @@ -82,19 +170,34 @@ paths: description: Delete an exception list using the `id` or `list_id` field. operationId: DeleteExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: >- + Exception list's identifier. Either `id` or `list_id` must be + specified. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: >- + Human readable exception list string identifier, e.g. + `trusted-linux-processes`. Either `id` or `list_id` must be + specified. + examples: + autogeneratedId: + value: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + list_id: + value: simple_list in: query name: list_id required: false schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -104,12 +207,41 @@ paths: '200': content: application/json: + examples: + detectionExceptionList: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -118,24 +250,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE + /api/exception_lists?list_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -146,19 +309,29 @@ paths: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: >- + Exception list's identifier. Either `id` or `list_id` must be + specified. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: >- + Human readable exception list string identifier, e.g. + `trusted-linux-processes`. Either `id` or `list_id` must be + specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -168,12 +341,41 @@ paths: '200': content: application/json: + examples: + detectionType: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -182,24 +384,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists?list_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -209,8 +442,8 @@ paths: post: description: > An exception list groups exception items and can be associated with - detection rules. You can assign detection rules with multiple exception - lists. + detection rules. You can assign exception lists to multiple detection + rules. > info @@ -225,6 +458,16 @@ paths: content: application/json: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + type: detection type: object properties: description: @@ -258,12 +501,100 @@ paths: '200': content: application/json: + examples: + autogeneratedListId: + value: + _version: WzMsMV0= + created_at: 2025-01-09T01:05:23.019Z + created_by: elastic + description: >- + This is a sample detection type exception with an + autogenerated list_id. + id: 28243c2f-624a-4443-823d-c0b894880931 + immutable: false + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: ad94de31-39f7-4ad7-b8e4-988bfa95f338 + type: detection + updated_at: 2025-01-09T01:05:23.020Z + updated_by: elastic + version: 1 + namespaceAgnostic: + value: + _version: WzUsMV0= + created_at: 2025-01-09T01:10:36.369Z + created_by: elastic + description: This is a sample agnostic endpoint type exception. + id: 1a744e77-22ca-4b6b-9085-54f55275ebe5 + immutable: false + list_id: b935eb55-7b21-4c1c-b235-faa1df23b3d6 + name: Sample Agnostic Endpoint Exception List + namespace_type: agnostic + os_types: + - linux + tags: + - malware + tie_breaker_id: 49ea0adc-a2b8-4d83-a8f3-2fb98301dea3 + type: endpoint + updated_at: 2025-01-09T01:10:36.369Z + updated_by: elastic + version: 1 + typeDetection: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 + typeEndpoint: + value: + _version: WzQsMV0= + created_at: 2025-01-09T01:07:49.658Z + created_by: elastic + description: This is a sample endpoint type exception list. + id: a79f4730-6e32-4278-abfc-349c0add7d54 + immutable: false + list_id: endpoint_list + name: Sample Endpoint Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 94a028af-8f47-427a-aca5-ffaf829e64ee + type: endpoint + updated_at: 2025-01-09T01:07:49.658Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -272,24 +603,49 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -303,9 +659,22 @@ paths: content: application/json: schema: + example: + description: Different description + list_id: simple_list + name: Updated exception list name + os_types: + - linux + tags: + - draft malware + type: detection type: object properties: _version: + description: >- + The version id, normally returned by the API when the item + was retrieved. Use it ensure updates are done against the + latest version. type: string description: $ref: '#/components/schemas/ExceptionListDescription' @@ -339,12 +708,38 @@ paths: '200': content: application/json: + examples: + simpleList: + value: + _version: WzExLDFd + created_at: 2025-01-07T20:43:55.264Z + created_by: elastic + description: Different description + id: fa7f545f-191b-4d32-b1f0-c7cd62a79e55 + immutable: false + list_id: simple_list + name: Updated exception list name + namespace_type: single + os_types: [] + tags: + - draft malware + tie_breaker_id: 319fe983-acdd-4806-b6c4-3098eae9392f + type: detection + updated_at: 2025-01-07T21:32:03.726Z + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -353,24 +748,54 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PUT /api/exception_lists] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -382,20 +807,24 @@ paths: description: Duplicate an existing exception list. operationId: DuplicateExceptionList parameters: - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/ExceptionNamespaceType' - description: >- - Determines whether to include expired exceptions in the exported - list + Determines whether to include expired exceptions in the duplicated + list. Expiration date defined by `expire_time`. in: query name: include_expired_exceptions required: true @@ -404,17 +833,46 @@ paths: enum: - 'true' - 'false' + example: true type: string responses: '200': content: application/json: + examples: + detectionExceptionList: + value: + _version: WzExNDY1LDFd + created_at: 2025-01-09T16:19:50.280Z + created_by: elastic + description: This is a sample detection type exception + id: b2f4a715-6ab1-444c-8b1e-3fa1b1049429 + immutable: false + list_id: d6390d60-bce3-4a48-9002-52db600f329c + name: Sample Detection Exception List [Duplicate] + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 6fa670bd-666d-4c9c-9f1e-d1dbc516e985 + type: detection + updated_at: 2025-01-09T16:19:50.280Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type: Invalid enum value. + Expected 'agnostic' | 'single', received 'foo' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -423,15 +881,46 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/_duplicate] is unauthorized + for user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response + '404': + content: + application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 + schema: + $ref: '#/components/schemas/PlatformErrorResponse' + description: Exception list not found '405': content: application/json: @@ -441,6 +930,11 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -452,26 +946,30 @@ paths: description: Export an exception list and its associated items to an NDJSON file. operationId: ExportExceptionList parameters: - - description: Exception list's identifier - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/ExceptionListId' - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/ExceptionNamespaceType' - description: >- Determines whether to include expired exceptions in the exported - list + list. Expiration date defined by `expire_time`. + example: true in: query name: include_expired_exceptions required: true @@ -485,6 +983,28 @@ paths: '200': content: application/ndjson: + examples: + exportSavedObjectsResponse: + value: > + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This + is a sample detection type + exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample + Detection Exception + List","namespace_type":"single","os_types":[],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This + is a sample endpoint type + exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some + host","another + host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample + Endpoint Exception + List","namespace_type":"single","os_types":["linux"],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} + + {"exported_exception_list_count":1,"exported_exception_list_item_count":1,"missing_exception_list_item_count":0,"missing_exception_list_items":[],"missing_exception_lists":[],"missing_exception_lists_count":0} schema: description: >- A `.ndjson` file containing specified exception list and its @@ -495,6 +1015,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: list_id: Required, namespace_type: + Required + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -503,24 +1031,54 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/_export] is unauthorized + for user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -529,7 +1087,7 @@ paths: - Security Exceptions API /api/exception_lists/_find: get: - description: Get a list of all exception lists. + description: Get a list of all exception list containers. operationId: FindExceptionLists parameters: - description: > @@ -555,6 +1113,11 @@ paths: with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + agnostic: + value: agnostic + single: + value: single in: query name: namespace_type required: false @@ -569,6 +1132,7 @@ paths: name: page required: false schema: + example: 1 minimum: 1 type: integer - description: The number of exception lists to return per page @@ -576,15 +1140,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 1 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: + example: name type: string - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -592,11 +1158,36 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json: + examples: + simpleLists: + value: + data: + - _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -622,6 +1213,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -630,18 +1229,43 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/exception_lists/_find?namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -664,18 +1288,7 @@ paths: required: false schema: default: false - type: boolean - - in: query - name: overwrite_exceptions - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_action_connectors - required: false - schema: - default: false + example: false type: boolean - description: > Determines whether the list being imported will have a new `list_id` @@ -690,6 +1303,7 @@ paths: required: false schema: default: false + example: false type: boolean requestBody: content: @@ -699,6 +1313,24 @@ paths: properties: file: description: A `.ndjson` file containing the exception list + example: > + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This + is a sample detection type + exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample + Detection Exception + List","namespace_type":"single","os_types":[],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This + is a sample endpoint type + exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some + host","another + host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample + Endpoint Exception + List","namespace_type":"single","os_types":["linux"],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} format: binary type: string required: true @@ -706,6 +1338,40 @@ paths: '200': content: application/json: + examples: + withErrors: + value: + errors: + - error: + message: >- + Error found importing exception list: Invalid value + \"4\" supplied to \"list_id\" + status_code: 400 + list_id: (unknown list_id) + - error: + message: >- + Found that item_id: + \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" already + exists. Import of item_id: + \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" skipped. + status_code: 409 + item_id: f7fd00bb-dba8-4c93-9d59-6cbd427b6330 + list_id: 7d7cccb8-db72-4667-b1f3-648efad7c1ee + success: false, + success_count: 0, + success_count_exception_list_items: 0 + success_count_exception_lists: 0, + success_exception_list_items: false, + success_exception_lists: false, + withoutErrors: + value: + errors: [] + success: true + success_count: 2 + success_count_exception_list_items: 1 + success_count_exception_lists: 1 + success_exception_list_items: true + success_exception_lists: true, schema: type: object properties: @@ -746,18 +1412,43 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/_import] is unauthorized + for user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -769,19 +1460,29 @@ paths: description: Delete an exception list item using the `id` or `item_id` field. operationId: DeleteExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: >- + Exception item's identifier. Either `id` or `item_id` must be + specified in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: >- + Human readable exception item string identifier, e.g. + `trusted-linux-processes`. Either `id` or `item_id` must be + specified in: query name: item_id required: false schema: $ref: '#/components/schemas/ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -791,6 +1492,37 @@ paths: '200': content: application/json: + examples: + simpleExceptionItem: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response @@ -798,6 +1530,12 @@ paths: content: application/json: schema: + example: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' - $ref: '#/components/schemas/SiemErrorResponse' @@ -805,24 +1543,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE + /api/exception_lists/items?item_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -835,19 +1604,29 @@ paths: field. operationId: ReadExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: >- + Exception list item's identifier. Either `id` or `item_id` must be + specified. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: >- + Human readable exception item string identifier, e.g. + `trusted-linux-processes`. Either `id` or `item_id` must be + specified. in: query name: item_id required: false schema: $ref: '#/components/schemas/ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -857,12 +1636,51 @@ paths: '200': content: application/json: + examples: + simpleListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -871,24 +1689,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists/items?item_id=&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -908,6 +1757,27 @@ paths: content: application/json: schema: + example: + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: comments: @@ -918,8 +1788,7 @@ paths: entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' item_id: $ref: '#/components/schemas/ExceptionListItemHumanId' list_id: @@ -951,12 +1820,204 @@ paths: '200': content: application/json: + examples: + autogeneratedItemId: + value: + _version: WzYsMV0= + comments: [] + created_at: 2025-01-09T01:16:23.322Z + created_by: elastic + description: >- + This is a sample exception that has no item_id so it is + autogenerated. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 323faa75-c657-4fa0-9084-8827612c207b + item_id: 80e6edf7-4b13-4414-858f-2fa74aa52b37 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Autogenerated Exception List Item ID + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: d6799986-3a23-4213-bc6d-ed9463a32f23 + type: simple + updated_at: 2025-01-09T01:16:23.322Z + updated_by: elastic + detectionExceptionListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withExistEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withMatchAnyEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withMatchEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: included + type: match + value: Elastic N.V. + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withNestedEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - entries: + - field: signer + operator: included + type: match + value: Evil + - field: trusted + operator: included + type: match + value: true + field: file.signature + type: nested + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withValueListEntry: + value: + _version: WzcsMV0= + comments: [] + created_at: 2025-01-09T01:31:12.614Z + created_by: elastic + description: >- + Don't signal when agent.name is rock01 and source.ip is in + the goodguys.txt list + entries: + - field: source.ip + list: + id: goodguys.txt + type: ip + operator: excluded + type: list + id: deb26876-297d-4677-8a1f-35467d2f1c4f + item_id: 686b129e-9b8d-4c59-8d8d-c93a9ea82c71 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Filter out good guys ip and agent.name rock01 + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 5e0288ce-6657-4c18-9dcc-00ec9e8cc6c8 + type: simple + updated_at: 2025-01-09T01:31:12.614Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request, + message: '[request body]: list_id: Expected string, received number' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -965,24 +2026,56 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/items] is unauthorized for + user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: >- + exception list item id: \"simple_list_item\" already + exists + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -995,10 +2088,27 @@ paths: requestBody: content: application/json: + example: + comments: [] + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + item_id: simple_list_item + name: Updated name + namespace_type: single + tags: [] + type: simple schema: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item + was retrieved. Use it ensure updates are done against the + latest version. type: string comments: $ref: '#/components/schemas/UpdateExceptionListItemCommentArray' @@ -1008,8 +2118,7 @@ paths: entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' id: $ref: '#/components/schemas/ExceptionListItemId' description: Either `id` or `item_id` must be specified @@ -1043,12 +2152,42 @@ paths: '200': content: application/json: + examples: + simpleListItem: + value: + _version: WzEyLDFd + comments: [] + created_at: 2025-01-07T21:12:25.512Z + created_by: elastic + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Updated name + namespace_type: single + os_types: [] + tags: [] + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: 2025-01-07T21:34:50.233Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: item_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1057,24 +2196,54 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PUT /api/exception_lists/items] is unauthorized for + user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1086,7 +2255,7 @@ paths: description: Get a list of all exception list items in the specified list. operationId: FindExceptionListItems parameters: - - description: List's id + - description: The `list_id`s of the items to fetch. in: query name: list_id required: true @@ -1099,6 +2268,10 @@ paths: field, using the `:` syntax. + examples: + singleFilter: + value: + - exception-list.attributes.name:%My%20item in: query name: filter required: false @@ -1112,6 +2285,10 @@ paths: with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + single: + value: + - single in: query name: namespace_type required: false @@ -1125,12 +2302,14 @@ paths: name: search required: false schema: + example: host.name type: string - description: The page number to return in: query name: page required: false schema: + example: 1 minimum: 0 type: integer - description: The number of exception list items to return per page @@ -1138,15 +2317,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 0 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. + example: name in: query name: sort_field required: false schema: $ref: '#/components/schemas/NonEmptyString' - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -1154,11 +2335,47 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json: + examples: + simpleListItems: + value: + data: + - _version: WzgsMV0= + comments: [] + created_at: 2025-01-07T21:12:25.512Z + created_by: elastic + description: This is a sample exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - jupiter + - saturn + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: 2025-01-07T21:12:25.512Z + updated_by: elastic + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -1186,6 +2403,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1194,24 +2419,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists/items/_find?list_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1223,19 +2479,24 @@ paths: description: Get a summary of the specified exception list. operationId: ReadExceptionListSummary parameters: - - description: Exception list's identifier generated upon creation + - description: Exception list's identifier generated upon creation. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListId' - - description: Exception list's human readable identifier + - description: Exception list's human readable identifier. in: query name: list_id required: false schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -1246,11 +2507,21 @@ paths: name: filter required: false schema: + example: >- + exception-list-agnostic.attributes.tags:"policy:policy-1" OR + exception-list-agnostic.attributes.tags:"policy:all" type: string responses: '200': content: application/json: + examples: + summary: + value: + linux: 0 + macos: 0 + total: 0 + windows: 0 schema: type: object properties: @@ -1270,6 +2541,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1278,24 +2557,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists/summary?list_id=simple_list&namespace_type=agnostic] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-summary] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1322,6 +2632,15 @@ paths: content: application/json: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware type: object properties: description: @@ -1336,12 +2655,39 @@ paths: '200': content: application/json: + examples: + sharedList: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1350,24 +2696,45 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1437,11 +2804,17 @@ components: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListDescription' @@ -1462,13 +2835,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/ExceptionListVersion' @@ -1487,31 +2865,47 @@ components: - updated_at - updated_by ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string ExceptionListHumanId: - $ref: '#/components/schemas/NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: >- + Exception list's human readable string identifier, e.g. + `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string ExceptionListId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string ExceptionListItem: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string comments: $ref: '#/components/schemas/ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListItemDescription' entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' id: $ref: '#/components/schemas/ExceptionListItemId' item_id: @@ -1529,13 +2923,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListItemTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -1558,6 +2957,7 @@ components: comment: $ref: '#/components/schemas/NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -1565,6 +2965,7 @@ components: id: $ref: '#/components/schemas/NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -1575,10 +2976,15 @@ components: - created_at - created_by ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/ExceptionListItemComment' type: array ExceptionListItemDescription: + description: Describes the exception list. type: string ExceptionListItemEntry: anyOf: @@ -1720,22 +3126,44 @@ components: - excluded - included type: string + ExceptionListItemExpireTime: + description: >- + The exception item’s expiration date, in ISO format. This field is only + available for regular exception items, not endpoint exceptions. + format: date-time + type: string ExceptionListItemHumanId: - $ref: '#/components/schemas/NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string ExceptionListItemId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string ExceptionListItemMeta: additionalProperties: true type: object ExceptionListItemName: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/ExceptionListOsType' type: array ExceptionListItemTags: items: - $ref: '#/components/schemas/NonEmptyString' + description: >- + String array containing words and phrases to help categorize exception + items. + format: nonempty + minLength: 1 + type: string type: array ExceptionListItemType: enum: @@ -1743,16 +3171,21 @@ components: type: string ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object ExceptionListName: + description: The name of the exception list. + example: My exception list type: string ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/ExceptionListOsType' type: array @@ -1782,10 +3215,16 @@ components: $ref: '#/components/schemas/ExceptionListsImportBulkError' type: array ExceptionListTags: + description: >- + String array containing words and phrases to help categorize exception + containers. items: type: string type: array ExceptionListType: + description: >- + The type of exception list to be created. Different list types may + denote where they can be utilized. enum: - detection - rule_default @@ -1796,6 +3235,7 @@ components: - endpoint_blocklists type: string ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer ExceptionNamespaceType: @@ -1816,6 +3256,7 @@ components: FindExceptionListItemsFilter: $ref: '#/components/schemas/NonEmptyString' FindExceptionListsFilter: + example: exception-list.attributes.name:%Detection%20List type: string ListId: $ref: '#/components/schemas/NonEmptyString' diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml index c686d57b725f9..ab0c887488760 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/security_solution_exceptions_api_2023_10_31.bundled.schema.yaml @@ -20,6 +20,9 @@ paths: operationId: CreateRuleExceptionListItems parameters: - description: Detection rule's identifier + examples: + id: + value: 330bdd28-eedf-40e1-bed0-f10176c7f9e0 in: path name: id required: true @@ -29,6 +32,28 @@ paths: content: application/json: schema: + example: + items: + - description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: items: @@ -37,12 +62,43 @@ paths: type: array required: - items - description: Rule exception list items + description: Rule exception items. required: true responses: '200': content: application/json: + examples: + ruleExceptionItems: + value: + - _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic schema: items: $ref: '#/components/schemas/ExceptionListItem' @@ -51,6 +107,17 @@ paths: '400': content: application/json: + examples: + badPayload: + value: + error: Bad Request + message: Invalid request payload JSON format + statusCode: 400 + badRequest: + value: + error: Bad Request + message: '[request params]: id: Invalid uuid' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -59,22 +126,43 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response - summary: Create rule exception list items + summary: Create rule exception items tags: - Security Exceptions API /api/exception_lists: @@ -82,19 +170,34 @@ paths: description: Delete an exception list using the `id` or `list_id` field. operationId: DeleteExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: >- + Exception list's identifier. Either `id` or `list_id` must be + specified. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: >- + Human readable exception list string identifier, e.g. + `trusted-linux-processes`. Either `id` or `list_id` must be + specified. + examples: + autogeneratedId: + value: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + list_id: + value: simple_list in: query name: list_id required: false schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -104,12 +207,41 @@ paths: '200': content: application/json: + examples: + detectionExceptionList: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -118,24 +250,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE + /api/exception_lists?list_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -146,19 +309,29 @@ paths: description: Get the details of an exception list using the `id` or `list_id` field. operationId: ReadExceptionList parameters: - - description: Either `id` or `list_id` must be specified + - description: >- + Exception list's identifier. Either `id` or `list_id` must be + specified. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListId' - - description: Either `id` or `list_id` must be specified + - description: >- + Human readable exception list string identifier, e.g. + `trusted-linux-processes`. Either `id` or `list_id` must be + specified. in: query name: list_id required: false schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -168,12 +341,41 @@ paths: '200': content: application/json: + examples: + detectionType: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -182,24 +384,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists?list_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -209,8 +442,8 @@ paths: post: description: > An exception list groups exception items and can be associated with - detection rules. You can assign detection rules with multiple exception - lists. + detection rules. You can assign exception lists to multiple detection + rules. > info @@ -225,6 +458,16 @@ paths: content: application/json: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + type: detection type: object properties: description: @@ -258,12 +501,100 @@ paths: '200': content: application/json: + examples: + autogeneratedListId: + value: + _version: WzMsMV0= + created_at: 2025-01-09T01:05:23.019Z + created_by: elastic + description: >- + This is a sample detection type exception with an + autogenerated list_id. + id: 28243c2f-624a-4443-823d-c0b894880931 + immutable: false + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: ad94de31-39f7-4ad7-b8e4-988bfa95f338 + type: detection + updated_at: 2025-01-09T01:05:23.020Z + updated_by: elastic + version: 1 + namespaceAgnostic: + value: + _version: WzUsMV0= + created_at: 2025-01-09T01:10:36.369Z + created_by: elastic + description: This is a sample agnostic endpoint type exception. + id: 1a744e77-22ca-4b6b-9085-54f55275ebe5 + immutable: false + list_id: b935eb55-7b21-4c1c-b235-faa1df23b3d6 + name: Sample Agnostic Endpoint Exception List + namespace_type: agnostic + os_types: + - linux + tags: + - malware + tie_breaker_id: 49ea0adc-a2b8-4d83-a8f3-2fb98301dea3 + type: endpoint + updated_at: 2025-01-09T01:10:36.369Z + updated_by: elastic + version: 1 + typeDetection: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 + typeEndpoint: + value: + _version: WzQsMV0= + created_at: 2025-01-09T01:07:49.658Z + created_by: elastic + description: This is a sample endpoint type exception list. + id: a79f4730-6e32-4278-abfc-349c0add7d54 + immutable: false + list_id: endpoint_list + name: Sample Endpoint Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 94a028af-8f47-427a-aca5-ffaf829e64ee + type: endpoint + updated_at: 2025-01-09T01:07:49.658Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -272,24 +603,49 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -303,9 +659,22 @@ paths: content: application/json: schema: + example: + description: Different description + list_id: simple_list + name: Updated exception list name + os_types: + - linux + tags: + - draft malware + type: detection type: object properties: _version: + description: >- + The version id, normally returned by the API when the item + was retrieved. Use it ensure updates are done against the + latest version. type: string description: $ref: '#/components/schemas/ExceptionListDescription' @@ -339,12 +708,38 @@ paths: '200': content: application/json: + examples: + simpleList: + value: + _version: WzExLDFd + created_at: 2025-01-07T20:43:55.264Z + created_by: elastic + description: Different description + id: fa7f545f-191b-4d32-b1f0-c7cd62a79e55 + immutable: false + list_id: simple_list + name: Updated exception list name + namespace_type: single + os_types: [] + tags: + - draft malware + tie_breaker_id: 319fe983-acdd-4806-b6c4-3098eae9392f + type: detection + updated_at: 2025-01-07T21:32:03.726Z + updated_by: elastic + version: 2 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -353,24 +748,54 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PUT /api/exception_lists] is unauthorized for user, + this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -382,20 +807,24 @@ paths: description: Duplicate an existing exception list. operationId: DuplicateExceptionList parameters: - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/ExceptionNamespaceType' - description: >- - Determines whether to include expired exceptions in the exported - list + Determines whether to include expired exceptions in the duplicated + list. Expiration date defined by `expire_time`. in: query name: include_expired_exceptions required: true @@ -404,17 +833,46 @@ paths: enum: - 'true' - 'false' + example: true type: string responses: '200': content: application/json: + examples: + detectionExceptionList: + value: + _version: WzExNDY1LDFd + created_at: 2025-01-09T16:19:50.280Z + created_by: elastic + description: This is a sample detection type exception + id: b2f4a715-6ab1-444c-8b1e-3fa1b1049429 + immutable: false + list_id: d6390d60-bce3-4a48-9002-52db600f329c + name: Sample Detection Exception List [Duplicate] + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 6fa670bd-666d-4c9c-9f1e-d1dbc516e985 + type: detection + updated_at: 2025-01-09T16:19:50.280Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type: Invalid enum value. + Expected 'agnostic' | 'single', received 'foo' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -423,15 +881,46 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/_duplicate] is unauthorized + for user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response + '404': + content: + application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 + schema: + $ref: '#/components/schemas/PlatformErrorResponse' + description: Exception list not found '405': content: application/json: @@ -441,6 +930,11 @@ paths: '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -452,26 +946,30 @@ paths: description: Export an exception list and its associated items to an NDJSON file. operationId: ExportExceptionList parameters: - - description: Exception list's identifier - in: query + - in: query name: id required: true schema: $ref: '#/components/schemas/ExceptionListId' - - description: Exception list's human identifier - in: query + - in: query name: list_id required: true schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: true schema: $ref: '#/components/schemas/ExceptionNamespaceType' - description: >- Determines whether to include expired exceptions in the exported - list + list. Expiration date defined by `expire_time`. + example: true in: query name: include_expired_exceptions required: true @@ -485,6 +983,28 @@ paths: '200': content: application/ndjson: + examples: + exportSavedObjectsResponse: + value: > + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This + is a sample detection type + exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample + Detection Exception + List","namespace_type":"single","os_types":[],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This + is a sample endpoint type + exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some + host","another + host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample + Endpoint Exception + List","namespace_type":"single","os_types":["linux"],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} + + {"exported_exception_list_count":1,"exported_exception_list_item_count":1,"missing_exception_list_item_count":0,"missing_exception_list_items":[],"missing_exception_lists":[],"missing_exception_lists_count":0} schema: description: >- A `.ndjson` file containing specified exception list and its @@ -495,6 +1015,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: list_id: Required, namespace_type: + Required + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -503,24 +1031,54 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/_export] is unauthorized + for user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -529,7 +1087,7 @@ paths: - Security Exceptions API /api/exception_lists/_find: get: - description: Get a list of all exception lists. + description: Get a list of all exception list containers. operationId: FindExceptionLists parameters: - description: > @@ -555,6 +1113,11 @@ paths: with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + agnostic: + value: agnostic + single: + value: single in: query name: namespace_type required: false @@ -569,6 +1132,7 @@ paths: name: page required: false schema: + example: 1 minimum: 1 type: integer - description: The number of exception lists to return per page @@ -576,15 +1140,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 1 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. in: query name: sort_field required: false schema: + example: name type: string - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -592,11 +1158,36 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json: + examples: + simpleLists: + value: + data: + - _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Detection Exception List + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -622,6 +1213,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -630,18 +1229,43 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET /api/exception_lists/_find?namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -664,18 +1288,7 @@ paths: required: false schema: default: false - type: boolean - - in: query - name: overwrite_exceptions - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_action_connectors - required: false - schema: - default: false + example: false type: boolean - description: > Determines whether the list being imported will have a new `list_id` @@ -690,6 +1303,7 @@ paths: required: false schema: default: false + example: false type: boolean requestBody: content: @@ -699,6 +1313,24 @@ paths: properties: file: description: A `.ndjson` file containing the exception list + example: > + {"_version":"WzExNDU5LDFd","created_at":"2025-01-09T16:18:17.757Z","created_by":"elastic","description":"This + is a sample detection type + exception","id":"c86c2da0-2ab6-4343-b81c-216ef27e8d75","immutable":false,"list_id":"simple_list","name":"Sample + Detection Exception + List","namespace_type":"single","os_types":[],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"cf4a7b92-732d-47f0-a0d5-49a35a1736bf","type":"detection","updated_at":"2025-01-09T16:18:17.757Z","updated_by":"elastic","version":1} + + {"_version":"WzExNDYxLDFd","comments":[],"created_at":"2025-01-09T16:18:42.308Z","created_by":"elastic","description":"This + is a sample endpoint type + exception","entries":[{"type":"exists","field":"actingProcess.file.signer","operator":"excluded"},{"type":"match_any","field":"host.name","value":["some + host","another + host"],"operator":"included"}],"id":"f37597ce-eaa7-4b64-9100-4301118f6806","item_id":"simple_list_item","list_id":"simple_list","name":"Sample + Endpoint Exception + List","namespace_type":"single","os_types":["linux"],"tags":["user + added string for a + tag","malware"],"tie_breaker_id":"4ca3ef3e-9721-42c0-8107-cf47e094d40f","type":"simple","updated_at":"2025-01-09T16:18:42.308Z","updated_by":"elastic"} format: binary type: string required: true @@ -706,6 +1338,40 @@ paths: '200': content: application/json: + examples: + withErrors: + value: + errors: + - error: + message: >- + Error found importing exception list: Invalid value + \"4\" supplied to \"list_id\" + status_code: 400 + list_id: (unknown list_id) + - error: + message: >- + Found that item_id: + \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" already + exists. Import of item_id: + \"f7fd00bb-dba8-4c93-9d59-6cbd427b6330\" skipped. + status_code: 409 + item_id: f7fd00bb-dba8-4c93-9d59-6cbd427b6330 + list_id: 7d7cccb8-db72-4667-b1f3-648efad7c1ee + success: false, + success_count: 0, + success_count_exception_list_items: 0 + success_count_exception_lists: 0, + success_exception_list_items: false, + success_exception_lists: false, + withoutErrors: + value: + errors: [] + success: true + success_count: 2 + success_count_exception_list_items: 1 + success_count_exception_lists: 1 + success_exception_list_items: true + success_exception_lists: true, schema: type: object properties: @@ -746,18 +1412,43 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/_import] is unauthorized + for user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -769,19 +1460,29 @@ paths: description: Delete an exception list item using the `id` or `item_id` field. operationId: DeleteExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: >- + Exception item's identifier. Either `id` or `item_id` must be + specified in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: >- + Human readable exception item string identifier, e.g. + `trusted-linux-processes`. Either `id` or `item_id` must be + specified in: query name: item_id required: false schema: $ref: '#/components/schemas/ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -791,6 +1492,37 @@ paths: '200': content: application/json: + examples: + simpleExceptionItem: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response @@ -798,6 +1530,12 @@ paths: content: application/json: schema: + example: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' - $ref: '#/components/schemas/SiemErrorResponse' @@ -805,24 +1543,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [DELETE + /api/exception_lists/items?item_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -835,19 +1604,29 @@ paths: field. operationId: ReadExceptionListItem parameters: - - description: Either `id` or `item_id` must be specified + - description: >- + Exception list item's identifier. Either `id` or `item_id` must be + specified. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListItemId' - - description: Either `id` or `item_id` must be specified + - description: >- + Human readable exception item string identifier, e.g. + `trusted-linux-processes`. Either `id` or `item_id` must be + specified. in: query name: item_id required: false schema: $ref: '#/components/schemas/ExceptionListItemHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -857,12 +1636,51 @@ paths: '200': content: application/json: + examples: + simpleListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -871,24 +1689,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists/items?item_id=&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -908,6 +1757,27 @@ paths: content: application/json: schema: + example: + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + type: simple type: object properties: comments: @@ -918,8 +1788,7 @@ paths: entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' item_id: $ref: '#/components/schemas/ExceptionListItemHumanId' list_id: @@ -951,12 +1820,204 @@ paths: '200': content: application/json: + examples: + autogeneratedItemId: + value: + _version: WzYsMV0= + comments: [] + created_at: 2025-01-09T01:16:23.322Z + created_by: elastic + description: >- + This is a sample exception that has no item_id so it is + autogenerated. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 323faa75-c657-4fa0-9084-8827612c207b + item_id: 80e6edf7-4b13-4414-858f-2fa74aa52b37 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Sample Autogenerated Exception List Item ID + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: d6799986-3a23-4213-bc6d-ed9463a32f23 + type: simple + updated_at: 2025-01-09T01:16:23.322Z + updated_by: elastic + detectionExceptionListItem: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withExistEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withMatchAnyEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: host.name + operator: included + type: match_any + value: + - saturn + - jupiter + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withMatchEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - field: actingProcess.file.signer + operator: included + type: match + value: Elastic N.V. + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withNestedEntry: + value: + _version: WzQsMV0= + comments: [] + created_at: 2025-01-07T20:07:33.119Z + created_by: elastic + description: This is a sample detection type exception item. + entries: + - entries: + - field: signer + operator: included + type: match + value: Evil + - field: trusted + operator: included + type: match + value: true + field: file.signature + type: nested + id: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 09434836-9db9-4942-a234-5a9268e0b34c + type: simple + updated_at: 2025-01-07T20:07:33.119Z + updated_by: elastic + withValueListEntry: + value: + _version: WzcsMV0= + comments: [] + created_at: 2025-01-09T01:31:12.614Z + created_by: elastic + description: >- + Don't signal when agent.name is rock01 and source.ip is in + the goodguys.txt list + entries: + - field: source.ip + list: + id: goodguys.txt + type: ip + operator: excluded + type: list + id: deb26876-297d-4677-8a1f-35467d2f1c4f + item_id: 686b129e-9b8d-4c59-8d8d-c93a9ea82c71 + list_id: 8c1aae4c-1ef5-4bce-a2e3-16584b501783 + name: Filter out good guys ip and agent.name rock01 + namespace_type: single + os_types: [] + tags: + - malware + tie_breaker_id: 5e0288ce-6657-4c18-9dcc-00ec9e8cc6c8 + type: simple + updated_at: 2025-01-09T01:31:12.614Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request, + message: '[request body]: list_id: Expected string, received number' + statusCode: 400, schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -965,24 +2026,56 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [POST /api/exception_lists/items] is unauthorized for + user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: >- + exception list item id: \"simple_list_item\" already + exists + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -995,10 +2088,27 @@ paths: requestBody: content: application/json: + example: + comments: [] + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + item_id: simple_list_item + name: Updated name + namespace_type: single + tags: [] + type: simple schema: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item + was retrieved. Use it ensure updates are done against the + latest version. type: string comments: $ref: '#/components/schemas/UpdateExceptionListItemCommentArray' @@ -1008,8 +2118,7 @@ paths: entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' id: $ref: '#/components/schemas/ExceptionListItemId' description: Either `id` or `item_id` must be specified @@ -1043,12 +2152,42 @@ paths: '200': content: application/json: + examples: + simpleListItem: + value: + _version: WzEyLDFd + comments: [] + created_at: 2025-01-07T21:12:25.512Z + created_by: elastic + description: Updated description + entries: + - field: host.name + operator: included + type: match + value: rock01 + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Updated name + namespace_type: single + os_types: [] + tags: [] + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: 2025-01-07T21:34:50.233Z + updated_by: elastic schema: $ref: '#/components/schemas/ExceptionListItem' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: item_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1057,24 +2196,54 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [PUT /api/exception_lists/items] is unauthorized for + user, this action is granted by the Kibana privileges + [lists-all] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list item item_id: \"foo\" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list item not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1086,7 +2255,7 @@ paths: description: Get a list of all exception list items in the specified list. operationId: FindExceptionListItems parameters: - - description: List's id + - description: The `list_id`s of the items to fetch. in: query name: list_id required: true @@ -1099,6 +2268,10 @@ paths: field, using the `:` syntax. + examples: + singleFilter: + value: + - exception-list.attributes.name:%My%20item in: query name: filter required: false @@ -1112,6 +2285,10 @@ paths: with a Kibana space or available in all spaces (`agnostic` or `single`) + examples: + single: + value: + - single in: query name: namespace_type required: false @@ -1125,12 +2302,14 @@ paths: name: search required: false schema: + example: host.name type: string - description: The page number to return in: query name: page required: false schema: + example: 1 minimum: 0 type: integer - description: The number of exception list items to return per page @@ -1138,15 +2317,17 @@ paths: name: per_page required: false schema: + example: 20 minimum: 0 type: integer - - description: Determines which field is used to sort the results + - description: Determines which field is used to sort the results. + example: name in: query name: sort_field required: false schema: $ref: '#/components/schemas/NonEmptyString' - - description: Determines the sort order, which can be `desc` or `asc` + - description: Determines the sort order, which can be `desc` or `asc`. in: query name: sort_order required: false @@ -1154,11 +2335,47 @@ paths: enum: - desc - asc + example: desc type: string responses: '200': content: application/json: + examples: + simpleListItems: + value: + data: + - _version: WzgsMV0= + comments: [] + created_at: 2025-01-07T21:12:25.512Z + created_by: elastic + description: This is a sample exception item. + entries: + - field: actingProcess.file.signer + operator: excluded + type: exists + - field: host.name + operator: included + type: match_any + value: + - jupiter + - saturn + id: 459c5e7e-f8b2-4f0b-b136-c1fc702f72da + item_id: simple_list_item + list_id: simple_list + name: Sample Exception List Item + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: ad0754ff-7b19-49ca-b73e-e6aff6bfa2d0 + type: simple + updated_at: 2025-01-07T21:12:25.512Z + updated_by: elastic + page: 1 + per_page: 20 + total: 1 schema: type: object properties: @@ -1186,6 +2403,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1194,24 +2419,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists/items/_find?list_id=simple_list&namespace_type=single] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-read] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message: 'exception list list_id: "foo" does not exist' + status_code: 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1223,19 +2479,24 @@ paths: description: Get a summary of the specified exception list. operationId: ReadExceptionListSummary parameters: - - description: Exception list's identifier generated upon creation + - description: Exception list's identifier generated upon creation. in: query name: id required: false schema: $ref: '#/components/schemas/ExceptionListId' - - description: Exception list's human readable identifier + - description: Exception list's human readable identifier. in: query name: list_id required: false schema: $ref: '#/components/schemas/ExceptionListHumanId' - - in: query + - examples: + agnostic: + value: agnostic + single: + value: single + in: query name: namespace_type required: false schema: @@ -1246,11 +2507,21 @@ paths: name: filter required: false schema: + example: >- + exception-list-agnostic.attributes.tags:"policy:policy-1" OR + exception-list-agnostic.attributes.tags:"policy:all" type: string responses: '200': content: application/json: + examples: + summary: + value: + linux: 0 + macos: 0 + total: 0 + windows: 0 schema: type: object properties: @@ -1270,6 +2541,14 @@ paths: '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: >- + [request query]: namespace_type.0: Invalid enum value. + Expected 'agnostic' | 'single', received 'blob' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1278,24 +2557,55 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: >- + [security_exception\n\tRoot + causes:\n\t\tsecurity_exception: unable to authenticate + user [elastic] for REST request + [/_security/_authenticate]]: unable to authenticate user + [elastic] for REST request [/_security/_authenticate] + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + error: Forbidden + message: >- + API [GET + /api/exception_lists/summary?list_id=simple_list&namespace_type=agnostic] + is unauthorized for user, this action is granted by the + Kibana privileges [lists-summary] + statusCode: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '404': content: application/json: + examples: + notFound: + value: + message": 'exception list id: "foo" does not exist' + status_code": 404 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list not found response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1322,6 +2632,15 @@ paths: content: application/json: schema: + example: + description: This is a sample detection type exception list. + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware type: object properties: description: @@ -1336,12 +2655,39 @@ paths: '200': content: application/json: + examples: + sharedList: + value: + _version: WzIsMV0= + created_at: 2025-01-07T19:34:27.942Z + created_by: elastic + description: This is a sample detection type exception list. + id: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + immutable: false + list_id: simple_list + name: Sample Detection Exception List + namespace_type: single + os_types: + - linux + tags: + - malware + tie_breaker_id: 78f1aca1-f8ee-4eb5-9ceb-f5c3ee656cb3 + type: detection + updated_at: 2025-01-07T19:34:27.942Z + updated_by: elastic + version: 1 schema: $ref: '#/components/schemas/ExceptionList' description: Successful response '400': content: application/json: + examples: + badRequest: + value: + error: Bad Request + message: '[request body]: list_id: Expected string, received number' + statusCode: 400 schema: oneOf: - $ref: '#/components/schemas/PlatformErrorResponse' @@ -1350,24 +2696,45 @@ paths: '401': content: application/json: + examples: + unauthorized: + value: + error: Unauthorized + message: "[security_exception\n\tRoot causes:\n\t\tsecurity_exception: unable to authenticate user [elastic] for REST request [/_security/_authenticate]]: unable to authenticate user [elastic] for REST request [/_security/_authenticate]" + statusCode: 401 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Unsuccessful authentication response '403': content: application/json: + examples: + forbidden: + value: + message: Unable to create exception-list + status_code: 403 schema: $ref: '#/components/schemas/PlatformErrorResponse' description: Not enough privileges response '409': content: application/json: + examples: + alreadyExists: + value: + message: 'exception list id: "simple_list" already exists' + status_code: 409 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Exception list already exists response '500': content: application/json: + examples: + serverError: + value: + message: Internal Server Error + status_code: 500 schema: $ref: '#/components/schemas/SiemErrorResponse' description: Internal server error response @@ -1437,11 +2804,17 @@ components: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListDescription' @@ -1462,13 +2835,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string version: $ref: '#/components/schemas/ExceptionListVersion' @@ -1487,31 +2865,47 @@ components: - updated_at - updated_by ExceptionListDescription: + description: Describes the exception list. + example: This list tracks allowlisted values. type: string ExceptionListHumanId: - $ref: '#/components/schemas/NonEmptyString' - description: Human readable string identifier, e.g. `trusted-linux-processes` + description: >- + Exception list's human readable string identifier, e.g. + `trusted-linux-processes`. + example: simple_list + format: nonempty + minLength: 1 + type: string ExceptionListId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list's identifier. + example: 9e5fc75a-a3da-46c5-96e3-a2ec59c6bb85 + format: nonempty + minLength: 1 + type: string ExceptionListItem: type: object properties: _version: + description: >- + The version id, normally returned by the API when the item was + retrieved. Use it ensure updates are done against the latest + version. type: string comments: $ref: '#/components/schemas/ExceptionListItemCommentArray' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: + description: Autogenerated value - user that created object. type: string description: $ref: '#/components/schemas/ExceptionListItemDescription' entries: $ref: '#/components/schemas/ExceptionListItemEntryArray' expire_time: - format: date-time - type: string + $ref: '#/components/schemas/ExceptionListItemExpireTime' id: $ref: '#/components/schemas/ExceptionListItemId' item_id: @@ -1529,13 +2923,18 @@ components: tags: $ref: '#/components/schemas/ExceptionListItemTags' tie_breaker_id: + description: >- + Field used in search to ensure all containers are sorted and + returned correctly. type: string type: $ref: '#/components/schemas/ExceptionListItemType' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: + description: Autogenerated value - user that last updated object. type: string required: - id @@ -1558,6 +2957,7 @@ components: comment: $ref: '#/components/schemas/NonEmptyString' created_at: + description: Autogenerated date of object creation. format: date-time type: string created_by: @@ -1565,6 +2965,7 @@ components: id: $ref: '#/components/schemas/NonEmptyString' updated_at: + description: Autogenerated date of last object update. format: date-time type: string updated_by: @@ -1575,10 +2976,15 @@ components: - created_at - created_by ExceptionListItemCommentArray: + description: | + Array of comment fields: + + - comment (string): Comments about the exception item. items: $ref: '#/components/schemas/ExceptionListItemComment' type: array ExceptionListItemDescription: + description: Describes the exception list. type: string ExceptionListItemEntry: anyOf: @@ -1720,22 +3126,44 @@ components: - excluded - included type: string + ExceptionListItemExpireTime: + description: >- + The exception item’s expiration date, in ISO format. This field is only + available for regular exception items, not endpoint exceptions. + format: date-time + type: string ExceptionListItemHumanId: - $ref: '#/components/schemas/NonEmptyString' + description: Human readable string identifier, e.g. `trusted-linux-processes` + example: simple_list_item + format: nonempty + minLength: 1 + type: string ExceptionListItemId: - $ref: '#/components/schemas/NonEmptyString' + description: Exception's identifier. + example: 71a9f4b2-c85c-49b4-866f-c71eb9e67da2 + format: nonempty + minLength: 1 + type: string ExceptionListItemMeta: additionalProperties: true type: object ExceptionListItemName: - $ref: '#/components/schemas/NonEmptyString' + description: Exception list name. + format: nonempty + minLength: 1 + type: string ExceptionListItemOsTypeArray: items: $ref: '#/components/schemas/ExceptionListOsType' type: array ExceptionListItemTags: items: - $ref: '#/components/schemas/NonEmptyString' + description: >- + String array containing words and phrases to help categorize exception + items. + format: nonempty + minLength: 1 + type: string type: array ExceptionListItemType: enum: @@ -1743,16 +3171,21 @@ components: type: string ExceptionListMeta: additionalProperties: true + description: Placeholder for metadata about the list container. type: object ExceptionListName: + description: The name of the exception list. + example: My exception list type: string ExceptionListOsType: + description: Use this field to specify the operating system. enum: - linux - macos - windows type: string ExceptionListOsTypeArray: + description: Use this field to specify the operating system. Only enter one value. items: $ref: '#/components/schemas/ExceptionListOsType' type: array @@ -1782,10 +3215,16 @@ components: $ref: '#/components/schemas/ExceptionListsImportBulkError' type: array ExceptionListTags: + description: >- + String array containing words and phrases to help categorize exception + containers. items: type: string type: array ExceptionListType: + description: >- + The type of exception list to be created. Different list types may + denote where they can be utilized. enum: - detection - rule_default @@ -1796,6 +3235,7 @@ components: - endpoint_blocklists type: string ExceptionListVersion: + description: The document version, automatically increasd on updates. minimum: 1 type: integer ExceptionNamespaceType: @@ -1816,6 +3256,7 @@ components: FindExceptionListItemsFilter: $ref: '#/components/schemas/NonEmptyString' FindExceptionListsFilter: + example: exception-list.attributes.name:%Detection%20List type: string ListId: $ref: '#/components/schemas/NonEmptyString' diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/common/constants.ts index 6c1761dd1a314..2039506c8cdde 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/common/constants.ts @@ -171,6 +171,7 @@ export const DEFAULT_GROUPING_TABLE_HEIGHT = 512; export const FINDINGS_GROUPING_OPTIONS = { NONE: 'none', + RESOURCE_ID: 'resource.id', RESOURCE_NAME: 'resource.name', RULE_NAME: 'rule.name', RULE_SECTION: 'rule.section', diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx index 8d6f7292928e9..40ce67f297057 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx @@ -669,6 +669,7 @@ export const CspPolicyTemplateForm = memo { const integrationParam = useParams<{ integration: CloudSecurityPolicyTemplate }>().integration; const integration = SUPPORTED_POLICY_TEMPLATES.includes(integrationParam) @@ -687,6 +688,7 @@ export const CspPolicyTemplateForm = memo { }); expect(result.current.setupTechnology).toBe(SetupTechnology.AGENTLESS); - expect(handleSetupTechnologyChangeMock).toHaveBeenCalledWith( - SetupTechnology.AGENTLESS, - inputPackage.policy_template - ); + expect(handleSetupTechnologyChangeMock).toHaveBeenCalledWith(SetupTechnology.AGENTLESS); }); }); diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts index 3f68fb87f2639..48b7fec879794 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts @@ -14,11 +14,13 @@ export const useSetupTechnology = ({ input, isAgentlessEnabled, handleSetupTechnologyChange, + defaultSetupTechnology, isEditPage, }: { input: NewPackagePolicyInput; isAgentlessEnabled?: boolean; - handleSetupTechnologyChange?: (value: SetupTechnology, policyTemplateName?: string) => void; + handleSetupTechnologyChange?: (value: SetupTechnology) => void; + defaultSetupTechnology?: SetupTechnology; isEditPage?: boolean; }) => { const isCspmAws = input.type === CLOUDBEAT_AWS; @@ -26,15 +28,17 @@ export const useSetupTechnology = ({ const isCspmAzure = input.type === CLOUDBEAT_AZURE; const isAgentlessSupportedForCloudProvider = isCspmAws || isCspmGcp || isCspmAzure; const isAgentlessAvailable = isAgentlessSupportedForCloudProvider && isAgentlessEnabled; - const defaultSetupTechnology = + const defaultEditSetupTechnology = isEditPage && isAgentlessAvailable ? SetupTechnology.AGENTLESS : SetupTechnology.AGENT_BASED; - const [setupTechnology, setSetupTechnology] = useState(defaultSetupTechnology); + const [setupTechnology, setSetupTechnology] = useState( + defaultSetupTechnology || defaultEditSetupTechnology + ); const updateSetupTechnology = (value: SetupTechnology) => { setSetupTechnology(value); if (handleSetupTechnologyChange) { - handleSetupTechnologyChange(value, input.policy_template); + handleSetupTechnologyChange(value); } }; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx index e5ea0a9139a7e..d396c7c11c86d 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx @@ -131,7 +131,7 @@ export const SummarySection = ({ data-test-subj="dashboard-view-all-resources" onClick={() => { navToFindings(getPolicyTemplateQuery(dashboardType), [ - FINDINGS_GROUPING_OPTIONS.RESOURCE_NAME, + FINDINGS_GROUPING_OPTIONS.RESOURCE_ID, ]); }} > diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts index d9f20e3e712eb..4ccf6caf68ea6 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts @@ -25,7 +25,7 @@ export const MISCONFIGURATIONS_GROUPS_UNIT = ( const groupCount = hasNullGroup ? totalCount - 1 : totalCount; switch (selectedGroup) { - case FINDINGS_GROUPING_OPTIONS.RESOURCE_NAME: + case FINDINGS_GROUPING_OPTIONS.RESOURCE_ID: return i18n.translate('xpack.csp.findings.groupUnit.resource', { values: { groupCount }, defaultMessage: `{groupCount} {groupCount, plural, =1 {resource} other {resources}}`, @@ -79,9 +79,9 @@ export const NULL_GROUPING_MESSAGES = { export const defaultGroupingOptions: GroupOption[] = [ { label: i18n.translate('xpack.csp.findings.latestFindings.groupByResource', { - defaultMessage: 'Resource', + defaultMessage: 'Resource ID', }), - key: FINDINGS_GROUPING_OPTIONS.RESOURCE_NAME, + key: FINDINGS_GROUPING_OPTIONS.RESOURCE_ID, }, { label: i18n.translate('xpack.csp.findings.latestFindings.groupByRuleName', { diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_group_renderer.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_group_renderer.tsx index b41c5e4996db1..743b0bc95cb43 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_group_renderer.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_group_renderer.tsx @@ -31,10 +31,10 @@ import { NULL_GROUPING_MESSAGES, NULL_GROUPING_UNIT } from './constants'; import { FINDINGS_GROUPING_COUNTER } from '../test_subjects'; export const groupPanelRenderer: GroupPanelRenderer = ( - selectedGroup, - bucket, - nullGroupMessage, - isLoading + selectedGroup: string, + bucket: RawBucket, + nullGroupMessage: string | undefined, + isLoading: boolean | undefined ) => { if (isLoading) { return ; @@ -45,8 +45,22 @@ export const groupPanelRenderer: GroupPanelRenderer ); + const getGroupPanelTitle = () => { + const resourceId = bucket.resourceName?.buckets?.[0]?.key; + + if (resourceId) { + return ( + <> + {resourceId} - {bucket.key_as_string} + + ); + } + + return {bucket.key_as_string}; + }; + switch (selectedGroup) { - case FINDINGS_GROUPING_OPTIONS.RESOURCE_NAME: + case FINDINGS_GROUPING_OPTIONS.RESOURCE_ID: return nullGroupMessage ? ( renderNullGroup(NULL_GROUPING_MESSAGES.RESOURCE_NAME) ) : ( @@ -66,7 +80,7 @@ export const groupPanelRenderer: GroupPanelRenderer `} title={bucket.resourceName?.buckets?.[0]?.key as string} > - {bucket.key_as_string} {bucket.resourceName?.buckets?.[0]?.key} + {getGroupPanelTitle()} diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx index 45c5418ed5129..87e0969a5966c 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx @@ -86,10 +86,10 @@ const getAggregationsByGroupField = (field: string): NamedAggregation[] => { ]; switch (field) { - case FINDINGS_GROUPING_OPTIONS.RESOURCE_NAME: + case FINDINGS_GROUPING_OPTIONS.RESOURCE_ID: return [ ...aggMetrics, - getTermAggregation('resourceName', 'resource.id'), + getTermAggregation('resourceName', 'resource.name'), getTermAggregation('resourceSubType', 'resource.sub_type'), ]; case FINDINGS_GROUPING_OPTIONS.RULE_NAME: diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts index e8b2a6fcbd507..138116398b818 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts @@ -15,6 +15,7 @@ import { } from '../../__mocks__/conversations_schema.mock'; import { authenticatedUser } from '../../__mocks__/user'; import { updateConversationRoute } from './update_route'; +import expect from 'expect'; describe('Update conversation route', () => { let server: ReturnType; @@ -22,6 +23,7 @@ describe('Update conversation route', () => { const mockUser1 = authenticatedUser; beforeEach(() => { + jest.clearAllMocks(); server = serverMock.create(); ({ clients, context } = requestContextMock.createTools()); @@ -145,5 +147,27 @@ describe('Update conversation route', () => { `messages.0.role: Invalid enum value. Expected 'system' | 'user' | 'assistant', received 'invalid'` ); }); + + // validate id is correct, check happens on L71 in update_route.ts + test('validates id is correct', async () => { + const request = requestMock.create({ + method: 'put', + path: ELASTIC_AI_ASSISTANT_CONVERSATIONS_URL_BY_ID, + body: { + ...getUpdateConversationSchemaMock(), + id: 'invalid-id', + }, + params: { id: 'real-id' }, + }); + await server.inject(request, requestContextMock.convertContext(context)); + + expect( + clients.elasticAssistant.getAIAssistantConversationsDataClient.updateConversation + ).toHaveBeenCalledWith( + expect.objectContaining({ + conversationUpdateProps: expect.objectContaining({ id: 'real-id' }), + }) + ); + }); }); }); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts index f7068e0f37429..674511611b041 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/user_conversations/update_route.ts @@ -68,7 +68,7 @@ export const updateConversationRoute = (router: ElasticAssistantPluginRouter) => }); } const conversation = await dataClient?.updateConversation({ - conversationUpdateProps: request.body, + conversationUpdateProps: { ...request.body, id }, }); if (conversation == null) { return assistantResponse.error({ diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml index 1bd73eea6cef4..97485bb2c6605 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml @@ -61,6 +61,17 @@ components: required: - criticality_level AssetCriticalityRecord: + example: + id_field: 'host.name' + id_value: my_host + criticality_level: high_impact + '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + host: + name: my_host + asset: + criticality: high_impact allOf: - $ref: '#/components/schemas/CreateAssetCriticalityRecord' - $ref: '#/components/schemas/AssetCriticalityRecordEcsParts' diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml index 15e75c3caa080..f59d685a22228 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml @@ -19,6 +19,10 @@ paths: content: application/json: schema: + example: + id_field: 'host.name' + id_value: 'my_host' + criticality_level: 'high_impact' allOf: - $ref: './common.schema.yaml#/components/schemas/CreateAssetCriticalityRecord' - type: object diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml index f393e7fbc6e01..fb375e8c5908e 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml @@ -17,6 +17,7 @@ paths: required: true schema: type: string + example: my_host description: The ID value of the asset. - name: id_field in: query diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml index a11ea07c6a270..2dfba1b4397e5 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml @@ -17,6 +17,7 @@ paths: required: true schema: type: string + example: 'my_host' description: The ID value of the asset. - name: id_field in: query diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml index f8b0a2caa2257..35d5018be9f97 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml @@ -55,11 +55,36 @@ paths: description: The kuery to filter by. responses: '200': - description: Bulk upload successful + description: Successfully retrieved asset criticality records content: application/json: schema: type: object + example: + records: + - id_field: 'host.name' + id_value: 'my_other_host' + criticality_level: 'medium_impact' + '@timestamp': '2024-08-02T14:40:35.705Z' + asset: + criticality: medium_impact + host: + name: my_other_host + asset: + criticality: medium_impact + - id_field: 'host.name' + id_value: 'my_host' + criticality_level: 'high_impact' + '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + host: + name: my_host + asset: + criticality: high_impact + total: 2 + page: 1 + per_page: 10 properties: records: type: array diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts index 52147f549edc5..a57be4b8f0680 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -386,11 +386,6 @@ import type { InstallMigrationRulesRequestParamsInput, InstallMigrationRulesRequestBodyInput, InstallMigrationRulesResponse, - InstallTranslatedMigrationRulesRequestParamsInput, - InstallTranslatedMigrationRulesResponse, - RetryRuleMigrationRequestParamsInput, - RetryRuleMigrationRequestBodyInput, - RetryRuleMigrationResponse, StartRuleMigrationRequestParamsInput, StartRuleMigrationRequestBodyInput, StartRuleMigrationResponse, @@ -1739,24 +1734,6 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } - /** - * Installs all translated migration rules - */ - async installTranslatedMigrationRules(props: InstallTranslatedMigrationRulesProps) { - this.log.info(`${new Date().toISOString()} Calling API InstallTranslatedMigrationRules`); - return this.kbnClient - .request({ - path: replaceParams( - '/internal/siem_migrations/rules/{migration_id}/install_translated', - props.params - ), - headers: { - [ELASTIC_HTTP_VERSION_HEADER]: '1', - }, - method: 'POST', - }) - .catch(catchAxiosErrorFormatAndThrow); - } async internalUploadAssetCriticalityRecords(props: InternalUploadAssetCriticalityRecordsProps) { this.log.info(`${new Date().toISOString()} Calling API InternalUploadAssetCriticalityRecords`); return this.kbnClient @@ -2033,22 +2010,6 @@ detection engine rules. }) .catch(catchAxiosErrorFormatAndThrow); } - /** - * Retries a SIEM rules migration using the migration id provided - */ - async retryRuleMigration(props: RetryRuleMigrationProps) { - this.log.info(`${new Date().toISOString()} Calling API RetryRuleMigration`); - return this.kbnClient - .request({ - path: replaceParams('/internal/siem_migrations/rules/{migration_id}/retry', props.params), - headers: { - [ELASTIC_HTTP_VERSION_HEADER]: '1', - }, - method: 'PUT', - body: props.body, - }) - .catch(catchAxiosErrorFormatAndThrow); - } async riskEngineGetPrivileges() { this.log.info(`${new Date().toISOString()} Calling API RiskEngineGetPrivileges`); return this.kbnClient @@ -2560,9 +2521,6 @@ export interface InstallMigrationRulesProps { export interface InstallPrepackedTimelinesProps { body: InstallPrepackedTimelinesRequestBodyInput; } -export interface InstallTranslatedMigrationRulesProps { - params: InstallTranslatedMigrationRulesRequestParamsInput; -} export interface InternalUploadAssetCriticalityRecordsProps { attachment: FormData; } @@ -2600,10 +2558,6 @@ export interface ReadRuleProps { export interface ResolveTimelineProps { query: ResolveTimelineRequestQueryInput; } -export interface RetryRuleMigrationProps { - params: RetryRuleMigrationRequestParamsInput; - body: RetryRuleMigrationRequestBodyInput; -} export interface RulePreviewProps { query: RulePreviewRequestQueryInput; body: RulePreviewRequestBodyInput; diff --git a/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/workflow_insights.ts b/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/workflow_insights.ts index 3212193c981cb..0fc2ec83139dd 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/workflow_insights.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/workflow_insights.ts @@ -61,6 +61,7 @@ export interface SecurityWorkflowInsight { metadata: { notes?: Record; message_variables?: string[]; + display_name?: string; }; } diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts index f4298a97a2c27..16cd4365d56bc 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/constants.ts @@ -17,14 +17,11 @@ export const SIEM_RULE_MIGRATION_CREATE_PATH = `${SIEM_RULE_MIGRATIONS_PATH}/{migration_id?}` as const; export const SIEM_RULE_MIGRATION_PATH = `${SIEM_RULE_MIGRATIONS_PATH}/{migration_id}` as const; export const SIEM_RULE_MIGRATION_START_PATH = `${SIEM_RULE_MIGRATION_PATH}/start` as const; -export const SIEM_RULE_MIGRATION_RETRY_PATH = `${SIEM_RULE_MIGRATION_PATH}/retry` as const; export const SIEM_RULE_MIGRATION_STATS_PATH = `${SIEM_RULE_MIGRATION_PATH}/stats` as const; export const SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH = `${SIEM_RULE_MIGRATION_PATH}/translation_stats` as const; export const SIEM_RULE_MIGRATION_STOP_PATH = `${SIEM_RULE_MIGRATION_PATH}/stop` as const; export const SIEM_RULE_MIGRATION_INSTALL_PATH = `${SIEM_RULE_MIGRATION_PATH}/install` as const; -export const SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH = - `${SIEM_RULE_MIGRATION_PATH}/install_translated` as const; export const SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH = `${SIEM_RULE_MIGRATION_PATH}/prebuilt_rules` as const; @@ -61,22 +58,7 @@ export const DEFAULT_TRANSLATION_RISK_SCORE = 21; export const DEFAULT_TRANSLATION_SEVERITY: Severity = 'low'; export const DEFAULT_TRANSLATION_FIELDS = { - risk_score: DEFAULT_TRANSLATION_RISK_SCORE, - severity: DEFAULT_TRANSLATION_SEVERITY, from: 'now-360s', to: 'now', interval: '5m', } as const; - -export enum AuthorFilter { - ELASTIC = 'elastic', - CUSTOM = 'custom', -} - -export enum StatusFilter { - INSTALLED = 'installed', - TRANSLATED = 'translated', - PARTIALLY_TRANSLATED = 'partially_translated', - UNTRANSLATABLE = 'untranslatable', - FAILED = 'failed', -} diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts index 1f4be5a9e2e2a..a03453b318aec 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts @@ -193,7 +193,7 @@ export type InstallMigrationRulesRequestParamsInput = z.input< export type InstallMigrationRulesRequestBody = z.infer; export const InstallMigrationRulesRequestBody = z.object({ - ids: z.array(NonEmptyString), + ids: z.array(NonEmptyString).optional(), /** * Indicates whether installed rules should be enabled */ @@ -206,51 +206,9 @@ export type InstallMigrationRulesRequestBodyInput = z.input< export type InstallMigrationRulesResponse = z.infer; export const InstallMigrationRulesResponse = z.object({ /** - * Indicates rules migrations have been installed. + * Indicates the number of successfully installed migration rules. */ - installed: z.boolean(), -}); - -export type InstallTranslatedMigrationRulesRequestParams = z.infer< - typeof InstallTranslatedMigrationRulesRequestParams ->; -export const InstallTranslatedMigrationRulesRequestParams = z.object({ - migration_id: NonEmptyString, -}); -export type InstallTranslatedMigrationRulesRequestParamsInput = z.input< - typeof InstallTranslatedMigrationRulesRequestParams ->; - -export type InstallTranslatedMigrationRulesResponse = z.infer< - typeof InstallTranslatedMigrationRulesResponse ->; -export const InstallTranslatedMigrationRulesResponse = z.object({ - /** - * Indicates rules migrations have been installed. - */ - installed: z.boolean(), -}); - -export type RetryRuleMigrationRequestParams = z.infer; -export const RetryRuleMigrationRequestParams = z.object({ - migration_id: NonEmptyString, -}); -export type RetryRuleMigrationRequestParamsInput = z.input; - -export type RetryRuleMigrationRequestBody = z.infer; -export const RetryRuleMigrationRequestBody = z.object({ - connector_id: ConnectorId, - langsmith_options: LangSmithOptions.optional(), - filter: RuleMigrationRetryFilter.optional(), -}); -export type RetryRuleMigrationRequestBodyInput = z.input; - -export type RetryRuleMigrationResponse = z.infer; -export const RetryRuleMigrationResponse = z.object({ - /** - * Indicates the migration retry has been started. `false` means the migration does not need to be retried. - */ - started: z.boolean(), + installed: z.number(), }); export type StartRuleMigrationRequestParams = z.infer; @@ -263,6 +221,10 @@ export type StartRuleMigrationRequestBody = z.infer; diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml index f4360cf291580..e3d9933ce6e93 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml @@ -237,8 +237,6 @@ paths: application/json: schema: type: object - required: - - ids properties: ids: type: array @@ -259,37 +257,8 @@ paths: - installed properties: installed: - type: boolean - description: Indicates rules migrations have been installed. - - /internal/siem_migrations/rules/{migration_id}/install_translated: - post: - summary: Installs all translated migration rules - operationId: InstallTranslatedMigrationRules - x-codegen-enabled: true - description: Installs all translated migration rules - tags: - - SIEM Rule Migrations - parameters: - - name: migration_id - in: path - required: true - schema: - description: The migration id to install translated rules for - $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' - responses: - 200: - description: Indicates rules migrations have been installed correctly. - content: - application/json: - schema: - type: object - required: - - installed - properties: - installed: - type: boolean - description: Indicates rules migrations have been installed. + type: number + description: Indicates the number of successfully installed migration rules. /internal/siem_migrations/rules/{migration_id}/start: put: @@ -320,6 +289,9 @@ paths: $ref: '../../common.schema.yaml#/components/schemas/ConnectorId' langsmith_options: $ref: '../../common.schema.yaml#/components/schemas/LangSmithOptions' + retry: + $ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigrationRetryFilter' + description: The optional indicator to retry the rule translation based on this filter criteria responses: 200: description: Indicates the migration start request has been processed successfully. @@ -336,53 +308,6 @@ paths: 204: description: Indicates the migration id was not found. - /internal/siem_migrations/rules/{migration_id}/retry: - put: - summary: Retries a rule migration - operationId: RetryRuleMigration - x-codegen-enabled: true - x-internal: true - description: Retries a SIEM rules migration using the migration id provided - tags: - - SIEM Rule Migrations - parameters: - - name: migration_id - in: path - required: true - schema: - description: The migration id to retry - $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - connector_id - properties: - connector_id: - $ref: '../../common.schema.yaml#/components/schemas/ConnectorId' - langsmith_options: - $ref: '../../common.schema.yaml#/components/schemas/LangSmithOptions' - filter: - $ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigrationRetryFilter' - responses: - 200: - description: Indicates the migration retry request has been processed successfully. - content: - application/json: - schema: - type: object - required: - - started - properties: - started: - type: boolean - description: Indicates the migration retry has been started. `false` means the migration does not need to be retried. - 204: - description: Indicates the migration id was not found. - /internal/siem_migrations/rules/{migration_id}/stats: get: summary: Gets a rule migration task stats diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.gen.ts index f55b87f7af703..c6d0959cc10cf 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.gen.ts @@ -15,13 +15,6 @@ */ import { z } from '@kbn/zod'; -import { isNonEmptyString } from '@kbn/zod-helpers'; - -/** - * A string that does not contain only whitespace characters - */ -export type NonEmptyString = z.infer; -export const NonEmptyString = z.string().min(1).superRefine(isNonEmptyString); /** * The GenAI connector id to use. diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.schema.yaml index 9e15bd857c728..08a2562edffdb 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/common.schema.yaml @@ -6,14 +6,10 @@ paths: {} components: x-codegen-enabled: true schemas: - NonEmptyString: - type: string - format: nonempty - minLength: 1 - description: A string that does not contain only whitespace characters ConnectorId: type: string description: The GenAI connector id to use. + LangSmithOptions: type: object description: The LangSmith options object. diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts index 131d78394cda5..a81e264073ef9 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts @@ -90,6 +90,10 @@ export const ElasticRule = z.object({ * The migrated rule severity. */ severity: z.string().optional(), + /** + * The migrated rule risk_score value, integer between 0 and 100. + */ + risk_score: z.number().optional(), /** * The translated elastic query. */ @@ -103,9 +107,9 @@ export const ElasticRule = z.object({ */ prebuilt_rule_id: NonEmptyString.optional(), /** - * The Elastic integration ID found to be most relevant to the splunk rule. + * The IDs of the Elastic integrations suggested to be installed for this rule. */ - integration_id: z.string().optional(), + integration_ids: z.array(z.string()).optional(), /** * The Elastic rule id installed as a result. */ diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml index 4443141db85b3..657d74eaee35b 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml @@ -72,6 +72,9 @@ components: severity: type: string description: The migrated rule severity. + risk_score: + type: number + description: The migrated rule risk_score value, integer between 0 and 100. query: type: string description: The translated elastic query. @@ -83,9 +86,11 @@ components: prebuilt_rule_id: description: The Elastic prebuilt rule id matched. $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' - integration_id: - type: string - description: The Elastic integration ID found to be most relevant to the splunk rule. + integration_ids: + type: array + description: The IDs of the Elastic integrations suggested to be installed for this rule. + items: + type: string id: description: The Elastic rule id installed as a result. $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/rules/utils.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/rules/utils.ts index 8763e057052b5..b82fada3c725a 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/rules/utils.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/rules/utils.ts @@ -6,14 +6,24 @@ */ import type { Severity } from '../../api/detection_engine'; -import { DEFAULT_TRANSLATION_FIELDS, DEFAULT_TRANSLATION_SEVERITY } from '../constants'; +import { DEFAULT_TRANSLATION_FIELDS } from '../constants'; import type { ElasticRule, ElasticRulePartial } from '../model/rule_migration.gen'; export type MigrationPrebuiltRule = ElasticRulePartial & - Required>; + Required< + Pick< + ElasticRulePartial, + 'title' | 'description' | 'prebuilt_rule_id' | 'severity' | 'risk_score' + > + >; export type MigrationCustomRule = ElasticRulePartial & - Required>; + Required< + Pick< + ElasticRulePartial, + 'title' | 'description' | 'query' | 'query_language' | 'severity' | 'risk_score' + > + >; export const isMigrationPrebuiltRule = (rule?: ElasticRule): rule is MigrationPrebuiltRule => !!(rule?.title && rule?.description && rule?.prebuilt_rule_id); @@ -33,8 +43,8 @@ export const convertMigrationCustomRuleToSecurityRulePayload = ( name: rule.title, description: rule.description, enabled, - + severity: rule.severity as Severity, + risk_score: rule.risk_score, ...DEFAULT_TRANSLATION_FIELDS, - severity: (rule.severity as Severity) ?? DEFAULT_TRANSLATION_SEVERITY, }; }; diff --git a/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/types.ts b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/types.ts new file mode 100644 index 0000000000000..7b275975695c7 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/siem_migrations/types.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 { SiemMigrationStatus } from './constants'; + +export interface RuleMigrationFilters { + status?: SiemMigrationStatus | SiemMigrationStatus[]; + ids?: string[]; + installed?: boolean; + installable?: boolean; + prebuilt?: boolean; + failed?: boolean; + fullyTranslated?: boolean; + partiallyTranslated?: boolean; + untranslatable?: boolean; + searchTerm?: string; +} diff --git a/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index 1ac1e87a5db4e..96c9f89c449df 100644 --- a/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -17,6 +17,7 @@ paths: operationId: DeleteAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -65,6 +66,7 @@ paths: operationId: GetAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -115,6 +117,10 @@ paths: enum: - wait_for type: string + example: + criticality_level: high_impact + id_field: host.name + id_value: my_host required: true responses: '200': @@ -242,6 +248,31 @@ paths: content: application/json: schema: + example: + page: 1 + per_page: 10 + records: + - '@timestamp': '2024-08-02T14:40:35.705Z' + asset: + criticality: medium_impact + criticality_level: medium_impact + host: + asset: + criticality: medium_impact + name: my_other_host + id_field: host.name + id_value: my_other_host + - '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host + total: 2 type: object properties: page: @@ -263,7 +294,7 @@ paths: - page - per_page - total - description: Bulk upload successful + description: Successfully retrieved asset criticality records summary: List asset criticality records tags: - Security Entity Analytics API @@ -776,6 +807,17 @@ components: type: string required: - '@timestamp' + example: + '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host AssetCriticalityRecordEcsParts: type: object properties: diff --git a/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index 1ddfe64cbb272..e0c4889d64802 100644 --- a/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -17,6 +17,7 @@ paths: operationId: DeleteAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -65,6 +66,7 @@ paths: operationId: GetAssetCriticalityRecord parameters: - description: The ID value of the asset. + example: my_host in: query name: id_value required: true @@ -115,6 +117,10 @@ paths: enum: - wait_for type: string + example: + criticality_level: high_impact + id_field: host.name + id_value: my_host required: true responses: '200': @@ -242,6 +248,31 @@ paths: content: application/json: schema: + example: + page: 1 + per_page: 10 + records: + - '@timestamp': '2024-08-02T14:40:35.705Z' + asset: + criticality: medium_impact + criticality_level: medium_impact + host: + asset: + criticality: medium_impact + name: my_other_host + id_field: host.name + id_value: my_other_host + - '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host + total: 2 type: object properties: page: @@ -263,7 +294,7 @@ paths: - page - per_page - total - description: Bulk upload successful + description: Successfully retrieved asset criticality records summary: List asset criticality records tags: - Security Entity Analytics API @@ -776,6 +807,17 @@ components: type: string required: - '@timestamp' + example: + '@timestamp': '2024-08-02T11:15:34.290Z' + asset: + criticality: high_impact + criticality_level: high_impact + host: + asset: + criticality: high_impact + name: my_host + id_field: host.name + id_value: my_host AssetCriticalityRecordEcsParts: type: object properties: diff --git a/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/rule_customization.md b/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/rule_customization.md new file mode 100644 index 0000000000000..4579a457f0eb4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/rule_customization.md @@ -0,0 +1,289 @@ +# Prebuilt Rule Customization Workflows + +This is a test plan for rule customization workflows specifically related to prebuilt rules + +Status: `in progress`. + +## Useful information + +### Tickets + +- [Test plan issue](/~https://github.com/elastic/kibana/issues/202068) +- [Prebuilt rule customization](/~https://github.com/elastic/kibana/issues/174168) epic + +### Terminology + +- **Base version**: Prebuilt rule asset we ship in the rule package corresponding to the currently installed prebuilt rules. It represents "original" version of the rule. During prebuilt rules installation prebuilt rule assets data is copied over and becomes an installed prebuilt rule. + +- **Customized prebuilt rule**: An installed prebuilt rule that has been changed by the user in the way rule fields semantically differ from the base version. Also referred to as "Modified" in the UI. + +- **Non-customized prebuilt rule**: An installed prebuilt rule that has rule fields values matching the base version. + +- **Custom rule**: A rule created by the user themselves + +- **rule source, or ruleSource**: A field on the rule that defines the rule's categorization. Can be `internal` or `external`. + +- **`is_customized`**: A field within `ruleSource` that exists when rule source is set to `external`. It is a boolean value based on if the rule has been changed from its base version + +- **customizable rule field**: A rule field that is able to be customized on a prebuilt rule. A comprehenseive list can be found in `./shared_assets/customizable_rule_fields.md`. + +- **non-customizable rule field**: A rule field that is unable to be customized on a prebuilt rule. A comprehenseive list can be found in `./shared_assets/non_customizable_rule_fields.md`. + +- **non-semantic change**: A change to a rule field that is functionally different. We normalize certain fields so for a time-related field such as `from`, `1m` vs `60s` are treated as the same value. We also trim leading and trailing whitespace for query fields. + +### Assumptions + +- Rule package used will have all previous rule versions present (no missing base versions) + +## Scenarios + +### Editing prebuilt rules + +#### **Scenario: User can edit a non-customized prebuilt rule from the rule edit page** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule installed +And the rule is non-customized +When user changes any rule field value (so it differs from the base version) in rule edit form +Then the rule is successfully updated +And the "Modified" badge should appear on the rule's detail page +``` + +#### **Scenario: User can edit a customized prebuilt rule from the rule edit page** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule installed +And it is customized +When user changes any rule field value (so it differs from the base version) in rule edit form +Then the rule is successfully updated +And the "Modified" badge should appear on the rule's detail page +``` + +#### **Scenario: User can navigate to rule editing page from the rule details page** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule installed +And the user has navigated to its rule details page +When a user clicks overflow button on this rule +Then the "edit rule settings" button should be enabled +And should bring the user to the rule edit page when clicked on +``` + +#### **Scenario: User can navigate to rule editing page from the rule management page** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule installed +And the user has navigated to the rule management page +When a user clicks overflow button on this rule +Then the "edit rule settings" button should be enabled +And should bring the user to the rule edit page when clicked on +``` + +#### **Scenario: User can bulk edit prebuilt rules from rules management page** + +**Automation**: 7 cypress tests. + +```Gherkin +Given a space with N (where N > 1) prebuilt rules installed +And a user selects M (where M <= N) in the rules table +When a user applies a bulk action +And the action is successfully applied to M selected rules +Then rules that have been changed from their base version should have a "Modified" badge on the respective row in the rule management table + +Examples: +| bulk_action_type | +| Add index patterns | +| Delete index patterns | +| Add tags | +| Delete tags | +| Add custom highlighted fields | +| Delete custom highlighted fields | +| Modify rule schedules | +``` + +### Detecting rule customizations + +#### **Scenario: is_customized is set to true when user edits a customizable rule field** + +**Automation**: one integration test per field. + +```Gherkin +Given a space with at least one non-customized prebuilt rule installed +When a user changes the field so it differs from the base version +Then the rule's `is_customized` value should be true +And ruleSource should be "external" + +Examples: + = all customizable rule fields +``` + +#### **Scenario: is_customized calculation is not affected by specific fields** + +**Automation**: 5 integration tests. + +```Gherkin +Given a space with at least one prebuilt rule installed +And it is non-customized +When a user changes the field so it differs from the base version +Then the rule's `is_customized` value should remain false + +Examples: +| field_name | +| actions | +| exceptions_list | +| enabled | +| revision | +| meta | +``` + +#### **Scenario: User cannot change non-customizable rule fields on prebuilt rules** + +**Automation**: 4 integration tests. + +```Gherkin +Given a space with at least one prebuilt rule installed +And it is non-customized +When a user changes the field so it differs from the base version +Then API should throw a 500 error +And the rule should remain unchanged + +Examples: + = all non-customizable rule fields +``` + +#### **Scenario: User can revert a customized prebuilt rule to its original state** + +**Automation**: 1 integration test. + +```Gherkin +Given a space with at least one prebuilt rule +And it is customized +When a user changes the rule fields to match the base version +Then the rule's `is_customized` value should be false +``` + +### Calculating the Modified badge in the UI + +#### **Scenario: Modified badge should appear on the rule details page when prebuilt rule is customized** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule +And it is customized +When a user navigates to that rule's detail page +Then the rule's `is_customized` value should be true +And the Modified badge should be present on the page +``` + +#### **Scenario: Modified badge should not appear on the rule details page when prebuilt rule isn't customized** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule +And it is non-customized +When a user navigates to that rule's detail page +Then the rule's `is_customized` value should be false +And the Modified badge should NOT be present on the page +``` + +#### **Scenario: Modified badge should not appear on a custom rule's rule details page** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one custom rule +When a user navigates to that rule's detail page +Then the Modified badge should NOT be present on the page +``` + +#### **Scenario: Modified badge should appear on the rule management table when prebuilt rule is modified** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule +And it is customized +When a user navigates to the rule management page +Then the customized rule's `is_customized` value should be true +And the Modified badge should be present in the table row +``` + +#### **Scenario: Modified badge should not appear on the rule management table when prebuilt rule isn't customized** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one prebuilt rule +And it is non-customized +When a user navigates to the rule management page +Then the non-customized rule's `is_customized` value should be false +And the Modified badge should NOT be present in the table row +``` + +#### **Scenario: Modified badge should not appear on the rule management table when row is a custom rule** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one custom rule +When a user navigates to the rule management page +Then the Modified badge should NOT be present in the custom rule's table row +``` + +#### **Scenario: Modified badge should appear on the rule updates table when prebuilt rule is customized** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one customized prebuilt rule +And that rules have upgrades +When a user navigates to the rule updates table +And the Modified badge should be present in the table row +``` + +#### **Scenario: Modified badge should not appear on the rule updates table when prebuilt rule isn't customized** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one non-customized prebuilt rule +And that rules have upgrades +When a user navigates to the rule updates table +And the Modified badge should NOT be present in the table row +``` + +#### **Scenario: User should be able to see only customized rules in the rule updates table** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one customized prebuilt rule +And that rules have upgrades +When a user navigates to the rule updates page +And use filter to show customized rules +Then the table should display only customized rules +And all shown table rows should have the Modified badge present +``` + +#### **Scenario: User should be able to filter by non-customized rules on the rule updates table** + +**Automation**: 1 cypress test. + +```Gherkin +Given a space with at least one customized prebuilt rule +And that rules have upgrades +When a user navigates to the rule updates page +And use filter to show non-customized rules +Then the table should display only non-customized rules +And the all shown table rows should NOT have the Modified badge present +``` diff --git a/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/shared_assets/customizable_rule_fields.md b/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/shared_assets/customizable_rule_fields.md new file mode 100644 index 0000000000000..66459fd0de38b --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/shared_assets/customizable_rule_fields.md @@ -0,0 +1,50 @@ +### Customizable rule fields + +These are fields in the detection rule schema that are able to be customized on a prebuilt rule. + +| field_name | +| name | +| description | +| interval | +| from | +| to | +| note | +| severity | +| tags | +| severity_mapping | +| risk_score | +| risk_score_mapping | +| references | +| false_positives | +| threat | +| note | +| setup | +| related_integrations | +| required_fields | +| max_signals | +| investigation_fields | +| rule_name_override | +| timestamp_override | +| timeline_template | +| building_block_type | +| query | +| language | +| filters | +| index | +| data_view_id | +| alert_suppression | +| event_category_override | +| timestamp_field | +| tiebreaker_field | +| threat_index | +| threat_mapping | +| threat_indicator_path | +| threat_query | +| threat_language | +| threat_filters | +| threshold | +| machine_learning_job_id | +| anomaly_threshold | +| new_terms_fields | +| history_window_start | +| type | diff --git a/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/shared_assets/non_customizable_rule_fields.md b/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/shared_assets/non_customizable_rule_fields.md new file mode 100644 index 0000000000000..8cb72a0368281 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/docs/testing/test_plans/detection_response/prebuilt_rules/shared_assets/non_customizable_rule_fields.md @@ -0,0 +1,8 @@ +### Non-customizable rule fields + +These are fields in the detection rule schema that cannot be customized for a prebuilt rule. + +| version | +| id | +| author | +| license | diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/additional_controls.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/additional_controls.tsx new file mode 100644 index 0000000000000..208649f846e0c --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/additional_controls.tsx @@ -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 React, { type FC, type PropsWithChildren } from 'react'; +import { EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; +import { type DataView } from '@kbn/data-views-plugin/common'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { getAbbreviatedNumber } from '@kbn/cloud-security-posture-common'; +import { FieldsSelectorModal } from './fields_selector_modal'; +import { useFieldsModal } from '../hooks/use_fields_modal'; +import { useStyles } from '../hooks/use_styles'; + +const ASSET_INVENTORY_FIELDS_SELECTOR_OPEN_BUTTON = 'assetInventoryFieldsSelectorOpenButton'; + +const GroupSelectorWrapper: FC> = ({ children }) => { + const styles = useStyles(); + + return ( + + {children} + + ); +}; + +export const AdditionalControls = ({ + total, + title, + dataView, + columns, + onAddColumn, + onRemoveColumn, + groupSelectorComponent, + onResetColumns, +}: { + total: number; + title: string; + dataView: DataView; + columns: string[]; + onAddColumn: (column: string) => void; + onRemoveColumn: (column: string) => void; + groupSelectorComponent?: JSX.Element; + onResetColumns: () => void; +}) => { + const { isFieldSelectorModalVisible, closeFieldsSelectorModal, openFieldsSelectorModal } = + useFieldsModal(); + + return ( + <> + {isFieldSelectorModalVisible && ( + + )} + + {`${getAbbreviatedNumber( + total + )} ${title}`} + + + + + + + {groupSelectorComponent && ( + {groupSelectorComponent} + )} + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/app.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/app.tsx deleted file mode 100644 index 837d7f007aab1..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/app.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import { FormattedMessage, I18nProvider } from '@kbn/i18n-react'; -import { EuiPageTemplate, EuiTitle } from '@elastic/eui'; - -const AssetInventoryApp = () => { - return ( - - <> - - - -

- -

-
-
- -
- -
- ); -}; - -// we need to use default exports to import it via React.lazy -export default AssetInventoryApp; // eslint-disable-line import/no-default-export diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/empty_state.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/empty_state.tsx new file mode 100644 index 0000000000000..42460408f670a --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/empty_state.tsx @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiImage, EuiEmptyPrompt, EuiButton, EuiLink, useEuiTheme } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { css } from '@emotion/react'; +import illustration from '../../common/images/illustration_product_no_results_magnifying_glass.svg'; + +const ASSET_INVENTORY_DOCS_URL = 'https://ela.st/asset-inventory'; +const EMPTY_STATE_TEST_SUBJ = 'assetInventory:empty-state'; + +export const EmptyState = ({ + onResetFilters, + docsUrl = ASSET_INVENTORY_DOCS_URL, +}: { + onResetFilters: () => void; + docsUrl?: string; +}) => { + const { euiTheme } = useEuiTheme(); + + return ( + .euiEmptyPrompt__main { + gap: ${euiTheme.size.xl}; + } + && { + margin-top: ${euiTheme.size.xxxl}}; + } + `} + data-test-subj={EMPTY_STATE_TEST_SUBJ} + icon={ + + } + title={ +

+ +

+ } + layout="horizontal" + color="plain" + body={ + <> +

+ +

+ + } + actions={[ + + + , + + + , + ]} + /> + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/fields_selector_modal.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/fields_selector_modal.tsx new file mode 100644 index 0000000000000..38e9e1837c3e6 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/fields_selector_modal.tsx @@ -0,0 +1,84 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { + EuiButton, + EuiButtonEmpty, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { type DataView } from '@kbn/data-views-plugin/common'; +import { FieldsSelectorTable } from './fields_selector_table'; + +const ASSET_INVENTORY_FIELDS_SELECTOR_MODAL = 'assetInventoryFieldsSelectorModal'; +const ASSET_INVENTORY_FIELDS_SELECTOR_RESET_BUTTON = 'assetInventoryFieldsSelectorResetButton'; +const ASSET_INVENTORY_FIELDS_SELECTOR_CLOSE_BUTTON = 'assetInventoryFieldsSelectorCloseButton'; + +interface FieldsSelectorModalProps { + dataView: DataView; + columns: string[]; + onAddColumn: (column: string) => void; + onRemoveColumn: (column: string) => void; + closeModal: () => void; + onResetColumns: () => void; +} + +const title = i18n.translate('xpack.securitySolution.assetInventory.dataTable.fieldsModalTitle', { + defaultMessage: 'Fields', +}); + +export const FieldsSelectorModal = ({ + closeModal, + dataView, + columns, + onAddColumn, + onRemoveColumn, + onResetColumns, +}: FieldsSelectorModalProps) => { + return ( + + + {title} + + + + + + + + + + + + + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/fields_selector_table.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/fields_selector_table.tsx new file mode 100644 index 0000000000000..65bcb08399a48 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/fields_selector_table.tsx @@ -0,0 +1,290 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useCallback, useMemo, useState } from 'react'; +import useSessionStorage from 'react-use/lib/useSessionStorage'; +import { + type CriteriaWithPagination, + type EuiBasicTableColumn, + type EuiSearchBarProps, + EuiButtonEmpty, + EuiCheckbox, + EuiContextMenuItem, + EuiContextMenuPanel, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiInMemoryTable, + EuiPopover, + EuiText, +} from '@elastic/eui'; +import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +const SESSION_STORAGE_FIELDS_MODAL_SHOW_SELECTED = 'assetInventory:fieldsModal:showSelected'; +const ACTION_COLUMN_WIDTH = '24px'; +const defaultSorting = { + sort: { + field: 'name', + direction: 'asc', + }, +} as const; + +interface Field { + id: string; + name: string; + displayName: string; +} + +const VIEW_LABEL = i18n.translate( + 'xpack.securitySolution.assetInventory.allAssets.fieldsModal.viewLabel', + { + defaultMessage: 'View', + } +); + +const VIEW_VALUE_SELECTED = i18n.translate( + 'xpack.securitySolution.assetInventory.allAssets.fieldsModal.viewSelected', + { + defaultMessage: 'selected', + } +); + +const VIEW_VALUE_ALL = i18n.translate( + 'xpack.securitySolution.assetInventory.allAssets.fieldsModal.viewAll', + { + defaultMessage: 'all', + } +); + +export interface FieldsSelectorTableProps { + dataView: DataView; + columns: string[]; + onAddColumn: (column: string) => void; + onRemoveColumn: (column: string) => void; + title: string; +} + +export const filterFieldsBySearch = ( + fields: DataViewField[], + visibleColumns: string[] = [], + searchQuery?: string, + isFilterSelectedEnabled: boolean = false +) => { + const allowedFields = fields + .filter((field) => field.name !== '_index' && field.visualizable) + .map((field) => ({ + id: field.name, + name: field.name, + displayName: field.customLabel || '', + })); + + const visibleFields = !isFilterSelectedEnabled + ? allowedFields + : allowedFields.filter((field) => visibleColumns.includes(field.id)); + + return !searchQuery + ? visibleFields + : visibleFields.filter((field) => { + const normalizedName = `${field.name} ${field.displayName}`.toLowerCase(); + const normalizedQuery = searchQuery.toLowerCase() || ''; + return normalizedName.indexOf(normalizedQuery) !== -1; + }); +}; + +export const FieldsSelectorTable = ({ + title, + dataView, + columns, + onAddColumn, + onRemoveColumn, +}: FieldsSelectorTableProps) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const [searchQuery, setSearchQuery] = useState(); + const [isFilterSelectedEnabled, setIsFilterSelectedEnabled] = useSessionStorage( + SESSION_STORAGE_FIELDS_MODAL_SHOW_SELECTED, + false + ); + const [pagination, setPagination] = useState({ pageIndex: 0 }); + const onTableChange = ({ page: { index } }: CriteriaWithPagination) => { + setPagination({ pageIndex: index }); + }; + const fields = useMemo( + () => + filterFieldsBySearch(dataView.fields.getAll(), columns, searchQuery, isFilterSelectedEnabled), + [dataView, columns, searchQuery, isFilterSelectedEnabled] + ); + + const togglePopover = useCallback(() => { + setIsPopoverOpen((open) => !open); + }, []); + const closePopover = useCallback(() => { + setIsPopoverOpen(false); + }, []); + + const onFilterSelectedChange = useCallback( + (enabled: boolean) => { + setIsFilterSelectedEnabled(enabled); + }, + [setIsFilterSelectedEnabled] + ); + + let debounceTimeoutId: ReturnType; + + const onQueryChange: EuiSearchBarProps['onChange'] = ({ query }) => { + clearTimeout(debounceTimeoutId); + + debounceTimeoutId = setTimeout(() => { + setSearchQuery(query?.text); + }, 300); + }; + + const tableColumns: Array> = [ + { + field: 'action', + name: '', + width: ACTION_COLUMN_WIDTH, + sortable: false, + render: (_, { id }: Field) => ( + { + const isChecked = e.target.checked; + return isChecked ? onAddColumn(id) : onRemoveColumn(id); + }} + /> + ), + }, + { + field: 'name', + name: i18n.translate('xpack.securitySolution.assetInventory.allAssets.fieldsModalName', { + defaultMessage: 'Name', + }), + sortable: true, + }, + ]; + + const error = useMemo(() => { + if (!dataView || dataView.fields.length === 0) { + return i18n.translate('xpack.securitySolution.assetInventory.allAssets.fieldsModalError', { + defaultMessage: 'No fields found in the data view', + }); + } + return ''; + }, [dataView]); + + const search: EuiSearchBarProps = { + onChange: onQueryChange, + box: { + incremental: true, + placeholder: i18n.translate( + 'xpack.securitySolution.assetInventory.allAssets.fieldsModalSearch', + { + defaultMessage: 'Search field name', + } + ), + }, + }; + + const tableHeader = useMemo(() => { + const totalFields = fields.length; + return ( + + + + {' '} + + {totalFields} + {' '} + + + + + + {`${VIEW_LABEL}: ${isFilterSelectedEnabled ? VIEW_VALUE_SELECTED : VIEW_VALUE_ALL}`} + + } + > + { + onFilterSelectedChange(false); + closePopover(); + }} + > + {`${VIEW_LABEL} ${VIEW_VALUE_ALL}`} + , + , + { + onFilterSelectedChange(true); + closePopover(); + }} + > + {`${VIEW_LABEL} ${VIEW_VALUE_SELECTED}`} + , + ]} + /> + + + + ); + }, [ + closePopover, + fields.length, + isFilterSelectedEnabled, + isPopoverOpen, + onFilterSelectedChange, + togglePopover, + ]); + + return ( + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/data_view_context.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/data_view_context.ts new file mode 100644 index 0000000000000..b430d53407616 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/data_view_context.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { createContext, useContext } from 'react'; +import type { DataView } from '@kbn/data-views-plugin/common'; + +interface DataViewContextValue { + dataView: DataView; + dataViewRefetch?: () => void; + dataViewIsLoading?: boolean; + dataViewIsRefetching?: boolean; +} + +export const DataViewContext = createContext(undefined); + +/** + * Retrieve context's properties + */ +export const useDataViewContext = (): DataViewContextValue => { + const contextValue = useContext(DataViewContext); + + if (!contextValue) { + throw new Error('useDataViewContext can only be used within DataViewContext provider'); + } + + return contextValue; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/api/constants.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/index.ts similarity index 58% rename from x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/api/constants.ts rename to x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/index.ts index 215f0089410e7..6e3efaec5fc1d 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/api/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/index.ts @@ -5,6 +5,6 @@ * 2.0. */ -export const MAX_CUSTOM_RULES_TO_CREATE_IN_PARALLEL = 50; -export const MAX_PREBUILT_RULES_TO_FETCH = 10_000 as const; -export const MAX_TRANSLATED_RULES_TO_INSTALL = 10_000 as const; +export * from './use_asset_inventory_data_table'; +export * from './use_base_es_query'; +export * from './use_persisted_query'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_asset_inventory_data_table.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_asset_inventory_data_table.ts new file mode 100644 index 0000000000000..741bdaebaae45 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_asset_inventory_data_table.ts @@ -0,0 +1,178 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { type Dispatch, type SetStateAction, useCallback } from 'react'; +import type { BoolQuery, Filter, Query } from '@kbn/es-query'; +import type { CriteriaWithPagination } from '@elastic/eui'; +import type { DataTableRecord } from '@kbn/discover-utils/types'; +import { useUrlQuery } from './use_url_query'; +import { usePageSize } from './use_page_size'; +import { getDefaultQuery } from './utils'; +import { useBaseEsQuery } from './use_base_es_query'; +import { usePersistedQuery } from './use_persisted_query'; + +const LOCAL_STORAGE_DATA_TABLE_COLUMNS_KEY = 'assetInventory:dataTable:columns'; + +export interface AssetsBaseURLQuery { + query: Query; + filters: Filter[]; + /** + * Filters that are part of the query but not persisted in the URL or in the Filter Manager + */ + nonPersistedFilters?: Filter[]; + /** + * Grouping component selection + */ + groupBy?: string[]; +} + +export type URLQuery = AssetsBaseURLQuery & Record; + +type SortOrder = [string, string]; + +export interface AssetInventoryDataTableResult { + setUrlQuery: (query: Record) => void; + sort: SortOrder[]; + filters: Filter[]; + query: { bool: BoolQuery }; + queryError?: Error; + pageIndex: number; + urlQuery: URLQuery; + setTableOptions: (options: CriteriaWithPagination) => void; + handleUpdateQuery: (query: URLQuery) => void; + pageSize: number; + setPageSize: Dispatch>; + onChangeItemsPerPage: (newPageSize: number) => void; + onChangePage: (newPageIndex: number) => void; + onSort: (sort: string[][]) => void; + onResetFilters: () => void; + columnsLocalStorageKey: string; + getRowsFromPages: (data: Array<{ page: DataTableRecord[] }> | undefined) => DataTableRecord[]; +} + +/* + Hook for managing common table state and methods for the Asset Inventory DataTable +*/ +export const useAssetInventoryDataTable = ({ + defaultQuery = getDefaultQuery, + paginationLocalStorageKey, + columnsLocalStorageKey, + nonPersistedFilters, +}: { + defaultQuery?: (params: AssetsBaseURLQuery) => URLQuery; + paginationLocalStorageKey: string; + columnsLocalStorageKey?: string; + nonPersistedFilters?: Filter[]; +}): AssetInventoryDataTableResult => { + const getPersistedDefaultQuery = usePersistedQuery(defaultQuery); + const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); + const { pageSize, setPageSize } = usePageSize(paginationLocalStorageKey); + + const onChangeItemsPerPage = useCallback( + (newPageSize: number) => { + setPageSize(newPageSize); + setUrlQuery({ + pageIndex: 0, + pageSize: newPageSize, + }); + }, + [setPageSize, setUrlQuery] + ); + + const onResetFilters = useCallback(() => { + setUrlQuery({ + pageIndex: 0, + filters: [], + query: { + query: '', + language: 'kuery', + }, + }); + }, [setUrlQuery]); + + const onChangePage = useCallback( + (newPageIndex: number) => { + setUrlQuery({ + pageIndex: newPageIndex, + }); + }, + [setUrlQuery] + ); + + const onSort = useCallback( + (sort: string[][]) => { + setUrlQuery({ + sort, + }); + }, + [setUrlQuery] + ); + + const setTableOptions = useCallback( + ({ page, sort }: CriteriaWithPagination) => { + setPageSize(page.size); + setUrlQuery({ + sort, + pageIndex: page.index, + }); + }, + [setUrlQuery, setPageSize] + ); + + /** + * Page URL query to ES query + */ + const baseEsQuery = useBaseEsQuery({ + filters: urlQuery.filters, + query: urlQuery.query, + ...(nonPersistedFilters ? { nonPersistedFilters } : {}), + }); + + const handleUpdateQuery = useCallback( + (query: URLQuery) => { + setUrlQuery({ ...query, pageIndex: 0 }); + }, + [setUrlQuery] + ); + + const getRowsFromPages = (data: Array<{ page: DataTableRecord[] }> | undefined) => + data + ?.map(({ page }: { page: DataTableRecord[] }) => { + return page; + }) + .flat() || []; + + const queryError = baseEsQuery instanceof Error ? baseEsQuery : undefined; + + return { + setUrlQuery, + sort: urlQuery.sort as SortOrder[], + filters: urlQuery.filters || [], + query: baseEsQuery.query + ? baseEsQuery.query + : { + bool: { + must: [], + filter: [], + should: [], + must_not: [], + }, + }, + queryError, + pageIndex: urlQuery.pageIndex as number, + urlQuery, + setTableOptions, + handleUpdateQuery, + pageSize, + setPageSize, + onChangeItemsPerPage, + onChangePage, + onSort, + onResetFilters, + columnsLocalStorageKey: columnsLocalStorageKey || LOCAL_STORAGE_DATA_TABLE_COLUMNS_KEY, + getRowsFromPages, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_base_es_query.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_base_es_query.ts new file mode 100644 index 0000000000000..d7ea573617e86 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_base_es_query.ts @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { DataView } from '@kbn/data-views-plugin/common'; +import { buildEsQuery, type EsQueryConfig } from '@kbn/es-query'; +import { i18n } from '@kbn/i18n'; +import { useEffect, useMemo } from 'react'; +import { useDataViewContext } from '../data_view_context'; +import { useKibana } from '../../../common/lib/kibana'; +import type { AssetsBaseURLQuery } from './use_asset_inventory_data_table'; + +interface AssetsBaseESQueryConfig { + config: EsQueryConfig; +} + +const getBaseQuery = ({ + dataView, + query, + filters, + config, +}: AssetsBaseURLQuery & + AssetsBaseESQueryConfig & { + dataView: DataView | undefined; + }) => { + try { + return { + query: buildEsQuery(dataView, query, filters, config), // will throw for malformed query + }; + } catch (error) { + return { + query: undefined, + error: error instanceof Error ? error : new Error('Unknown Error'), + }; + } +}; + +export const useBaseEsQuery = ({ + filters = [], + query, + nonPersistedFilters, +}: AssetsBaseURLQuery) => { + const { + notifications: { toasts }, + data: { + query: { filterManager, queryString }, + }, + uiSettings, + } = useKibana().services; + const { dataView } = useDataViewContext(); + const allowLeadingWildcards = uiSettings.get('query:allowLeadingWildcards'); + const config: EsQueryConfig = useMemo(() => ({ allowLeadingWildcards }), [allowLeadingWildcards]); + const baseEsQuery = useMemo( + () => + getBaseQuery({ + dataView, + filters: filters.concat(nonPersistedFilters ?? []).flat(), + query, + config, + }), + [dataView, filters, nonPersistedFilters, query, config] + ); + + /** + * Sync filters with the URL query + */ + useEffect(() => { + filterManager.setAppFilters(filters); + queryString.setQuery(query); + }, [filters, filterManager, queryString, query]); + + const handleMalformedQueryError = () => { + const error = baseEsQuery instanceof Error ? baseEsQuery : undefined; + if (error) { + toasts.addError(error, { + title: i18n.translate( + 'xpack.securitySolution.assetInventory.allAssets.search.queryErrorToastMessage', + { + defaultMessage: 'Query Error', + } + ), + toastLifeTimeMs: 1000 * 5, + }); + } + }; + + useEffect(handleMalformedQueryError, [baseEsQuery, toasts]); + + return baseEsQuery; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_page_size.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_page_size.ts new file mode 100644 index 0000000000000..396aef75509c5 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_page_size.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import useLocalStorage from 'react-use/lib/useLocalStorage'; + +const DEFAULT_VISIBLE_ROWS_PER_PAGE = 10; // generic default # of table rows to show (currently we only have a list of policies) + +/** + * @description handles persisting the users table row size selection + */ +export const usePageSize = (localStorageKey: string) => { + const [persistedPageSize, setPersistedPageSize] = useLocalStorage( + localStorageKey, + DEFAULT_VISIBLE_ROWS_PER_PAGE + ); + + let pageSize = DEFAULT_VISIBLE_ROWS_PER_PAGE; + + if (persistedPageSize) { + pageSize = persistedPageSize; + } + + return { pageSize, setPageSize: setPersistedPageSize }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_persisted_query.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_persisted_query.ts new file mode 100644 index 0000000000000..0b2b4eb76d9f8 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_persisted_query.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 { useCallback } from 'react'; +import type { Query } from '@kbn/es-query'; +import type { AssetsBaseURLQuery } from './use_asset_inventory_data_table'; +import { useKibana } from '../../../common/lib/kibana'; + +export const usePersistedQuery = (getter: ({ filters, query }: AssetsBaseURLQuery) => T) => { + const { + data: { + query: { filterManager, queryString }, + }, + } = useKibana().services; + + return useCallback( + () => + getter({ + filters: filterManager.getAppFilters(), + query: queryString.getQuery() as Query, + }), + [getter, filterManager, queryString] + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_url_query.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_url_query.ts new file mode 100644 index 0000000000000..144fffda6e2d7 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/use_url_query.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 { useEffect, useCallback, useMemo } from 'react'; +import { useHistory, useLocation } from 'react-router-dom'; +import { encodeQuery, decodeQuery } from '@kbn/cloud-security-posture'; + +/** + * @description uses 'rison' to encode/decode a url query + * @todo replace getDefaultQuery with schema. validate after decoded from URL, use defaultValues + * @note shallow-merges default, current and next query + */ +export const useUrlQuery = (getDefaultQuery: () => T) => { + const { push, replace } = useHistory(); + const { search, key } = useLocation(); + + const urlQuery = useMemo( + () => ({ ...getDefaultQuery(), ...decodeQuery(search) }), + [getDefaultQuery, search] + ); + + const setUrlQuery = useCallback( + (query: Partial) => + push({ + search: encodeQuery({ ...getDefaultQuery(), ...urlQuery, ...query }), + }), + [getDefaultQuery, urlQuery, push] + ); + + // Set initial query + useEffect(() => { + if (search) return; + + replace({ search: encodeQuery(getDefaultQuery()) }); + }, [getDefaultQuery, search, replace]); + + return { + key, + urlQuery, + setUrlQuery, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/utils.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/utils.ts new file mode 100644 index 0000000000000..565ed333edc70 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_data_table/utils.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { AssetsBaseURLQuery } from './use_asset_inventory_data_table'; + +export const getDefaultQuery = ({ query, filters }: AssetsBaseURLQuery) => ({ + query, + filters, + sort: { field: '@timestamp', direction: 'desc' }, + pageIndex: 0, +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fields_modal.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fields_modal.ts new file mode 100644 index 0000000000000..9ca88d3d97b76 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fields_modal.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 { useState } from 'react'; + +export const useFieldsModal = () => { + const [isFieldSelectorModalVisible, setIsFieldSelectorModalVisible] = useState(false); + + const closeFieldsSelectorModal = () => setIsFieldSelectorModalVisible(false); + const openFieldsSelectorModal = () => setIsFieldSelectorModalVisible(true); + + return { + isFieldSelectorModalVisible, + closeFieldsSelectorModal, + openFieldsSelectorModal, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_styles.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_styles.ts new file mode 100644 index 0000000000000..878c37e7c43a2 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_styles.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/css'; + +export const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + const gridContainer = css` + min-height: 400px; + `; + + const gridStyle = css` + & .euiDataGridHeaderCell__icon { + display: none; + } + & .euiDataGrid__controls { + border-bottom: none; + margin-bottom: ${euiTheme.size.s}; + border-top: none; + } + & .euiDataGrid--headerUnderline .euiDataGridHeaderCell { + border-bottom: ${euiTheme.border.width.thick} solid ${euiTheme.colors.fullShade}; + } + & .euiButtonIcon[data-test-subj='docTableExpandToggleColumn'] { + color: ${euiTheme.colors.primary}; + } + + & .euiDataGridRowCell { + font-size: ${euiTheme.size.m}; + + // Vertically center content + .euiDataGridRowCell__content { + display: flex; + align-items: center; + } + } + & .euiDataGridRowCell.euiDataGridRowCell--numeric { + text-align: left; + } + & .euiDataGridHeaderCell--numeric .euiDataGridHeaderCell__content { + flex-grow: 0; + text-align: left; + } + & .assetInventoryDataTableTotal { + font-size: ${euiTheme.size.m}; + font-weight: ${euiTheme.font.weight.bold}; + border-right: ${euiTheme.border.thin}; + margin-inline: ${euiTheme.size.s}; + padding-right: ${euiTheme.size.m}; + } + + & [data-test-subj='docTableExpandToggleColumn'] svg { + inline-size: 16px; + block-size: 16px; + } + + & .unifiedDataTable__cellValue { + font-family: ${euiTheme.font.family}; + } + & .unifiedDataTable__inner .euiDataGrid__controls { + border-top: none; + } + `; + + const groupBySelector = css` + margin-left: auto; + `; + + return { + gridStyle, + groupBySelector, + gridContainer, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx new file mode 100644 index 0000000000000..128c82a266bac --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx @@ -0,0 +1,432 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState, useMemo } from 'react'; +import _ from 'lodash'; +import { type Filter } from '@kbn/es-query'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n-react'; +import { + UnifiedDataTable, + DataLoadingState, + DataGridDensity, + useColumns, + type UnifiedDataTableSettings, + type UnifiedDataTableSettingsColumn, +} from '@kbn/unified-data-table'; +import { CellActionsProvider } from '@kbn/cell-actions'; +import { type HttpSetup } from '@kbn/core-http-browser'; +import { SHOW_MULTIFIELDS, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; +import { type DataTableRecord } from '@kbn/discover-utils/types'; +import { + type EuiDataGridCellValueElementProps, + type EuiDataGridControlColumn, + type EuiDataGridStyle, + EuiProgress, + EuiPageTemplate, + EuiTitle, + EuiButtonIcon, +} from '@elastic/eui'; +import { type AddFieldFilterHandler } from '@kbn/unified-field-list'; +import { generateFilters } from '@kbn/data-plugin/public'; +import { type DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; + +import { type CriticalityLevelWithUnassigned } from '../../../common/entity_analytics/asset_criticality/types'; +import { useKibana } from '../../common/lib/kibana'; + +import { AssetCriticalityBadge } from '../../entity_analytics/components/asset_criticality/asset_criticality_badge'; +import { EmptyState } from '../components/empty_state'; +import { AdditionalControls } from '../components/additional_controls'; + +import { useDataViewContext } from '../hooks/data_view_context'; +import { useStyles } from '../hooks/use_styles'; +import { + useAssetInventoryDataTable, + type AssetsBaseURLQuery, + type URLQuery, +} from '../hooks/use_asset_inventory_data_table'; + +const gridStyle: EuiDataGridStyle = { + border: 'horizontal', + cellPadding: 'l', + stripes: false, + header: 'underline', +}; + +const MAX_ASSETS_TO_LOAD = 500; // equivalent to MAX_FINDINGS_TO_LOAD in @kbn/cloud-security-posture-common + +const title = i18n.translate('xpack.securitySolution.assetInventory.allAssets.tableRowTypeLabel', { + defaultMessage: 'assets', +}); + +const columnsLocalStorageKey = 'assetInventoryColumns'; +const LOCAL_STORAGE_DATA_TABLE_PAGE_SIZE_KEY = 'assetInventory:dataTable:pageSize'; + +const columnHeaders: Record = { + 'asset.risk': i18n.translate('xpack.securitySolution.assetInventory.allAssets.risk', { + defaultMessage: 'Risk', + }), + 'asset.name': i18n.translate('xpack.securitySolution.assetInventory.allAssets.name', { + defaultMessage: 'Name', + }), + 'asset.criticality': i18n.translate( + 'xpack.securitySolution.assetInventory.allAssets.criticality', + { + defaultMessage: 'Criticality', + } + ), + 'asset.source': i18n.translate('xpack.securitySolution.assetInventory.allAssets.source', { + defaultMessage: 'Source', + }), + '@timestamp': i18n.translate('xpack.securitySolution.assetInventory.allAssets.lastSeen', { + defaultMessage: 'Last Seen', + }), +} as const; + +const customCellRenderer = (rows: DataTableRecord[]) => ({ + 'asset.risk': ({ rowIndex }: EuiDataGridCellValueElementProps) => { + const risk = rows[rowIndex].flattened['asset.risk'] as number; + return risk; + }, + 'asset.criticality': ({ rowIndex }: EuiDataGridCellValueElementProps) => { + const criticality = rows[rowIndex].flattened[ + 'asset.criticality' + ] as CriticalityLevelWithUnassigned; + return ; + }, +}); + +interface AssetInventoryDefaultColumn { + id: string; + width?: number; +} + +const defaultColumns: AssetInventoryDefaultColumn[] = [ + { id: 'asset.risk', width: 50 }, + { id: 'asset.name', width: 400 }, + { id: 'asset.criticality' }, + { id: 'asset.source' }, + { id: '@timestamp' }, +]; + +const getDefaultQuery = ({ query, filters }: AssetsBaseURLQuery): URLQuery => ({ + query, + filters, + sort: [['@timestamp', 'desc']], +}); + +export interface AllAssetsProps { + rows: DataTableRecord[]; + isLoading: boolean; + height?: number | string; + loadMore: () => void; + nonPersistedFilters?: Filter[]; + hasDistributionBar?: boolean; + /** + * This function will be used in the control column to create a rule for a specific finding. + */ + createFn?: (rowIndex: number) => ((http: HttpSetup) => Promise) | undefined; + /** + * This is the component that will be rendered in the flyout when a row is expanded. + * This component will receive the row data and a function to close the flyout. + */ + flyoutComponent: (hit: DataTableRecord, onCloseFlyout: () => void) => JSX.Element; + 'data-test-subj'?: string; +} + +const AllAssets = ({ + rows, + isLoading, + loadMore, + nonPersistedFilters, + height, + hasDistributionBar = true, + createFn, + flyoutComponent, + ...rest +}: AllAssetsProps) => { + const assetInventoryDataTable = useAssetInventoryDataTable({ + paginationLocalStorageKey: LOCAL_STORAGE_DATA_TABLE_PAGE_SIZE_KEY, + columnsLocalStorageKey, + defaultQuery: getDefaultQuery, + nonPersistedFilters, + }); + + const { + // columnsLocalStorageKey, + pageSize, + onChangeItemsPerPage, + setUrlQuery, + onSort, + onResetFilters, + filters, + sort, + } = assetInventoryDataTable; + + const [columns, setColumns] = useLocalStorage( + columnsLocalStorageKey, + defaultColumns.map((c) => c.id) + ); + + const [persistedSettings, setPersistedSettings] = useLocalStorage( + `${columnsLocalStorageKey}:settings`, + { + columns: defaultColumns.reduce((columnSettings, column) => { + const columnDefaultSettings = column.width ? { width: column.width } : {}; + const newColumn = { [column.id]: columnDefaultSettings }; + return { ...columnSettings, ...newColumn }; + }, {} as UnifiedDataTableSettings['columns']), + } + ); + + const settings = useMemo(() => { + return { + columns: Object.keys(persistedSettings?.columns as UnifiedDataTableSettings).reduce( + (columnSettings, columnId) => { + const newColumn: UnifiedDataTableSettingsColumn = { + ..._.pick(persistedSettings?.columns?.[columnId], ['width']), + display: columnHeaders?.[columnId], + }; + + return { ...columnSettings, [columnId]: newColumn }; + }, + {} as UnifiedDataTableSettings['columns'] + ), + }; + }, [persistedSettings]); + + const { dataView, dataViewIsLoading, dataViewIsRefetching } = useDataViewContext(); + + const [expandedDoc, setExpandedDoc] = useState(undefined); + + const renderDocumentView = (hit: DataTableRecord) => + flyoutComponent(hit, () => setExpandedDoc(undefined)); + + const { + uiActions, + uiSettings, + dataViews, + data, + application, + theme, + fieldFormats, + notifications, + storage, + } = useKibana().services; + + const styles = useStyles(); + + const { capabilities } = application; + const { filterManager } = data.query; + + const services = { + theme, + fieldFormats, + uiSettings, + toastNotifications: notifications.toasts, + storage, + data, + }; + + const { + columns: currentColumns, + onSetColumns, + onAddColumn, + onRemoveColumn, + } = useColumns({ + capabilities, + defaultOrder: uiSettings.get(SORT_DEFAULT_ORDER_SETTING), + dataView, + dataViews, + setAppState: (props) => setColumns(props.columns), + columns, + sort, + }); + + /** + * This object is used to determine if the table rendering will be virtualized and the virtualization wrapper height. + * mode should be passed as a key to the UnifiedDataTable component to force a re-render when the mode changes. + */ + const computeDataTableRendering = useMemo(() => { + // Enable virtualization mode when the table is set to a large page size. + const isVirtualizationEnabled = pageSize >= 100; + + const getWrapperHeight = () => { + if (height) return height; + + // If virtualization is not needed the table will render unconstrained. + if (!isVirtualizationEnabled) return 'auto'; + + const baseHeight = 362; // height of Kibana Header + Findings page header and search bar + const filterBarHeight = filters?.length > 0 ? 40 : 0; + const distributionBarHeight = hasDistributionBar ? 52 : 0; + return `calc(100vh - ${baseHeight}px - ${filterBarHeight}px - ${distributionBarHeight}px)`; + }; + + return { + wrapperHeight: getWrapperHeight(), + mode: isVirtualizationEnabled ? 'virtualized' : 'standard', + }; + }, [pageSize, height, filters?.length, hasDistributionBar]); + + const onAddFilter: AddFieldFilterHandler | undefined = useMemo( + () => + filterManager && dataView + ? (clickedField, values, operation) => { + const newFilters = generateFilters( + filterManager, + clickedField, + values, + operation, + dataView + ); + filterManager.addFilters(newFilters); + setUrlQuery({ + filters: filterManager.getFilters(), + }); + } + : undefined, + [dataView, filterManager, setUrlQuery] + ); + + const onResize = (colSettings: { columnId: string; width: number | undefined }) => { + const grid = persistedSettings || {}; + const newColumns = { ...(grid.columns || {}) }; + newColumns[colSettings.columnId] = colSettings.width + ? { width: Math.round(colSettings.width) } + : {}; + const newGrid = { ...grid, columns: newColumns }; + setPersistedSettings(newGrid); + }; + + const externalCustomRenderers = useMemo(() => { + if (!customCellRenderer) { + return undefined; + } + return customCellRenderer(rows); + }, [rows]); + + const onResetColumns = () => { + setColumns(defaultColumns.map((c) => c.id)); + }; + + const externalAdditionalControls = ( + + ); + + const externalControlColumns: EuiDataGridControlColumn[] = [ + { + id: 'take-action', + width: 20, + headerCellRender: () => null, + rowCellRender: ({ rowIndex }) => ( + createFn(rowIndex)} + /> + ), + }, + ]; + + const loadingStyle = { + opacity: isLoading ? 1 : 0, + }; + + const loadingState = + isLoading || dataViewIsLoading || dataViewIsRefetching || !dataView + ? DataLoadingState.loading + : DataLoadingState.loaded; + + // TODO Improve this loading - prevent race condition fetching rows and dataView + if (loadingState === DataLoadingState.loaded && !rows.length && !!dataView) { + return ; + } + + return ( + + + +

+ +

+
+ +
+ + {!dataView ? null : ( + + )} +
+
+
+
+ ); +}; + +// we need to use default exports to import it via React.lazy +export default AllAssets; // eslint-disable-line import/no-default-export diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/index.tsx deleted file mode 100644 index 006148ed87d9e..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { lazy, Suspense } from 'react'; -import { EuiLoadingSpinner } from '@elastic/eui'; -import { SecuritySolutionPageWrapper } from '../../common/components/page_wrapper'; - -const AssetInventoryLazy = lazy(() => import('../components/app')); - -export const AssetInventoryContainer = React.memo(() => { - return ( - - }> - - - - ); -}); - -AssetInventoryContainer.displayName = 'AssetInventoryContainer'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx index 9021ba17c6e2a..25141006f836b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx @@ -5,15 +5,30 @@ * 2.0. */ -import React from 'react'; +import React, { lazy, Suspense } from 'react'; +import { EuiLoadingSpinner } from '@elastic/eui'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; - +import { useDataView } from '@kbn/cloud-security-posture/src/hooks/use_data_view'; import type { SecuritySubPluginRoutes } from '../app/types'; import { SecurityPageName } from '../app/types'; import { ASSET_INVENTORY_PATH } from '../../common/constants'; +import { SecuritySolutionPageWrapper } from '../common/components/page_wrapper'; import { PluginTemplateWrapper } from '../common/components/plugin_template_wrapper'; import { SecurityRoutePageWrapper } from '../common/components/security_route_page_wrapper'; -import { AssetInventoryContainer } from './pages'; +import { DataViewContext } from './hooks/data_view_context'; +import { mockData } from './sample_data'; + +const AllAssetsLazy = lazy(() => import('./pages/all_assets')); + +const rows = [ + ...mockData, + ...mockData, + ...mockData, + ...mockData, + ...mockData, + ...mockData, + ...mockData, +] as typeof mockData; // Initializing react-query const queryClient = new QueryClient({ @@ -26,15 +41,37 @@ const queryClient = new QueryClient({ }, }); -export const AssetInventoryRoutes = () => ( - - - - - - - -); +export const AssetInventoryRoutes = () => { + const dataViewQuery = useDataView('asset-inventory-logs'); + + const dataViewContextValue = { + dataView: dataViewQuery.data!, // eslint-disable-line @typescript-eslint/no-non-null-assertion + dataViewRefetch: dataViewQuery.refetch, + dataViewIsLoading: dataViewQuery.isLoading, + dataViewIsRefetching: dataViewQuery.isRefetching, + }; + + return ( + + + + + + }> + {}} + flyoutComponent={() => <>} + /> + + + + + + + ); +}; export const routes: SecuritySubPluginRoutes = [ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/sample_data.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/sample_data.ts new file mode 100644 index 0000000000000..6037a7ebfb85d --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/sample_data.ts @@ -0,0 +1,109 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 DataTableRecord } from '@kbn/discover-utils/types'; + +export const mockData = [ + { + id: '1', + raw: {}, + flattened: { + 'asset.risk': 89, + 'asset.name': 'kube-scheduler-cspm-control', + 'asset.criticality': 'high_impact', + 'asset.source': 'cloud-sec-dev', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '2', + raw: {}, + flattened: { + 'asset.risk': 88, + 'asset.name': 'elastic-agent-LK3r', + 'asset.criticality': 'low_impact', + 'asset.source': 'security-ci', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '3', + raw: {}, + flattened: { + 'asset.risk': 89, + 'asset.name': 'app-server-1', + 'asset.criticality': 'high_impact', + 'asset.source': 'sa-testing', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '4', + raw: {}, + flattened: { + 'asset.risk': 87, + 'asset.name': 'database-backup-control', + 'asset.criticality': 'high_impact', + 'asset.source': 'elastic-dev', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '5', + raw: {}, + flattened: { + 'asset.risk': 69, + 'asset.name': 'elastic-agent-XyZ3', + 'asset.criticality': 'low_impact', + 'asset.source': 'elastic-dev', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '6', + raw: {}, + flattened: { + 'asset.risk': 65, + 'asset.name': 'kube-controller-cspm-monitor', + 'asset.criticality': 'unassigned_impact', + 'asset.source': 'cloud-sec-dev', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '7', + raw: {}, + flattened: { + 'asset.risk': 89, + 'asset.name': 'storage-service-AWS-EU-1', + 'asset.criticality': 'medium_impact', + 'asset.source': 'cloud-sec-dev', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '8', + raw: {}, + flattened: { + 'asset.risk': 19, + 'asset.name': 'web-server-LB2', + 'asset.criticality': 'low_impact', + 'asset.source': 'cloud-sec-dev', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, + { + id: '9', + raw: {}, + flattened: { + 'asset.risk': 85, + 'asset.name': 'DNS-controller-azure-sec', + 'asset.criticality': 'unassigned_impact', + 'asset.source': 'cloud-sec-dev', + '@timestamp': '2025-01-01T00:00:00.000Z', + }, + }, +] as DataTableRecord[]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.test.tsx index 7eb1eb2eb5408..22954fb557054 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.test.tsx @@ -6,14 +6,14 @@ */ import moment from 'moment'; - +import type { GenerationInterval } from '@kbn/elastic-assistant-common'; import { act, render, screen } from '@testing-library/react'; import React from 'react'; import { Countdown } from '.'; import { TestProviders } from '../../../../common/mock'; +import { INFORMATION } from '../translations'; import { APPROXIMATE_TIME_REMAINING } from './translations'; -import type { GenerationInterval } from '@kbn/elastic-assistant-common'; describe('Countdown', () => { const connectorIntervals: GenerationInterval[] = [ @@ -81,4 +81,14 @@ describe('Countdown', () => { expect(screen.getByTestId('timerText')).toHaveTextContent('00:59'); }); + + it('renders an accessible information button icon', () => { + render( + + + + ); + + expect(screen.getByRole('button', { name: INFORMATION })).toBeInTheDocument(); + }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.tsx index f691e508a47ff..e19939a315633 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/countdown/index.tsx @@ -15,14 +15,14 @@ import { useEuiTheme, } from '@elastic/eui'; import { css } from '@emotion/react'; +import type { GenerationInterval } from '@kbn/elastic-assistant-common'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import moment from 'moment'; -import type { GenerationInterval } from '@kbn/elastic-assistant-common'; import { useKibana } from '../../../../common/lib/kibana'; -import { getTimerPrefix } from './last_times_popover/helpers'; - import { InfoPopoverBody } from '../info_popover_body'; +import { getTimerPrefix } from './last_times_popover/helpers'; +import * as i18n from '../translations'; const TEXT_COLOR = '#343741'; @@ -69,7 +69,9 @@ const CountdownComponent: React.FC = ({ approximateFutureTime, connectorI }, [approximateFutureTime]); const iconInQuestionButton = useMemo( - () => , + () => ( + + ), [onClick] ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/translations.ts index beb2cda39de11..865961469b041 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/loading_callout/translations.ts @@ -43,7 +43,7 @@ export const AI_IS_CURRENTLY_ANALYZING_RANGE = ({ i18n.translate( 'xpack.securitySolution.attackDiscovery.loadingCallout.aiIsCurrentlyAnalyzingRangeLabel', { - defaultMessage: `AI is analyzing up to {alertsCount} {alertsCount, plural, =1 {alert} other {alerts}} from {start} to {end} generate discoveries.`, + defaultMessage: `AI is analyzing up to {alertsCount} {alertsCount, plural, =1 {alert} other {alerts}} from {start} to {end} to generate discoveries.`, values: { alertsCount, end, start }, } ); @@ -54,3 +54,10 @@ export const ATTACK_DISCOVERY_GENERATION_IN_PROGRESS = i18n.translate( defaultMessage: 'Attack discovery in progress', } ); + +export const INFORMATION = i18n.translate( + 'xpack.securitySolution.attackDiscovery.pages.loadingCallout.informationButtonLabel', + { + defaultMessage: 'Information', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/filter_by_assignees_popover/filter_by_assignees_popover.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/filter_by_assignees_popover/filter_by_assignees_popover.test.tsx index fbfe0eb705b91..5e912e9e5c71d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/filter_by_assignees_popover/filter_by_assignees_popover.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/filter_by_assignees_popover/filter_by_assignees_popover.test.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { render, fireEvent } from '@testing-library/react'; import { FilterByAssigneesPopover } from './filter_by_assignees_popover'; import { TestProviders } from '../../mock'; @@ -110,14 +110,14 @@ describe('', () => { const onUsersChangeMock = jest.fn(); const { getByTestId, getByText } = renderFilterByAssigneesPopover([], onUsersChangeMock); - getByTestId(FILTER_BY_ASSIGNEES_BUTTON).click(); + fireEvent.click(getByTestId(FILTER_BY_ASSIGNEES_BUTTON)); - getByText('User 1').click(); - getByText('User 2').click(); - getByText('User 3').click(); - getByText('User 3').click(); - getByText('User 2').click(); - getByText('User 1').click(); + fireEvent.click(getByText('User 1')); + fireEvent.click(getByText('User 2')); + fireEvent.click(getByText('User 3')); + fireEvent.click(getByText('User 3')); + fireEvent.click(getByText('User 2')); + fireEvent.click(getByText('User 1')); expect(onUsersChangeMock).toHaveBeenCalledTimes(6); expect(onUsersChangeMock.mock.calls).toEqual([ diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/rule_upgrade.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/rule_upgrade.tsx index 73746f3c48211..8aa6c74752a2b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/rule_upgrade.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/rule_upgrade.tsx @@ -42,6 +42,8 @@ export const RuleUpgrade = memo(function RuleUpgrade({ totalNumOfFields={totalNumOfFields} numOfFieldsWithUpdates={numOfFieldsWithUpdates} numOfConflicts={numOfSolvableConflicts + numOfNonSolvableConflicts} + currentVersionNumber={ruleUpgradeState.current_rule.version} + targetVersionNumber={ruleUpgradeState.target_rule.version} /> - {i18n.TOTAL_NUM_OF_FIELDS(totalNumOfFields)} + {i18n.VERSION_UPDATE_INFO( + numOfFieldsWithUpdates, + currentVersionNumber, + targetVersionNumber + )} - {i18n.NUM_OF_FIELDS_WITH_UPDATES(numOfFieldsWithUpdates)} + {i18n.TOTAL_NUM_OF_FIELDS(totalNumOfFields)} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/translations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/translations.tsx index a54ced917de54..04b398bf408e9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/translations.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/rule_upgrade/translations.tsx @@ -19,11 +19,20 @@ export const TOTAL_NUM_OF_FIELDS = (count: number) => ( /> ); -export const NUM_OF_FIELDS_WITH_UPDATES = (count: number) => ( +export const VERSION_UPDATE_INFO = ( + numOfFieldsWithUpdates: number, + currentVersionNumber: number, + targetVersionNumber: number +) => ( {count}, count }} + id="xpack.securitySolution.detectionEngine.rules.upgradeRules.diffTab.versionUpdateInfo" + defaultMessage="{numOfFieldsWithUpdatesValue} {numOfFieldsWithUpdates, plural, one {field} other {fields}} changed in Elastic update from version {currentVersionNumber} to {targetVersionNumber}" + values={{ + numOfFieldsWithUpdatesValue: {numOfFieldsWithUpdates}, + numOfFieldsWithUpdates, + currentVersionNumber, + targetVersionNumber, + }} /> ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx index 647acfde6a0dc..1c13298fc04cd 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx @@ -98,6 +98,7 @@ export const GraphVisualization: React.FC = memo(() => { }, }} showInvestigateInTimeline={true} + showToggleSearch={true} onInvestigateInTimeline={openTimelineCallback} /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/right/components/assignees.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/right/components/assignees.test.tsx index 3c27165f8cc11..32e27b36e25ac 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/right/components/assignees.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/right/components/assignees.test.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; +import { render, fireEvent } from '@testing-library/react'; import { ASSIGNEES_ADD_BUTTON_TEST_ID, @@ -132,12 +132,12 @@ describe('', () => { const { getByTestId, getByText } = renderAssignees('test-event', assignees); // Update assignees - getByTestId(ASSIGNEES_ADD_BUTTON_TEST_ID).click(); - getByText('User 1').click(); - getByText('User 3').click(); + fireEvent.click(getByTestId(ASSIGNEES_ADD_BUTTON_TEST_ID)); + fireEvent.click(getByText('User 1')); + fireEvent.click(getByText('User 3')); // Apply assignees - getByTestId(ASSIGNEES_APPLY_BUTTON_TEST_ID).click(); + fireEvent.click(getByTestId(ASSIGNEES_APPLY_BUTTON_TEST_ID)); expect(setAlertAssigneesMock).toHaveBeenCalledWith( { diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/shared/hooks/use_on_expandable_flyout_close.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/shared/hooks/use_on_expandable_flyout_close.test.tsx index 2a4e5576e24bc..72039ea06a60b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/flyout/shared/hooks/use_on_expandable_flyout_close.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/shared/hooks/use_on_expandable_flyout_close.test.tsx @@ -21,7 +21,7 @@ describe('useOnExpandableFlyoutClose', () => { window.removeEventListener = jest.fn().mockImplementationOnce((event, callback) => {}); - renderHook(() => useOnExpandableFlyoutClose({ callback: callbackFct })); + const { unmount } = renderHook(() => useOnExpandableFlyoutClose({ callback: callbackFct })); window.dispatchEvent( new CustomEvent(TIMELINE_ON_CLOSE_EVENT, { @@ -30,6 +30,9 @@ describe('useOnExpandableFlyoutClose', () => { ); expect(callbackFct).toHaveBeenCalledWith(Flyouts.timeline); + + unmount(); + expect(window.removeEventListener).toBeCalled(); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx index 887792b0b17fd..764b482a66826 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx @@ -122,13 +122,15 @@ export const WorkflowInsightsResults = ({ - {insight.value} + {insight.metadata.display_name || insight.value} {insight.message} - {item.entries[0].type === 'match' && item.entries[0].value} + {item.entries[0].type === 'match' && + item.entries[0].field === 'process.executable.caseless' && + item.entries[0].value} diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts index 87e22de599aae..22867e1199705 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts @@ -8,6 +8,7 @@ import useLocalStorage from 'react-use/lib/useLocalStorage'; import type { OnboardingCardId } from '../../constants'; import type { IntegrationTabId } from '../onboarding_body/cards/integrations/types'; +import type { CardSelectorListItem } from '../onboarding_body/cards/common/card_selector_list'; const LocalStorageKey = { avcBannerDismissed: 'securitySolution.onboarding.avcBannerDismissed', @@ -16,6 +17,7 @@ const LocalStorageKey = { expandedCard: 'securitySolution.onboarding.expandedCard', urlDetails: 'securitySolution.onboarding.urlDetails', selectedIntegrationTabId: 'securitySolution.onboarding.selectedIntegrationTabId', + selectedCardItemId: 'securitySolution.onboarding.selectedCardItem', integrationSearchTerm: 'securitySolution.onboarding.integrationSearchTerm', } as const; @@ -45,6 +47,19 @@ export const useStoredCompletedCardIds = (spaceId: string) => export const useStoredUrlDetails = (spaceId: string) => useDefinedLocalStorage(`${LocalStorageKey.urlDetails}.${spaceId}`, null); +/** + * Stores the selected selectable card ID per space + */ +export const useStoredSelectedCardItemId = ( + cardType: 'alerts' | 'dashboards' | 'rules', + spaceId: string, + defaultSelectedCardItemId: CardSelectorListItem['id'] +) => + useDefinedLocalStorage( + `${LocalStorageKey.selectedCardItemId}.${cardType}.${spaceId}`, + defaultSelectedCardItemId + ); + /** * Stores the selected integration tab ID per space */ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx index 4fec865e36f24..0d9a2a6dee815 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx @@ -5,9 +5,18 @@ * 2.0. */ import React from 'react'; -import { render } from '@testing-library/react'; import { AlertsCard } from './alerts_card'; -import { TestProviders } from '../../../../../common/mock'; +import { TestProviders } from '../../../../../common/mock/test_providers'; +import { render } from '@testing-library/react'; +import { OnboardingContextProvider } from '../../../onboarding_context'; +import { ExperimentalFeaturesService } from '../../../../../common/experimental_features_service'; + +jest.mock('../../../../../common/experimental_features_service', () => ({ + ExperimentalFeaturesService: { get: jest.fn() }, +})); +const mockExperimentalFeatures = ExperimentalFeaturesService.get as jest.Mock; +const mockIsCardComplete = jest.fn(); +const mockIsCardAvailable = jest.fn(); const props = { setComplete: jest.fn(), @@ -19,64 +28,45 @@ const props = { describe('AlertsCard', () => { beforeEach(() => { + mockExperimentalFeatures.mockReturnValue({}); jest.clearAllMocks(); }); it('description should be in the document', () => { const { getByTestId } = render( - + + + ); expect(getByTestId('alertsCardDescription')).toBeInTheDocument(); }); - it('card callout should be rendered if integrations card is available but not complete', () => { - props.isCardAvailable.mockReturnValueOnce(true); - props.isCardComplete.mockReturnValueOnce(false); - - const { getByText } = render( - - - - ); - - expect(getByText('To view alerts add integrations first.')).toBeInTheDocument(); - }); - it('card callout should not be rendered if integrations card is not available', () => { - props.isCardAvailable.mockReturnValueOnce(false); + mockIsCardAvailable.mockReturnValueOnce(false); const { queryByText } = render( - + + + ); expect(queryByText('To view alerts add integrations first.')).not.toBeInTheDocument(); }); - it('card button should be disabled if integrations card is available but not complete', () => { - props.isCardAvailable.mockReturnValueOnce(true); - props.isCardComplete.mockReturnValueOnce(false); - - const { getByTestId } = render( - - - - ); - - expect(getByTestId('alertsCardButton').querySelector('button')).toBeDisabled(); - }); - it('card button should be enabled if integrations card is complete', () => { - props.isCardAvailable.mockReturnValueOnce(true); - props.isCardComplete.mockReturnValueOnce(true); + mockIsCardAvailable.mockReturnValueOnce(true); + mockIsCardComplete.mockReturnValueOnce(true); const { getByTestId } = render( - + + + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx index bdcf662a5643c..2ecbe87dc684a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx @@ -8,14 +8,21 @@ import React, { useCallback, useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiSpacer } from '@elastic/eui'; import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { css } from '@emotion/css'; import { SecuritySolutionLinkButton } from '../../../../../common/components/links'; import { OnboardingCardId } from '../../../../constants'; import type { OnboardingCardComponent } from '../../../../types'; -import { OnboardingCardContentImagePanel } from '../common/card_content_image_panel'; +import { OnboardingCardContentAssetPanel } from '../common/card_content_asset_panel'; import { CardCallOut } from '../common/card_callout'; import { CardSubduedText } from '../common/card_subdued_text'; -import alertsImageSrc from './images/alerts.png'; import * as i18n from './translations'; +import type { CardSelectorListItem } from '../common/card_selector_list'; +import { CardSelectorList } from '../common/card_selector_list'; +import { ALERTS_CARD_ITEMS_BY_ID, ALERTS_CARD_ITEMS } from './alerts_card_config'; +import { useOnboardingContext } from '../../../onboarding_context'; +import { DEFAULT_ALERTS_CARD_ITEM_SELECTED } from './constants'; +import { useStoredSelectedCardItemId } from '../../../hooks/use_stored_state'; +import type { CardSelectorAssetListItem } from '../types'; export const AlertsCard: OnboardingCardComponent = ({ isCardComplete, @@ -23,6 +30,17 @@ export const AlertsCard: OnboardingCardComponent = ({ setComplete, isCardAvailable, }) => { + const { spaceId } = useOnboardingContext(); + const [selectedAlertId, setSelectedAlertId] = useStoredSelectedCardItemId( + 'alerts', + spaceId, + DEFAULT_ALERTS_CARD_ITEM_SELECTED.id + ); + const selectedCardItem = useMemo( + () => ALERTS_CARD_ITEMS_BY_ID[selectedAlertId], + [selectedAlertId] + ); + const isIntegrationsCardComplete = useMemo( () => isCardComplete(OnboardingCardId.integrations), [isCardComplete] @@ -37,18 +55,36 @@ export const AlertsCard: OnboardingCardComponent = ({ setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); }, [setExpandedCardId]); + const onSelectCard = useCallback( + (item: CardSelectorListItem) => { + setSelectedAlertId(item.id); + }, + [setSelectedAlertId] + ); + return ( - + - + {i18n.ALERTS_CARD_DESCRIPTION} + + {isIntegrationsCardAvailable && !isIntegrationsCardComplete && ( <> @@ -81,7 +117,7 @@ export const AlertsCard: OnboardingCardComponent = ({ - + ); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card_config.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card_config.ts new file mode 100644 index 0000000000000..a52cc5dd72812 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card_config.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 { i18n } from '@kbn/i18n'; +import alertTimelineImageSrc from './images/alert_timeline.png'; +import sessionViewImageSrc from './images/session_view.png'; +import alertListImageSrc from './images/alert_list.png'; +import eventAnalyzerImageSrc from './images/event_analyzer.png'; +import { AlertsCardItemId } from './types'; +import type { CardSelectorAssetListItem } from '../types'; +import { CardAssetType } from '../types'; + +export const ALERTS_CARD_ITEMS: CardSelectorAssetListItem[] = [ + { + id: AlertsCardItemId.list, + title: i18n.translate('xpack.securitySolution.onboarding.alertsCards.details.title', { + defaultMessage: 'Alert list and details', + }), + description: i18n.translate( + 'xpack.securitySolution.onboarding.alertsCards.details.description', + { + defaultMessage: 'Sort through alerts and drill down into its details', + } + ), + asset: { + type: CardAssetType.image, + source: alertListImageSrc, + alt: i18n.translate('xpack.securitySolution.onboarding.alertsCards.details.description', { + defaultMessage: 'Sort through alerts and drill down into its details', + }), + }, + }, + { + id: AlertsCardItemId.timeline, + title: i18n.translate('xpack.securitySolution.onboarding.alertsCards.timeline.title', { + defaultMessage: 'Investigate in Timeline', + }), + description: i18n.translate( + 'xpack.securitySolution.onboarding.alertsCards.timeline.description', + { + defaultMessage: 'Streamline alert investigation with real-time visualization', + } + ), + asset: { + type: CardAssetType.image, + source: alertTimelineImageSrc, + alt: i18n.translate('xpack.securitySolution.onboarding.alertsCards.timeline.description', { + defaultMessage: 'Streamline alert investigation with real-time visualization', + }), + }, + }, + { + id: AlertsCardItemId.analyzer, + title: i18n.translate('xpack.securitySolution.onboarding.alertsCards.analyzer.title', { + defaultMessage: 'Investigate in Analyzer', + }), + description: i18n.translate( + 'xpack.securitySolution.onboarding.alertsCards.analyzer.description', + { + defaultMessage: 'Simplify alert analysis by visualizing threat detection processes', + } + ), + asset: { + type: CardAssetType.image, + source: eventAnalyzerImageSrc, + alt: i18n.translate('xpack.securitySolution.onboarding.alertsCards.analyzer.description', { + defaultMessage: 'Simplify alert analysis by visualizing threat detection processes', + }), + }, + }, + { + id: AlertsCardItemId.sessionView, + title: i18n.translate('xpack.securitySolution.onboarding.alertsCards.sessionView.title', { + defaultMessage: 'Investigate in Session View', + }), + description: i18n.translate( + 'xpack.securitySolution.onboarding.alertsCards.sessionView.description', + { + defaultMessage: 'Centralized threat analysis and response with real-time data insights', + } + ), + asset: { + type: CardAssetType.image, + source: sessionViewImageSrc, + alt: i18n.translate('xpack.securitySolution.onboarding.alertsCards.sessionView.description', { + defaultMessage: 'Centralized threat analysis and response with real-time data insights', + }), + }, + }, +]; + +export const ALERTS_CARD_ITEMS_BY_ID = Object.fromEntries( + ALERTS_CARD_ITEMS.map((card) => [card.id, card]) +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/constants.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/constants.ts new file mode 100644 index 0000000000000..eb815e8faa482 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/constants.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CardSelectorListItem } from '../common/card_selector_list'; +import { ALERTS_CARD_ITEMS } from './alerts_card_config'; + +export const DEFAULT_ALERTS_CARD_ITEM_SELECTED: CardSelectorListItem = ALERTS_CARD_ITEMS[0]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_details.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_details.png new file mode 100644 index 0000000000000..83900d2ca86b6 Binary files /dev/null and b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_details.png differ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_list.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_list.png new file mode 100644 index 0000000000000..7aa3cb72a22d3 Binary files /dev/null and b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_list.png differ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_timeline.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_timeline.png new file mode 100644 index 0000000000000..7e727e3b71b59 Binary files /dev/null and b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alert_timeline.png differ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/event_analyzer.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/event_analyzer.png new file mode 100644 index 0000000000000..577c68acac871 Binary files /dev/null and b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/event_analyzer.png differ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/session_view.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/session_view.png new file mode 100644 index 0000000000000..2f3cc77da8dd6 Binary files /dev/null and b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/session_view.png differ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts index 3138f01d20b66..ecb2abc9fd039 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts @@ -18,7 +18,7 @@ export const ALERTS_CARD_DESCRIPTION = i18n.translate( 'xpack.securitySolution.onboarding.alertsCard.description', { defaultMessage: - 'Visualize, sort, filter, and investigate alerts from across your infrastructure. Examine individual alerts of interest, and discover general patterns in alert volume and severity.', + 'Visualize, sort, filter, and investigate alerts from across your infrastructure.', } ); @@ -42,3 +42,10 @@ export const ALERTS_CARD_VIEW_ALERTS_BUTTON = i18n.translate( defaultMessage: 'View alerts', } ); + +export const ALERTS_CARD_STEP_SELECTOR_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.alertsCard.stepSelectorTitle', + { + defaultMessage: 'Here are four ways to use alerts', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/types.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/types.ts new file mode 100644 index 0000000000000..fa8a359f0ebab --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/types.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum AlertsCardItemId { + list = 'list', + timeline = 'timeline', + analyzer = 'analyzer', + sessionView = 'session_view', +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx index 31c98bbea097b..ae2a8e2c318fe 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx @@ -11,10 +11,11 @@ import { SecurityPageName } from '@kbn/security-solution-navigation'; import { SecuritySolutionLinkButton } from '../../../../../common/components/links'; import { OnboardingCardId } from '../../../../constants'; import type { OnboardingCardComponent } from '../../../../types'; -import { OnboardingCardContentImagePanel } from '../common/card_content_image_panel'; +import { OnboardingCardContentAssetPanel } from '../common/card_content_asset_panel'; import { CardCallOut } from '../common/card_callout'; import attackDiscoveryImageSrc from './images/attack_discovery.png'; import * as i18n from './translations'; +import { CardAssetType } from '../types'; export const AttackDiscoveryCard: OnboardingCardComponent = React.memo( ({ isCardComplete, setExpandedCardId, setComplete }) => { @@ -27,11 +28,17 @@ export const AttackDiscoveryCard: OnboardingCardComponent = React.memo( setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); }, [setExpandedCardId]); + const asset = useMemo( + () => ({ + type: CardAssetType.image, + source: attackDiscoveryImageSrc, + alt: i18n.ATTACK_DISCOVERY_CARD_TITLE, + }), + [] + ); + return ( - + - + ); } ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.styles.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.styles.ts similarity index 72% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.styles.ts rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.styles.ts index 2260b95ab9442..149b097820af4 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.styles.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.styles.ts @@ -8,15 +8,21 @@ import { css } from '@emotion/css'; import { useEuiTheme, useEuiShadow } from '@elastic/eui'; -export const useCardContentImagePanelStyles = () => { +export const useCardContentAssetPanelStyles = () => { const { euiTheme } = useEuiTheme(); const shadowStyles = useEuiShadow('m'); return css` .cardSpacer { - width: 8%; + width: 48px; } .cardImage { - width: 50%; + width: 488px; + height: 275px; + iframe { + border-radius: ${euiTheme.size.s}; + ${shadowStyles} + overflor: hidden; + } img { width: 100%; border-radius: ${euiTheme.size.s}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.test.tsx new file mode 100644 index 0000000000000..a193a2b775b6c --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.test.tsx @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { OnboardingCardContentAssetPanel } from './card_content_asset_panel'; +import { CardAssetType } from '../types'; + +describe('OnboardingCardContentAssetPanel', () => { + const defaultProps = { + asset: { + type: CardAssetType.image, + source: 'https://example.com/image.jpg', + alt: 'Example image', + }, + children:
{'Mock child'}
, + }; + + it('renders an image when asset type is image', () => { + const { getByAltText } = render(); + + const image = getByAltText('Example image'); + expect(image).toBeInTheDocument(); + expect(image).toHaveAttribute('src', 'https://example.com/image.jpg'); + }); + + it('renders a video when asset type is video', () => { + const videoProps = { + asset: { + type: CardAssetType.video, + source: 'https://example.com/video.mp4', + alt: 'Example video', + }, + children:
{'Mock child'}
, + }; + + const { getByTitle } = render(); + + const video = getByTitle('title'); + expect(video).toBeInTheDocument(); + expect(video).toHaveAttribute('src', 'https://example.com/video.mp4'); + expect(video).toHaveAttribute('allowFullScreen'); + expect(video).toHaveAttribute('sandbox', 'allow-scripts allow-same-origin'); + expect(video).toHaveAttribute('height', '275px'); + expect(video).toHaveAttribute('width', '488px'); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.tsx new file mode 100644 index 0000000000000..3f66067c3d418 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_asset_panel.tsx @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useMemo, type PropsWithChildren } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; +import { OnboardingCardContentPanel } from './card_content_panel'; +import { useCardContentAssetPanelStyles } from './card_content_asset_panel.styles'; +import { CardAssetType, type CardAsset } from '../types'; + +export const OnboardingCardContentAssetPanel = React.memo< + PropsWithChildren<{ + asset: CardAsset; + }> +>(({ children, asset: { type, source, alt } }) => { + const styles = useCardContentAssetPanelStyles(); + + const renderAssetContent = useMemo(() => { + if (type === CardAssetType.video) + return ( +